diff options
Diffstat (limited to 'linden')
407 files changed, 32904 insertions, 2750 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt index fae2e88..0c3fbdb 100644 --- a/linden/doc/contributions.txt +++ b/linden/doc/contributions.txt | |||
@@ -36,6 +36,7 @@ Aimee Trescothick | |||
36 | VWR-8482 | 36 | VWR-8482 |
37 | VWR-9255 | 37 | VWR-9255 |
38 | VWR-11844 | 38 | VWR-11844 |
39 | VWR-12748 | ||
39 | Alejandro Rosenthal | 40 | Alejandro Rosenthal |
40 | VWR-1184 | 41 | VWR-1184 |
41 | Aleric Inglewood | 42 | Aleric Inglewood |
@@ -81,6 +82,11 @@ Alissa Sabre | |||
81 | VWR-7087 | 82 | VWR-7087 |
82 | VWR-7153 | 83 | VWR-7153 |
83 | VWR-7168 | 84 | VWR-7168 |
85 | <<<<<<< HEAD | ||
86 | ======= | ||
87 | VWR-7087 | ||
88 | VWR-7086 | ||
89 | >>>>>>> origin/next | ||
84 | VWR-9190 | 90 | VWR-9190 |
85 | VWR-10728 | 91 | VWR-10728 |
86 | Angus Boyd | 92 | Angus Boyd |
@@ -89,6 +95,8 @@ Ann Congrejo | |||
89 | CT-193 | 95 | CT-193 |
90 | Argent Stonecutter | 96 | Argent Stonecutter |
91 | VWR-68 | 97 | VWR-68 |
98 | Armin Weatherwax | ||
99 | VWR-8436 | ||
92 | Asuka Neely | 100 | Asuka Neely |
93 | VWR-3434 | 101 | VWR-3434 |
94 | VWR-8179 | 102 | VWR-8179 |
diff --git a/linden/indra/cmake/00-Common.cmake b/linden/indra/cmake/00-Common.cmake index e867df8..a0bb951 100644 --- a/linden/indra/cmake/00-Common.cmake +++ b/linden/indra/cmake/00-Common.cmake | |||
@@ -31,9 +31,15 @@ if (WINDOWS) | |||
31 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO | 31 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO |
32 | "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD" | 32 | "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD" |
33 | CACHE STRING "C++ compiler release-with-debug options" FORCE) | 33 | CACHE STRING "C++ compiler release-with-debug options" FORCE) |
34 | set(CMAKE_CXX_FLAGS_RELEASE | 34 | if (MSVC80) |
35 | set(CMAKE_CXX_FLAGS_RELEASE | ||
36 | "${CMAKE_CXX_FLAGS_RELEASE} /O2 /Ob2 /Oi /Ot /GT /Zi /MT" | ||
37 | CACHE STRING "C++ compiler release options" FORCE) | ||
38 | else (MSVC80) | ||
39 | set(CMAKE_CXX_FLAGS_RELEASE | ||
35 | "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD" | 40 | "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD" |
36 | CACHE STRING "C++ compiler release options" FORCE) | 41 | CACHE STRING "C++ compiler release options" FORCE) |
42 | endif (MSVC80) | ||
37 | 43 | ||
38 | set(CMAKE_CXX_STANDARD_LIBRARIES "") | 44 | set(CMAKE_CXX_STANDARD_LIBRARIES "") |
39 | set(CMAKE_C_STANDARD_LIBRARIES "") | 45 | set(CMAKE_C_STANDARD_LIBRARIES "") |
@@ -60,21 +66,6 @@ if (WINDOWS) | |||
60 | /Zc:wchar_t- | 66 | /Zc:wchar_t- |
61 | ) | 67 | ) |
62 | endif (MSVC80 OR MSVC90) | 68 | endif (MSVC80 OR MSVC90) |
63 | |||
64 | # VS optimization flags | ||
65 | if(MSVC80) | ||
66 | |||
67 | set(NUMBER_OF_CORES $ENV{NUMBER_OF_PROCESSORS}) | ||
68 | |||
69 | set(CMAKE_CXX_FLAGS_RELEASE | ||
70 | "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /Oi /Ot /GT" | ||
71 | CACHE STRING "C++ compiler release options" FORCE) | ||
72 | |||
73 | add_definitions( | ||
74 | /MP${NUMBER_OF_CORES} | ||
75 | ) | ||
76 | |||
77 | endif (MSVC80) | ||
78 | 69 | ||
79 | # Are we using the crummy Visual Studio KDU build workaround? | 70 | # Are we using the crummy Visual Studio KDU build workaround? |
80 | if (NOT VS_DISABLE_FATAL_WARNINGS) | 71 | if (NOT VS_DISABLE_FATAL_WARNINGS) |
diff --git a/linden/indra/cmake/CopyWinLibs.cmake b/linden/indra/cmake/CopyWinLibs.cmake index e10b0da..3adba60 100644 --- a/linden/indra/cmake/CopyWinLibs.cmake +++ b/linden/indra/cmake/CopyWinLibs.cmake | |||
@@ -26,6 +26,7 @@ set(debug_files | |||
26 | windbgdlg.exe | 26 | windbgdlg.exe |
27 | iconv.dll | 27 | iconv.dll |
28 | libxml2.dll | 28 | libxml2.dll |
29 | libcairo-2.dll | ||
29 | libgio-2.0-0.dll | 30 | libgio-2.0-0.dll |
30 | libglib-2.0-0.dll | 31 | libglib-2.0-0.dll |
31 | libgmodule-2.0-0.dll | 32 | libgmodule-2.0-0.dll |
@@ -55,6 +56,8 @@ set(debug_files | |||
55 | libgstsdp.dll | 56 | libgstsdp.dll |
56 | libgsttag.dll | 57 | libgsttag.dll |
57 | libgstvideo.dll | 58 | libgstvideo.dll |
59 | libjpeg.dll | ||
60 | libmp3lame-0.dll | ||
58 | libneon-27.dll | 61 | libneon-27.dll |
59 | libogg-0.dll | 62 | libogg-0.dll |
60 | liboil-0.3-0.dll | 63 | liboil-0.3-0.dll |
@@ -66,6 +69,7 @@ set(debug_files | |||
66 | libvorbis-0.dll | 69 | libvorbis-0.dll |
67 | libvorbisenc-2.dll | 70 | libvorbisenc-2.dll |
68 | libxml2-2.dll | 71 | libxml2-2.dll |
72 | glew32.dll | ||
69 | xvidcore.dll | 73 | xvidcore.dll |
70 | zlib1.dll | 74 | zlib1.dll |
71 | ) | 75 | ) |
@@ -97,6 +101,7 @@ set(release_files | |||
97 | xul.dll | 101 | xul.dll |
98 | iconv.dll | 102 | iconv.dll |
99 | libxml2.dll | 103 | libxml2.dll |
104 | libcairo-2.dll | ||
100 | libgio-2.0-0.dll | 105 | libgio-2.0-0.dll |
101 | libglib-2.0-0.dll | 106 | libglib-2.0-0.dll |
102 | libgmodule-2.0-0.dll | 107 | libgmodule-2.0-0.dll |
@@ -126,6 +131,8 @@ set(release_files | |||
126 | libgstsdp.dll | 131 | libgstsdp.dll |
127 | libgsttag.dll | 132 | libgsttag.dll |
128 | libgstvideo.dll | 133 | libgstvideo.dll |
134 | libjpeg.dll | ||
135 | libmp3lame-0.dll | ||
129 | libneon-27.dll | 136 | libneon-27.dll |
130 | libogg-0.dll | 137 | libogg-0.dll |
131 | liboil-0.3-0.dll | 138 | liboil-0.3-0.dll |
@@ -137,6 +144,7 @@ set(release_files | |||
137 | libvorbis-0.dll | 144 | libvorbis-0.dll |
138 | libvorbisenc-2.dll | 145 | libvorbisenc-2.dll |
139 | libxml2-2.dll | 146 | libxml2-2.dll |
147 | glew32.dll | ||
140 | xvidcore.dll | 148 | xvidcore.dll |
141 | zlib1.dll | 149 | zlib1.dll |
142 | ) | 150 | ) |
diff --git a/linden/indra/cmake/GStreamer.cmake b/linden/indra/cmake/GStreamer.cmake index 880233e..51e1550 100644 --- a/linden/indra/cmake/GStreamer.cmake +++ b/linden/indra/cmake/GStreamer.cmake | |||
@@ -1,17 +1,19 @@ | |||
1 | # -*- cmake -*- | 1 | # -*- cmake -*- |
2 | include(Prebuilt) | 2 | include(Prebuilt) |
3 | 3 | ||
4 | # possible libxml should have its own .cmake file instead | 4 | # Maybe libxml and glib should have their own .cmake files |
5 | use_prebuilt_binary(libxml) | 5 | use_prebuilt_binary(libxml) |
6 | use_prebuilt_binary(glib) | ||
7 | |||
6 | set(GSTREAMER_FOUND ON FORCE BOOL) | 8 | set(GSTREAMER_FOUND ON FORCE BOOL) |
7 | set(GSTREAMER_PLUGINS_BASE_FOUND ON FORCE BOOL) | 9 | set(GSTREAMER_PLUGINS_BASE_FOUND ON FORCE BOOL) |
10 | |||
8 | use_prebuilt_binary(gstreamer) | 11 | use_prebuilt_binary(gstreamer) |
12 | use_prebuilt_binary(gstreamer-plugins) | ||
9 | 13 | ||
10 | if (WINDOWS) | 14 | if (WINDOWS) |
11 | 15 | ||
12 | use_prebuilt_binary(libxml) | ||
13 | use_prebuilt_binary(iconv) | 16 | use_prebuilt_binary(iconv) |
14 | use_prebuilt_binary(gstreamer-plugins) | ||
15 | set(GSTREAMER_FOUND ON FORCE BOOL) | 17 | set(GSTREAMER_FOUND ON FORCE BOOL) |
16 | set(GSTREAMER_INCLUDE_DIRS | 18 | set(GSTREAMER_INCLUDE_DIRS |
17 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib | 19 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib |
@@ -28,23 +30,23 @@ if (WINDOWS) | |||
28 | gmodule-2.0 | 30 | gmodule-2.0 |
29 | gobject-2.0 | 31 | gobject-2.0 |
30 | gthread-2.0 | 32 | gthread-2.0 |
31 | libgstvideo-0.10 | 33 | libgstvideo.lib |
32 | libgsttag-0.10 | 34 | libgsttag.lib |
33 | libgstsdp-0.10 | 35 | libgstsdp.lib |
34 | libgstrtsp-0.10 | 36 | libgstrtsp.lib |
35 | libgstrtp-0.10 | 37 | libgstrtp.lib |
36 | libgstriff-0.10 | 38 | libgstriff.lib |
37 | libgstreamer-0.10 | 39 | libgstreamer-0.10.lib |
38 | libgstpbutils-0.10 | 40 | libgstpbutils.lib |
39 | libgstnetbuffer-0.10 | 41 | libgstnetbuffer.lib |
40 | libgstnet-0.10 | 42 | libgstnet-0.10.lib |
41 | libgstinterfaces-0.10 | 43 | libgstinterfaces.lib |
42 | libgstdshow-0.10 | 44 | libgstdshow.lib |
43 | libgstdataprotocol-0.10 | 45 | libgstdataprotocol-0.10.lib |
44 | libgstcontroller-0.10 | 46 | libgstcontroller-0.10.lib |
45 | libgstbase-0.10 | 47 | libgstbase-0.10.lib |
46 | libgstaudio-0.10 | 48 | libgstaudio.lib |
47 | libgstapp-0.10 | 49 | libgstapp.lib |
48 | libxml2 | 50 | libxml2 |
49 | libxml2_a | 51 | libxml2_a |
50 | libxml2_a_dll | 52 | libxml2_a_dll |
@@ -62,7 +64,7 @@ else (WINDOWS) | |||
62 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2 | 64 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2 |
63 | ) | 65 | ) |
64 | 66 | ||
65 | if (DARWIN) | 67 | if (DARWIN) # Mac |
66 | 68 | ||
67 | find_library( XML2_LIB | 69 | find_library( XML2_LIB |
68 | NAMES xml2.2 | 70 | NAMES xml2.2 |
@@ -88,7 +90,9 @@ else (WINDOWS) | |||
88 | ${XML2_LIB} | 90 | ${XML2_LIB} |
89 | ) | 91 | ) |
90 | 92 | ||
91 | else (DARWIN) | 93 | else (DARWIN) # Linux |
94 | |||
95 | use_prebuilt_binary(theora) | ||
92 | 96 | ||
93 | set(GSTREAMER_LIBRARIES | 97 | set(GSTREAMER_LIBRARIES |
94 | gstvideo-0.10 | 98 | gstvideo-0.10 |
diff --git a/linden/indra/cmake/OPENAL.cmake b/linden/indra/cmake/OPENAL.cmake index 94fa75d..ad26d4c 100644 --- a/linden/indra/cmake/OPENAL.cmake +++ b/linden/indra/cmake/OPENAL.cmake | |||
@@ -11,7 +11,8 @@ if (OPENAL) | |||
11 | # message(STATUS "Building with OpenAL audio support") | 11 | # message(STATUS "Building with OpenAL audio support") |
12 | 12 | ||
13 | # OPENAL_LIB | 13 | # OPENAL_LIB |
14 | 14 | use_prebuilt_binary(openal) | |
15 | |||
15 | if (WINDOWS) | 16 | if (WINDOWS) |
16 | find_library(OPENAL_LIB | 17 | find_library(OPENAL_LIB |
17 | NAMES openal32 | 18 | NAMES openal32 |
diff --git a/linden/indra/cmake/Python.cmake b/linden/indra/cmake/Python.cmake index 4f86d32..0901c1b 100644 --- a/linden/indra/cmake/Python.cmake +++ b/linden/indra/cmake/Python.cmake | |||
@@ -13,6 +13,10 @@ if (WINDOWS) | |||
13 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] | 13 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] |
14 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] | 14 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] |
15 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] | 15 | [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] |
16 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] | ||
17 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] | ||
18 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] | ||
19 | [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] | ||
16 | ) | 20 | ) |
17 | elseif (EXISTS /etc/debian_version) | 21 | elseif (EXISTS /etc/debian_version) |
18 | # On Debian and Ubuntu, avoid Python 2.4 if possible. | 22 | # On Debian and Ubuntu, avoid Python 2.4 if possible. |
diff --git a/linden/indra/cmake/UI.cmake b/linden/indra/cmake/UI.cmake index f529f5b..b70a531 100644 --- a/linden/indra/cmake/UI.cmake +++ b/linden/indra/cmake/UI.cmake | |||
@@ -31,13 +31,13 @@ if (STANDALONE) | |||
31 | add_definitions(${${pkg}_CFLAGS_OTHERS}) | 31 | add_definitions(${${pkg}_CFLAGS_OTHERS}) |
32 | endforeach(pkg) | 32 | endforeach(pkg) |
33 | else (STANDALONE) | 33 | else (STANDALONE) |
34 | use_prebuilt_binary(gtk-atk-pango-glib) | 34 | use_prebuilt_binary(gtk-etc) |
35 | if (LINUX) | 35 | if (LINUX) |
36 | set(UI_LIBRARIES | 36 | set(UI_LIBRARIES |
37 | atk-1.0 | 37 | atk-1.0 |
38 | cairo | ||
38 | gdk-x11-2.0 | 39 | gdk-x11-2.0 |
39 | gdk_pixbuf-2.0 | 40 | gdk_pixbuf-2.0 |
40 | Xinerama | ||
41 | glib-2.0 | 41 | glib-2.0 |
42 | gmodule-2.0 | 42 | gmodule-2.0 |
43 | gobject-2.0 | 43 | gobject-2.0 |
@@ -47,11 +47,14 @@ else (STANDALONE) | |||
47 | pangoft2-1.0 | 47 | pangoft2-1.0 |
48 | pangox-1.0 | 48 | pangox-1.0 |
49 | pangoxft-1.0 | 49 | pangoxft-1.0 |
50 | pixman-1 | ||
50 | ) | 51 | ) |
51 | endif (LINUX) | 52 | endif (LINUX) |
52 | 53 | ||
53 | include_directories ( | 54 | include_directories ( |
54 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include | 55 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include |
56 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/cairo | ||
57 | ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/pixman-1 | ||
55 | ${LIBS_PREBUILT_DIR}/include | 58 | ${LIBS_PREBUILT_DIR}/include |
56 | ) | 59 | ) |
57 | foreach(include ${${LL_ARCH}_INCLUDES}) | 60 | foreach(include ${${LL_ARCH}_INCLUDES}) |
diff --git a/linden/indra/develop.py b/linden/indra/develop.py index 370a008..6388592 100755 --- a/linden/indra/develop.py +++ b/linden/indra/develop.py | |||
@@ -482,8 +482,15 @@ class WindowsSetup(PlatformSetup): | |||
482 | print 'Building with ', self.gens[version]['gen'] | 482 | print 'Building with ', self.gens[version]['gen'] |
483 | break | 483 | break |
484 | else: | 484 | else: |
485 | print >> sys.stderr, 'Cannot find a Visual Studio installation!' | 485 | print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions' |
486 | eys.exit(1) | 486 | for version in 'vc80 vc90 vc71'.split(): |
487 | if self.find_visual_studio_express(version): | ||
488 | self._generator = version | ||
489 | print 'Building with ', self.gens[version]['gen'] , "Express edition" | ||
490 | break | ||
491 | else: | ||
492 | print >> sys.stderr, 'Cannot find any Visual Studio installation' | ||
493 | eys.exit(1) | ||
487 | return self._generator | 494 | return self._generator |
488 | 495 | ||
489 | def _set_generator(self, gen): | 496 | def _set_generator(self, gen): |
@@ -536,6 +543,28 @@ class WindowsSetup(PlatformSetup): | |||
536 | print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] | 543 | print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] |
537 | return '' | 544 | return '' |
538 | 545 | ||
546 | def find_visual_studio_express(self, gen=None): | ||
547 | if gen is None: | ||
548 | gen = self._generator | ||
549 | gen = gen.lower() | ||
550 | try: | ||
551 | import _winreg | ||
552 | key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' % | ||
553 | self.gens[gen]['ver']) | ||
554 | value_str = (r'ProductDir') | ||
555 | print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' % | ||
556 | (key_str, value_str)) | ||
557 | print key_str | ||
558 | |||
559 | reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) | ||
560 | key = _winreg.OpenKey(reg, key_str) | ||
561 | value = _winreg.QueryValueEx(key, value_str)[0]+"IDE" | ||
562 | print 'Found: %s' % value | ||
563 | return value | ||
564 | except WindowsError, err: | ||
565 | print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] | ||
566 | return '' | ||
567 | |||
539 | def get_build_cmd(self): | 568 | def get_build_cmd(self): |
540 | if self.incredibuild: | 569 | if self.incredibuild: |
541 | config = self.build_type | 570 | config = self.build_type |
@@ -543,10 +572,23 @@ class WindowsSetup(PlatformSetup): | |||
543 | config = '\"%s|Win32\"' % config | 572 | config = '\"%s|Win32\"' % config |
544 | 573 | ||
545 | return "buildconsole %s.sln /build %s" % (self.project_name, config) | 574 | return "buildconsole %s.sln /build %s" % (self.project_name, config) |
575 | |||
576 | environment = self.find_visual_studio() | ||
577 | if environment == '': | ||
578 | environment = self.find_visual_studio_express() | ||
579 | if environment == '': | ||
580 | print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?" | ||
581 | else: | ||
582 | print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand" | ||
583 | build_dirs=self.build_dirs(); | ||
584 | print >> sys.stderr, "Solution can now be found in:", build_dirs[0] | ||
585 | print >> sys.stderr, "Set %s as startup project" % self.project_name | ||
586 | print >> sys.stderr, "Set build target is Release or RelWithDbgInfo" | ||
587 | exit(0) | ||
546 | 588 | ||
547 | # devenv.com is CLI friendly, devenv.exe... not so much. | 589 | # devenv.com is CLI friendly, devenv.exe... not so much. |
548 | return ('"%sdevenv.com" %s.sln /build %s' % | 590 | return ('"%sdevenv.com" %s.sln /build %s' % |
549 | (self.find_visual_studio(), self.project_name, self.build_type)) | 591 | (environment, self.project_name, self.build_type)) |
550 | 592 | ||
551 | def run(self, command, name=None): | 593 | def run(self, command, name=None): |
552 | '''Run a program. If the program fails, raise an exception.''' | 594 | '''Run a program. If the program fails, raise an exception.''' |
diff --git a/linden/indra/lib/python/indra/base/lluuid.py b/linden/indra/lib/python/indra/base/lluuid.py index aceea29..40ce818 100644 --- a/linden/indra/lib/python/indra/base/lluuid.py +++ b/linden/indra/lib/python/indra/base/lluuid.py | |||
@@ -26,7 +26,8 @@ THE SOFTWARE. | |||
26 | $/LicenseInfo$ | 26 | $/LicenseInfo$ |
27 | """ | 27 | """ |
28 | 28 | ||
29 | import md5, random, socket, string, time, re | 29 | import random, socket, string, time, re |
30 | from hashlib import md5 | ||
30 | import uuid | 31 | import uuid |
31 | 32 | ||
32 | def _int2binstr(i,l): | 33 | def _int2binstr(i,l): |
@@ -196,7 +197,7 @@ class UUID(object): | |||
196 | from c++ implementation for portability reasons. | 197 | from c++ implementation for portability reasons. |
197 | Returns self. | 198 | Returns self. |
198 | """ | 199 | """ |
199 | m = md5.new() | 200 | m = md5() |
200 | m.update(uuid.uuid1().bytes) | 201 | m.update(uuid.uuid1().bytes) |
201 | self._bits = m.digest() | 202 | self._bits = m.digest() |
202 | return self | 203 | return self |
diff --git a/linden/indra/lib/python/indra/ipc/llmessage.py b/linden/indra/lib/python/indra/ipc/llmessage.py index 6161bad..91fb36b 100644 --- a/linden/indra/lib/python/indra/ipc/llmessage.py +++ b/linden/indra/lib/python/indra/ipc/llmessage.py | |||
@@ -26,8 +26,6 @@ THE SOFTWARE. | |||
26 | $/LicenseInfo$ | 26 | $/LicenseInfo$ |
27 | """ | 27 | """ |
28 | 28 | ||
29 | from sets import Set, ImmutableSet | ||
30 | |||
31 | from compatibility import Incompatible, Older, Newer, Same | 29 | from compatibility import Incompatible, Older, Newer, Same |
32 | from tokenstream import TokenStream | 30 | from tokenstream import TokenStream |
33 | 31 | ||
@@ -44,8 +42,8 @@ class Template: | |||
44 | 42 | ||
45 | def compatibleWithBase(self, base): | 43 | def compatibleWithBase(self, base): |
46 | messagenames = ( | 44 | messagenames = ( |
47 | ImmutableSet(self.messages.keys()) | 45 | frozenset(self.messages.keys()) |
48 | | ImmutableSet(base.messages.keys()) | 46 | | frozenset(base.messages.keys()) |
49 | ) | 47 | ) |
50 | 48 | ||
51 | compatibility = Same() | 49 | compatibility = Same() |
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h index 5c8333c..574ed95 100644 --- a/linden/indra/llaudio/audioengine.h +++ b/linden/indra/llaudio/audioengine.h | |||
@@ -183,6 +183,8 @@ public: | |||
183 | static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status); | 183 | static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status); |
184 | 184 | ||
185 | friend class LLPipeline; // For debugging | 185 | friend class LLPipeline; // For debugging |
186 | |||
187 | LLMediaBase * getStreamMedia() { return mInternetStreamMedia; } | ||
186 | public: | 188 | public: |
187 | F32 mMaxWindGain; // Hack. Public to set before fade in? | 189 | F32 mMaxWindGain; // Hack. Public to set before fade in? |
188 | 190 | ||
diff --git a/linden/indra/llcommon/llchat.h b/linden/indra/llcommon/llchat.h index 7b010d6..6f9b8c4 100644 --- a/linden/indra/llcommon/llchat.h +++ b/linden/indra/llcommon/llchat.h | |||
@@ -43,7 +43,8 @@ typedef enum e_chat_source_type | |||
43 | { | 43 | { |
44 | CHAT_SOURCE_SYSTEM = 0, | 44 | CHAT_SOURCE_SYSTEM = 0, |
45 | CHAT_SOURCE_AGENT = 1, | 45 | CHAT_SOURCE_AGENT = 1, |
46 | CHAT_SOURCE_OBJECT = 2 | 46 | CHAT_SOURCE_OBJECT = 2, |
47 | CHAT_SOURCE_OBJECT_IM = 3 | ||
47 | } EChatSourceType; | 48 | } EChatSourceType; |
48 | 49 | ||
49 | typedef enum e_chat_type | 50 | typedef enum e_chat_type |
@@ -73,6 +74,10 @@ public: | |||
73 | : mText(text), | 74 | : mText(text), |
74 | mFromName(), | 75 | mFromName(), |
75 | mFromID(), | 76 | mFromID(), |
77 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
78 | mRlvLocFiltered(FALSE), | ||
79 | mRlvNamesFiltered(FALSE), | ||
80 | // [/RLVa:KB] | ||
76 | mSourceType(CHAT_SOURCE_AGENT), | 81 | mSourceType(CHAT_SOURCE_AGENT), |
77 | mChatType(CHAT_TYPE_NORMAL), | 82 | mChatType(CHAT_TYPE_NORMAL), |
78 | mAudible(CHAT_AUDIBLE_FULLY), | 83 | mAudible(CHAT_AUDIBLE_FULLY), |
@@ -81,10 +86,14 @@ public: | |||
81 | mPosAgent(), | 86 | mPosAgent(), |
82 | mURL() | 87 | mURL() |
83 | { } | 88 | { } |
84 | 89 | ||
85 | std::string mText; // UTF-8 line of text | 90 | std::string mText; // UTF-8 line of text |
86 | std::string mFromName; // agent or object name | 91 | std::string mFromName; // agent or object name |
87 | LLUUID mFromID; // agent id or object id | 92 | LLUUID mFromID; // agent id or object id |
93 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
94 | BOOL mRlvLocFiltered; | ||
95 | BOOL mRlvNamesFiltered; | ||
96 | // [/RLVa:KB] | ||
88 | EChatSourceType mSourceType; | 97 | EChatSourceType mSourceType; |
89 | EChatType mChatType; | 98 | EChatType mChatType; |
90 | EChatAudible mAudible; | 99 | EChatAudible mAudible; |
diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h index 99a9b9e..7db62bc 100644 --- a/linden/indra/llcommon/llstring.h +++ b/linden/indra/llcommon/llstring.h | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <wctype.h> | 39 | #include <wctype.h> |
40 | #include <wchar.h> | 40 | #include <wchar.h> |
41 | #endif | 41 | #endif |
42 | #include "linden_common.h" | ||
42 | 43 | ||
43 | #include <string.h> | 44 | #include <string.h> |
44 | 45 | ||
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index 826111f..bf08879 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h | |||
@@ -44,8 +44,8 @@ const char * const LL_VIEWER_NAME = "Second Life"; | |||
44 | const char * const IMP_VIEWER_NAME = "Imprudence"; | 44 | const char * const IMP_VIEWER_NAME = "Imprudence"; |
45 | 45 | ||
46 | const S32 IMP_VERSION_MAJOR = 1; | 46 | const S32 IMP_VERSION_MAJOR = 1; |
47 | const S32 IMP_VERSION_MINOR = 1; | 47 | const S32 IMP_VERSION_MINOR = 2; |
48 | const S32 IMP_VERSION_PATCH = 0; | 48 | const S32 IMP_VERSION_PATCH = 0; |
49 | const char * const IMP_VERSION_TEST = ""; | 49 | const char * const IMP_VERSION_TEST = "beta 2"; |
50 | 50 | ||
51 | #endif | 51 | #endif |
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp index 1250f53..a1cfe1d 100644 --- a/linden/indra/llmath/llvolume.cpp +++ b/linden/indra/llmath/llvolume.cpp | |||
@@ -2208,10 +2208,16 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, | |||
2208 | S32 requested_sizeS = 0; | 2208 | S32 requested_sizeS = 0; |
2209 | S32 requested_sizeT = 0; | 2209 | S32 requested_sizeT = 0; |
2210 | 2210 | ||
2211 | sculpt_calc_mesh_resolution(sculpt_width, sculpt_height, sculpt_type, mDetail, requested_sizeS, requested_sizeT); | 2211 | // create oblong sculpties with high LOD always |
2212 | F32 sculpt_detail = mDetail; | ||
2213 | if (sculpt_width != sculpt_height && sculpt_detail < 4.0) | ||
2214 | { | ||
2215 | sculpt_detail = 4.0; | ||
2216 | } | ||
2217 | sculpt_calc_mesh_resolution(sculpt_width, sculpt_height, sculpt_type, sculpt_detail, requested_sizeS, requested_sizeT); | ||
2212 | 2218 | ||
2213 | mPathp->generate(mParams.getPathParams(), mDetail, 0, TRUE, requested_sizeS); | 2219 | mPathp->generate(mParams.getPathParams(), sculpt_detail, 0, TRUE, requested_sizeS); |
2214 | mProfilep->generate(mParams.getProfileParams(), mPathp->isOpen(), mDetail, 0, TRUE, requested_sizeT); | 2220 | mProfilep->generate(mParams.getProfileParams(), mPathp->isOpen(), sculpt_detail, 0, TRUE, requested_sizeT); |
2215 | 2221 | ||
2216 | S32 sizeS = mPathp->mPath.size(); // we requested a specific size, now see what we really got | 2222 | S32 sizeS = mPathp->mPath.size(); // we requested a specific size, now see what we really got |
2217 | S32 sizeT = mProfilep->mProfile.size(); // we requested a specific size, now see what we really got | 2223 | S32 sizeT = mProfilep->mProfile.size(); // we requested a specific size, now see what we really got |
diff --git a/linden/indra/llmath/xform.h b/linden/indra/llmath/xform.h index d3be28f..7055a87 100644 --- a/linden/indra/llmath/xform.h +++ b/linden/indra/llmath/xform.h | |||
@@ -38,7 +38,7 @@ | |||
38 | 38 | ||
39 | const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f | 39 | const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f |
40 | const F32 MIN_OBJECT_Z = -256.f; | 40 | const F32 MIN_OBJECT_Z = -256.f; |
41 | const F32 DEFAULT_MAX_PRIM_SCALE = 10.f; | 41 | //const F32 DEFAULT_MAX_PRIM_SCALE = 10.f; set in llmanipscale.cpp now |
42 | const F32 MIN_PRIM_SCALE = 0.01f; | 42 | const F32 MIN_PRIM_SCALE = 0.01f; |
43 | const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX | 43 | const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX |
44 | 44 | ||
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp index d1bab29..a9e0004 100644 --- a/linden/indra/llmedia/llmediaimplgstreamer.cpp +++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp | |||
@@ -89,6 +89,7 @@ LLMediaImplGStreamer () : | |||
89 | mPump ( NULL ), | 89 | mPump ( NULL ), |
90 | mPlaybin ( NULL ), | 90 | mPlaybin ( NULL ), |
91 | mVideoSink ( NULL ), | 91 | mVideoSink ( NULL ), |
92 | mLastTitle ( "" ), | ||
92 | mState( GST_STATE_NULL ), | 93 | mState( GST_STATE_NULL ), |
93 | mPlayThread ( NULL ) | 94 | mPlayThread ( NULL ) |
94 | { | 95 | { |
@@ -470,6 +471,8 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp | |||
470 | case GST_STATE_PAUSED: | 471 | case GST_STATE_PAUSED: |
471 | break; | 472 | break; |
472 | case GST_STATE_PLAYING: | 473 | case GST_STATE_PLAYING: |
474 | //impl->mLastTitle = ""; | ||
475 | |||
473 | LLMediaEvent event( impl, 100 ); | 476 | LLMediaEvent event( impl, 100 ); |
474 | impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event ); | 477 | impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event ); |
475 | // emit an event to say that a media source was loaded | 478 | // emit an event to say that a media source was loaded |
@@ -521,18 +524,28 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp | |||
521 | } | 524 | } |
522 | case GST_MESSAGE_TAG: | 525 | case GST_MESSAGE_TAG: |
523 | { | 526 | { |
524 | GstTagList *tag_list; | 527 | GstTagList *new_tags; |
525 | gchar *title; | 528 | |
526 | gchar *artist; | 529 | gst_message_parse_tag( message, &new_tags ); |
527 | gst_message_parse_tag(message, &tag_list); | 530 | |
528 | gboolean hazTitle = gst_tag_list_get_string(tag_list, | 531 | gchar *title; |
529 | GST_TAG_TITLE, &title); | 532 | |
530 | gboolean hazArtist = gst_tag_list_get_string(tag_list, | 533 | if ( gst_tag_list_get_string(new_tags, GST_TAG_TITLE, &title) ) |
531 | GST_TAG_ARTIST, &artist); | 534 | { |
532 | if(hazTitle) | 535 | LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL; |
533 | LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL; | 536 | std::string newtitle(title); |
534 | if(hazArtist) | 537 | gst_tag_list_free(new_tags); |
535 | LL_INFOS("MediaInfo") << "Artist: " << artist << LL_ENDL; | 538 | |
539 | if ( newtitle != impl->mLastTitle && newtitle != "" ) | ||
540 | { | ||
541 | impl->mLastTitle = newtitle; | ||
542 | LLMediaEvent event( impl, impl->mLastTitle ); | ||
543 | impl->getEventEmitter().update( &LLMediaObserver::onMediaTitleChange, event ); | ||
544 | } | ||
545 | |||
546 | g_free(title); | ||
547 | } | ||
548 | |||
536 | break; | 549 | break; |
537 | } | 550 | } |
538 | case GST_MESSAGE_EOS: | 551 | case GST_MESSAGE_EOS: |
@@ -551,10 +564,10 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp | |||
551 | impl->addCommand(LLMediaBase::COMMAND_STOP); | 564 | impl->addCommand(LLMediaBase::COMMAND_STOP); |
552 | } | 565 | } |
553 | break; | 566 | break; |
567 | } | ||
554 | default: | 568 | default: |
555 | /* unhandled message */ | 569 | /* unhandled message */ |
556 | break; | 570 | break; |
557 | } | ||
558 | } | 571 | } |
559 | /* we want to be notified again the next time there is a message | 572 | /* we want to be notified again the next time there is a message |
560 | * on the bus, so return true (false means we want to stop watching | 573 | * on the bus, so return true (false means we want to stop watching |
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.h b/linden/indra/llmedia/llmediaimplgstreamer.h index baefdaf..8d2e756 100644 --- a/linden/indra/llmedia/llmediaimplgstreamer.h +++ b/linden/indra/llmedia/llmediaimplgstreamer.h | |||
@@ -40,12 +40,13 @@ | |||
40 | ///#if LL_GSTREAMER_ENABLED | 40 | ///#if LL_GSTREAMER_ENABLED |
41 | 41 | ||
42 | extern "C" { | 42 | extern "C" { |
43 | #include <stdio.h> | ||
44 | #include <gst/gst.h> | 43 | #include <gst/gst.h> |
44 | } | ||
45 | 45 | ||
46 | #include <stdio.h> | ||
46 | #include "apr_pools.h" | 47 | #include "apr_pools.h" |
47 | #include "apr_dso.h" | 48 | #include "apr_dso.h" |
48 | } | 49 | |
49 | 50 | ||
50 | #include "llmediaimplgstreamervidplug.h" | 51 | #include "llmediaimplgstreamervidplug.h" |
51 | #include "llgstplaythread.h" | 52 | #include "llgstplaythread.h" |
@@ -127,6 +128,7 @@ class LLMediaImplGStreamer: | |||
127 | GMainLoop *mPump; // event pump for this media | 128 | GMainLoop *mPump; // event pump for this media |
128 | GstElement *mPlaybin; | 129 | GstElement *mPlaybin; |
129 | GstSLVideo *mVideoSink; | 130 | GstSLVideo *mVideoSink; |
131 | std::string mLastTitle; | ||
130 | GstState mState; | 132 | GstState mState; |
131 | GstState getState() const { return mState; } | 133 | GstState getState() const { return mState; } |
132 | 134 | ||
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h index 5f794bb..ab8d755 100644 --- a/linden/indra/llmedia/llmediaobserver.h +++ b/linden/indra/llmedia/llmediaobserver.h | |||
@@ -103,6 +103,7 @@ class LLMediaObserver | |||
103 | virtual void onMediaSizeChange( const EventType& event_in ) { } | 103 | virtual void onMediaSizeChange( const EventType& event_in ) { } |
104 | virtual void onMediaContentsChange( const EventType& event_in ) { } | 104 | virtual void onMediaContentsChange( const EventType& event_in ) { } |
105 | virtual void onMediaStatusTextChange( const EventType& event_in ) { } | 105 | virtual void onMediaStatusTextChange( const EventType& event_in ) { } |
106 | virtual void onMediaTitleChange( const EventType &event_in ) { } | ||
106 | virtual void onNavigateBegin( const EventType& event_in ) { } | 107 | virtual void onNavigateBegin( const EventType& event_in ) { } |
107 | virtual void onNavigateComplete( const EventType& event_in ) { } | 108 | virtual void onNavigateComplete( const EventType& event_in ) { } |
108 | virtual void onUpdateProgress( const EventType& event_in ) { } | 109 | virtual void onUpdateProgress( const EventType& event_in ) { } |
diff --git a/linden/indra/llui/llclipboard.cpp b/linden/indra/llui/llclipboard.cpp index 8a7a214..2cb8197 100644 --- a/linden/indra/llui/llclipboard.cpp +++ b/linden/indra/llui/llclipboard.cpp | |||
@@ -93,3 +93,44 @@ BOOL LLClipboard::canPasteString() const | |||
93 | { | 93 | { |
94 | return LLView::getWindow()->isClipboardTextAvailable(); | 94 | return LLView::getWindow()->isClipboardTextAvailable(); |
95 | } | 95 | } |
96 | |||
97 | |||
98 | void LLClipboard::copyFromPrimarySubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id ) | ||
99 | { | ||
100 | mSourceID = source_id; | ||
101 | mString = src.substr(pos, len); | ||
102 | LLView::getWindow()->copyTextToPrimary( mString ); | ||
103 | } | ||
104 | |||
105 | |||
106 | const LLWString& LLClipboard::getPastePrimaryWString( LLUUID* source_id ) | ||
107 | { | ||
108 | if( mSourceID.notNull() ) | ||
109 | { | ||
110 | LLWString temp_string; | ||
111 | LLView::getWindow()->pasteTextFromPrimary(temp_string); | ||
112 | |||
113 | if( temp_string != mString ) | ||
114 | { | ||
115 | mSourceID.setNull(); | ||
116 | mString = temp_string; | ||
117 | } | ||
118 | } | ||
119 | else | ||
120 | { | ||
121 | LLView::getWindow()->pasteTextFromPrimary(mString); | ||
122 | } | ||
123 | |||
124 | if( source_id ) | ||
125 | { | ||
126 | *source_id = mSourceID; | ||
127 | } | ||
128 | |||
129 | return mString; | ||
130 | } | ||
131 | |||
132 | |||
133 | BOOL LLClipboard::canPastePrimaryString() const | ||
134 | { | ||
135 | return LLView::getWindow()->isPrimaryTextAvailable(); | ||
136 | } | ||
diff --git a/linden/indra/llui/llclipboard.h b/linden/indra/llui/llclipboard.h index 37ed1ff..034a7a6 100644 --- a/linden/indra/llui/llclipboard.h +++ b/linden/indra/llui/llclipboard.h | |||
@@ -44,10 +44,19 @@ public: | |||
44 | LLClipboard(); | 44 | LLClipboard(); |
45 | ~LLClipboard(); | 45 | ~LLClipboard(); |
46 | 46 | ||
47 | /* We support two flavors of clipboard. The default is the explicitly | ||
48 | copy-and-pasted clipboard. The second is the so-called 'primary' clipboard | ||
49 | which is implicitly copied upon selection on platforms which expect this | ||
50 | (i.e. X11/Linux). */ | ||
51 | |||
47 | void copyFromSubstring(const LLWString ©_from, S32 pos, S32 len, const LLUUID& source_id = LLUUID::null ); | 52 | void copyFromSubstring(const LLWString ©_from, S32 pos, S32 len, const LLUUID& source_id = LLUUID::null ); |
48 | BOOL canPasteString() const; | 53 | BOOL canPasteString() const; |
49 | const LLWString& getPasteWString(LLUUID* source_id = NULL); | 54 | const LLWString& getPasteWString(LLUUID* source_id = NULL); |
50 | 55 | ||
56 | void copyFromPrimarySubstring(const LLWString ©_from, S32 pos, S32 len, const LLUUID& source_id = LLUUID::null ); | ||
57 | BOOL canPastePrimaryString() const; | ||
58 | const LLWString& getPastePrimaryWString(LLUUID* source_id = NULL); | ||
59 | |||
51 | private: | 60 | private: |
52 | LLUUID mSourceID; | 61 | LLUUID mSourceID; |
53 | LLWString mString; | 62 | LLWString mString; |
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp index 94af186..defe200 100644 --- a/linden/indra/llui/llfloater.cpp +++ b/linden/indra/llui/llfloater.cpp | |||
@@ -1193,6 +1193,12 @@ BOOL LLFloater::handleRightMouseDown(S32 x, S32 y, MASK mask) | |||
1193 | return was_minimized || LLPanel::handleRightMouseDown( x, y, mask ); | 1193 | return was_minimized || LLPanel::handleRightMouseDown( x, y, mask ); |
1194 | } | 1194 | } |
1195 | 1195 | ||
1196 | BOOL LLFloater::handleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
1197 | { | ||
1198 | bringToFront( x, y ); | ||
1199 | return LLPanel::handleMiddleMouseDown( x, y, mask ); | ||
1200 | } | ||
1201 | |||
1196 | 1202 | ||
1197 | // virtual | 1203 | // virtual |
1198 | BOOL LLFloater::handleDoubleClick(S32 x, S32 y, MASK mask) | 1204 | BOOL LLFloater::handleDoubleClick(S32 x, S32 y, MASK mask) |
diff --git a/linden/indra/llui/llfloater.h b/linden/indra/llui/llfloater.h index a8f7c21..0e3d148 100644 --- a/linden/indra/llui/llfloater.h +++ b/linden/indra/llui/llfloater.h | |||
@@ -195,7 +195,7 @@ public: | |||
195 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); | 195 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); |
196 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); | 196 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); |
197 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); | 197 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); |
198 | 198 | virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask); | |
199 | virtual void draw(); | 199 | virtual void draw(); |
200 | 200 | ||
201 | virtual void onOpen() {} | 201 | virtual void onOpen() {} |
diff --git a/linden/indra/llui/llkeywords.cpp b/linden/indra/llui/llkeywords.cpp index 9ecd744..93da44c 100644 --- a/linden/indra/llui/llkeywords.cpp +++ b/linden/indra/llui/llkeywords.cpp | |||
@@ -381,9 +381,9 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS | |||
381 | seg_start = cur - base; | 381 | seg_start = cur - base; |
382 | cur += cur_delimiter->getLength(); | 382 | cur += cur_delimiter->getLength(); |
383 | 383 | ||
384 | if( cur_delimiter->getType() == LLKeywordToken::TWO_SIDED_DELIMITER || LLKeywordToken::TWO_SIDED_DELIMITER_ESC) | 384 | LLKeywordToken::TOKEN_TYPE type = cur_delimiter->getType(); |
385 | if (type == LLKeywordToken::TWO_SIDED_DELIMITER || type == LLKeywordToken::TWO_SIDED_DELIMITER_ESC) | ||
385 | { | 386 | { |
386 | llassert( cur_delimiter->getDelimiter() != NULL ); | ||
387 | while( *cur && !cur_delimiter->isTail(cur)) | 387 | while( *cur && !cur_delimiter->isTail(cur)) |
388 | { | 388 | { |
389 | // Check for an escape sequence. | 389 | // Check for an escape sequence. |
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp index f35fa58..fc33dcf 100644 --- a/linden/indra/llui/lllineeditor.cpp +++ b/linden/indra/llui/lllineeditor.cpp | |||
@@ -494,6 +494,9 @@ BOOL LLLineEditor::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
494 | // delay cursor flashing | 494 | // delay cursor flashing |
495 | mKeystrokeTimer.reset(); | 495 | mKeystrokeTimer.reset(); |
496 | 496 | ||
497 | // take selection to 'primary' clipboard | ||
498 | updatePrimary(); | ||
499 | |||
497 | return TRUE; | 500 | return TRUE; |
498 | } | 501 | } |
499 | 502 | ||
@@ -576,6 +579,17 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask) | |||
576 | return TRUE; | 579 | return TRUE; |
577 | } | 580 | } |
578 | 581 | ||
582 | BOOL LLLineEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
583 | { | ||
584 | // llinfos << "MiddleMouseDown" << llendl; | ||
585 | setFocus( TRUE ); | ||
586 | if( canPastePrimary() ) | ||
587 | { | ||
588 | setCursorAtLocalPos(x); | ||
589 | pastePrimary(); | ||
590 | } | ||
591 | return TRUE; | ||
592 | } | ||
579 | 593 | ||
580 | BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask) | 594 | BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask) |
581 | { | 595 | { |
@@ -670,6 +684,9 @@ BOOL LLLineEditor::handleMouseUp(S32 x, S32 y, MASK mask) | |||
670 | { | 684 | { |
671 | // delay cursor flashing | 685 | // delay cursor flashing |
672 | mKeystrokeTimer.reset(); | 686 | mKeystrokeTimer.reset(); |
687 | |||
688 | // take selection to 'primary' clipboard | ||
689 | updatePrimary(); | ||
673 | } | 690 | } |
674 | 691 | ||
675 | return handled; | 692 | return handled; |
@@ -873,7 +890,12 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask) | |||
873 | } | 890 | } |
874 | } | 891 | } |
875 | 892 | ||
876 | 893 | if(handled) | |
894 | { | ||
895 | // take selection to 'primary' clipboard | ||
896 | updatePrimary(); | ||
897 | } | ||
898 | |||
877 | return handled; | 899 | return handled; |
878 | } | 900 | } |
879 | 901 | ||
@@ -946,20 +968,42 @@ BOOL LLLineEditor::canPaste() const | |||
946 | return !mReadOnly && gClipboard.canPasteString(); | 968 | return !mReadOnly && gClipboard.canPasteString(); |
947 | } | 969 | } |
948 | 970 | ||
949 | |||
950 | // paste from clipboard | ||
951 | void LLLineEditor::paste() | 971 | void LLLineEditor::paste() |
952 | { | 972 | { |
953 | if (canPaste()) | 973 | bool is_primary = false; |
974 | pasteHelper(is_primary); | ||
975 | } | ||
976 | |||
977 | void LLLineEditor::pastePrimary() | ||
978 | { | ||
979 | bool is_primary = true; | ||
980 | pasteHelper(is_primary); | ||
981 | } | ||
982 | |||
983 | // paste from primary (is_primary==true) or clipboard (is_primary==false) | ||
984 | void LLLineEditor::pasteHelper(bool is_primary) | ||
985 | { | ||
986 | bool can_paste_it; | ||
987 | if (is_primary) | ||
988 | can_paste_it = canPastePrimary(); | ||
989 | else | ||
990 | can_paste_it = canPaste(); | ||
991 | |||
992 | if (can_paste_it) | ||
954 | { | 993 | { |
955 | LLWString paste = gClipboard.getPasteWString(); | 994 | LLWString paste; |
995 | if (is_primary) | ||
996 | paste = gClipboard.getPastePrimaryWString(); | ||
997 | else | ||
998 | paste = gClipboard.getPasteWString(); | ||
999 | |||
956 | if (!paste.empty()) | 1000 | if (!paste.empty()) |
957 | { | 1001 | { |
958 | // Prepare for possible rollback | 1002 | // Prepare for possible rollback |
959 | LLLineEditorRollback rollback(this); | 1003 | LLLineEditorRollback rollback(this); |
960 | 1004 | ||
961 | // Delete any selected characters | 1005 | // Delete any selected characters |
962 | if (hasSelection()) | 1006 | if ((!is_primary) && hasSelection()) |
963 | { | 1007 | { |
964 | deleteSelection(); | 1008 | deleteSelection(); |
965 | } | 1009 | } |
@@ -995,7 +1039,7 @@ void LLLineEditor::paste() | |||
995 | clean_string = clean_string.substr(0, wchars_that_fit); | 1039 | clean_string = clean_string.substr(0, wchars_that_fit); |
996 | reportBadKeystroke(); | 1040 | reportBadKeystroke(); |
997 | } | 1041 | } |
998 | 1042 | ||
999 | mText.insert(getCursor(), clean_string); | 1043 | mText.insert(getCursor(), clean_string); |
1000 | setCursor( getCursor() + (S32)clean_string.length() ); | 1044 | setCursor( getCursor() + (S32)clean_string.length() ); |
1001 | deselect(); | 1045 | deselect(); |
@@ -1016,7 +1060,30 @@ void LLLineEditor::paste() | |||
1016 | } | 1060 | } |
1017 | } | 1061 | } |
1018 | 1062 | ||
1019 | 1063 | // copy selection to primary | |
1064 | void LLLineEditor::copyPrimary() | ||
1065 | { | ||
1066 | if( canCopy() ) | ||
1067 | { | ||
1068 | S32 left_pos = llmin( mSelectionStart, mSelectionEnd ); | ||
1069 | S32 length = abs( mSelectionStart - mSelectionEnd ); | ||
1070 | gClipboard.copyFromPrimarySubstring( mText.getWString(), left_pos, length ); | ||
1071 | } | ||
1072 | } | ||
1073 | |||
1074 | BOOL LLLineEditor::canPastePrimary() const | ||
1075 | { | ||
1076 | return !mReadOnly && gClipboard.canPastePrimaryString(); | ||
1077 | } | ||
1078 | |||
1079 | void LLLineEditor::updatePrimary() | ||
1080 | { | ||
1081 | if(canCopy() ) | ||
1082 | { | ||
1083 | copyPrimary(); | ||
1084 | } | ||
1085 | } | ||
1086 | |||
1020 | BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) | 1087 | BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) |
1021 | { | 1088 | { |
1022 | BOOL handled = FALSE; | 1089 | BOOL handled = FALSE; |
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h index cc12aa1..a670b21 100644 --- a/linden/indra/llui/lllineeditor.h +++ b/linden/indra/llui/lllineeditor.h | |||
@@ -90,6 +90,7 @@ public: | |||
90 | /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); | 90 | /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); |
91 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); | 91 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); |
92 | /*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask); | 92 | /*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask); |
93 | /*virtual*/ BOOL handleMiddleMouseDown(S32 x,S32 y,MASK mask); | ||
93 | /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask ); | 94 | /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask ); |
94 | /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char); | 95 | /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char); |
95 | /*virtual*/ void onMouseCaptureLost(); | 96 | /*virtual*/ void onMouseCaptureLost(); |
@@ -97,13 +98,16 @@ public: | |||
97 | // LLEditMenuHandler overrides | 98 | // LLEditMenuHandler overrides |
98 | virtual void cut(); | 99 | virtual void cut(); |
99 | virtual BOOL canCut() const; | 100 | virtual BOOL canCut() const; |
100 | |||
101 | virtual void copy(); | 101 | virtual void copy(); |
102 | virtual BOOL canCopy() const; | 102 | virtual BOOL canCopy() const; |
103 | |||
104 | virtual void paste(); | 103 | virtual void paste(); |
105 | virtual BOOL canPaste() const; | 104 | virtual BOOL canPaste() const; |
106 | 105 | ||
106 | virtual void updatePrimary(); | ||
107 | virtual void copyPrimary(); | ||
108 | virtual void pastePrimary(); | ||
109 | virtual BOOL canPastePrimary() const; | ||
110 | |||
107 | virtual void doDelete(); | 111 | virtual void doDelete(); |
108 | virtual BOOL canDoDelete() const; | 112 | virtual BOOL canDoDelete() const; |
109 | 113 | ||
@@ -220,6 +224,9 @@ public: | |||
220 | 224 | ||
221 | private: | 225 | private: |
222 | // private helper methods | 226 | // private helper methods |
227 | |||
228 | void pasteHelper(bool is_primary); | ||
229 | |||
223 | void removeChar(); | 230 | void removeChar(); |
224 | void addChar(const llwchar c); | 231 | void addChar(const llwchar c); |
225 | void setCursorAtLocalPos(S32 local_mouse_x); | 232 | void setCursorAtLocalPos(S32 local_mouse_x); |
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp index 7b6c125..460b29f 100644 --- a/linden/indra/llui/llscrolllistctrl.cpp +++ b/linden/indra/llui/llscrolllistctrl.cpp | |||
@@ -743,6 +743,18 @@ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const | |||
743 | return ret; | 743 | return ret; |
744 | } | 744 | } |
745 | 745 | ||
746 | LLDynamicArray<LLUUID> LLScrollListCtrl::getSelectedIDs() | ||
747 | { | ||
748 | LLUUID selected_id; | ||
749 | LLDynamicArray<LLUUID> ids; | ||
750 | std::vector<LLScrollListItem*> selected = this->getAllSelected(); | ||
751 | for(std::vector<LLScrollListItem*>::iterator itr = selected.begin(); itr != selected.end(); ++itr) | ||
752 | { | ||
753 | ids.push_back((*itr)->getUUID()); | ||
754 | } | ||
755 | return ids; | ||
756 | } | ||
757 | |||
746 | S32 LLScrollListCtrl::getFirstSelectedIndex() const | 758 | S32 LLScrollListCtrl::getFirstSelectedIndex() const |
747 | { | 759 | { |
748 | S32 CurSelectedIndex = 0; | 760 | S32 CurSelectedIndex = 0; |
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h index 72d8894..516e4f1 100644 --- a/linden/indra/llui/llscrolllistctrl.h +++ b/linden/indra/llui/llscrolllistctrl.h | |||
@@ -458,6 +458,7 @@ public: | |||
458 | LLScrollListItem* getFirstSelected() const; | 458 | LLScrollListItem* getFirstSelected() const; |
459 | virtual S32 getFirstSelectedIndex() const; | 459 | virtual S32 getFirstSelectedIndex() const; |
460 | std::vector<LLScrollListItem*> getAllSelected() const; | 460 | std::vector<LLScrollListItem*> getAllSelected() const; |
461 | LLDynamicArray<LLUUID> getSelectedIDs(); | ||
461 | LLScrollListItem* getLastSelectedItem() const { return mLastSelected; } | 462 | LLScrollListItem* getLastSelectedItem() const { return mLastSelected; } |
462 | 463 | ||
463 | // iterate over all items | 464 | // iterate over all items |
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp index 1e973c0..2f531a2 100644 --- a/linden/indra/llui/llspinctrl.cpp +++ b/linden/indra/llui/llspinctrl.cpp | |||
@@ -469,6 +469,11 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask) | |||
469 | LLSpinCtrl::onDownBtn(this); | 469 | LLSpinCtrl::onDownBtn(this); |
470 | return TRUE; | 470 | return TRUE; |
471 | } | 471 | } |
472 | if(key == KEY_RETURN) | ||
473 | { | ||
474 | forceEditorCommit(); | ||
475 | return TRUE; | ||
476 | } | ||
472 | } | 477 | } |
473 | return FALSE; | 478 | return FALSE; |
474 | } | 479 | } |
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp index ccdf44b..32106f1 100644 --- a/linden/indra/llui/lltexteditor.cpp +++ b/linden/indra/llui/lltexteditor.cpp | |||
@@ -1205,6 +1205,18 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) | |||
1205 | } | 1205 | } |
1206 | 1206 | ||
1207 | 1207 | ||
1208 | BOOL LLTextEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
1209 | { | ||
1210 | setFocus( TRUE ); | ||
1211 | if( canPastePrimary() ) | ||
1212 | { | ||
1213 | setCursorAtLocalPos( x, y, TRUE ); | ||
1214 | pastePrimary(); | ||
1215 | } | ||
1216 | return TRUE; | ||
1217 | } | ||
1218 | |||
1219 | |||
1208 | BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask) | 1220 | BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask) |
1209 | { | 1221 | { |
1210 | BOOL handled = FALSE; | 1222 | BOOL handled = FALSE; |
@@ -1327,6 +1339,9 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) | |||
1327 | endSelection(); | 1339 | endSelection(); |
1328 | 1340 | ||
1329 | updateScrollFromCursor(); | 1341 | updateScrollFromCursor(); |
1342 | |||
1343 | // take selection to primary clipboard | ||
1344 | updatePrimary(); | ||
1330 | } | 1345 | } |
1331 | 1346 | ||
1332 | if( !hasSelection() ) | 1347 | if( !hasSelection() ) |
@@ -1334,6 +1349,9 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) | |||
1334 | handleMouseUpOverSegment( x, y, mask ); | 1349 | handleMouseUpOverSegment( x, y, mask ); |
1335 | } | 1350 | } |
1336 | 1351 | ||
1352 | // take selection to 'primary' clipboard | ||
1353 | updatePrimary(); | ||
1354 | |||
1337 | handled = TRUE; | 1355 | handled = TRUE; |
1338 | } | 1356 | } |
1339 | 1357 | ||
@@ -1396,8 +1414,12 @@ BOOL LLTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
1396 | // delay cursor flashing | 1414 | // delay cursor flashing |
1397 | resetKeystrokeTimer(); | 1415 | resetKeystrokeTimer(); |
1398 | 1416 | ||
1417 | // take selection to 'primary' clipboard | ||
1418 | updatePrimary(); | ||
1419 | |||
1399 | handled = TRUE; | 1420 | handled = TRUE; |
1400 | } | 1421 | } |
1422 | |||
1401 | return handled; | 1423 | return handled; |
1402 | } | 1424 | } |
1403 | 1425 | ||
@@ -1693,6 +1715,12 @@ BOOL LLTextEditor::handleSelectionKey(const KEY key, const MASK mask) | |||
1693 | } | 1715 | } |
1694 | } | 1716 | } |
1695 | 1717 | ||
1718 | if( handled ) | ||
1719 | { | ||
1720 | // take selection to 'primary' clipboard | ||
1721 | updatePrimary(); | ||
1722 | } | ||
1723 | |||
1696 | return handled; | 1724 | return handled; |
1697 | } | 1725 | } |
1698 | 1726 | ||
@@ -1872,22 +1900,46 @@ BOOL LLTextEditor::canPaste() const | |||
1872 | return !mReadOnly && gClipboard.canPasteString(); | 1900 | return !mReadOnly && gClipboard.canPasteString(); |
1873 | } | 1901 | } |
1874 | 1902 | ||
1875 | |||
1876 | // paste from clipboard | 1903 | // paste from clipboard |
1877 | void LLTextEditor::paste() | 1904 | void LLTextEditor::paste() |
1878 | { | 1905 | { |
1879 | if (!canPaste()) | 1906 | bool is_primary = false; |
1907 | pasteHelper(is_primary); | ||
1908 | } | ||
1909 | |||
1910 | // paste from primary | ||
1911 | void LLTextEditor::pastePrimary() | ||
1912 | { | ||
1913 | bool is_primary = true; | ||
1914 | pasteHelper(is_primary); | ||
1915 | } | ||
1916 | |||
1917 | // paste from primary (itsprimary==true) or clipboard (itsprimary==false) | ||
1918 | void LLTextEditor::pasteHelper(bool is_primary) | ||
1919 | { | ||
1920 | bool can_paste_it; | ||
1921 | if (is_primary) | ||
1922 | can_paste_it = canPastePrimary(); | ||
1923 | else | ||
1924 | can_paste_it = canPaste(); | ||
1925 | |||
1926 | if (!can_paste_it) | ||
1880 | { | 1927 | { |
1881 | return; | 1928 | return; |
1882 | } | 1929 | } |
1883 | LLUUID source_id; | 1930 | LLUUID source_id; |
1884 | LLWString paste = gClipboard.getPasteWString(&source_id); | 1931 | LLWString paste; |
1932 | if (is_primary) | ||
1933 | paste = gClipboard.getPastePrimaryWString(&source_id); | ||
1934 | else | ||
1935 | paste = gClipboard.getPasteWString(&source_id); | ||
1936 | |||
1885 | if (paste.empty()) | 1937 | if (paste.empty()) |
1886 | { | 1938 | { |
1887 | return; | 1939 | return; |
1888 | } | 1940 | } |
1889 | // Delete any selected characters (the paste replaces them) | 1941 | // Delete any selected characters (the paste replaces them) |
1890 | if( hasSelection() ) | 1942 | if( (!is_primary) && hasSelection() ) |
1891 | { | 1943 | { |
1892 | deleteSelection(TRUE); | 1944 | deleteSelection(TRUE); |
1893 | } | 1945 | } |
@@ -1921,6 +1973,32 @@ void LLTextEditor::paste() | |||
1921 | } | 1973 | } |
1922 | 1974 | ||
1923 | 1975 | ||
1976 | |||
1977 | // copy selection to primary | ||
1978 | void LLTextEditor::copyPrimary() | ||
1979 | { | ||
1980 | if( !canCopy() ) | ||
1981 | { | ||
1982 | return; | ||
1983 | } | ||
1984 | S32 left_pos = llmin( mSelectionStart, mSelectionEnd ); | ||
1985 | S32 length = abs( mSelectionStart - mSelectionEnd ); | ||
1986 | gClipboard.copyFromPrimarySubstring(mWText, left_pos, length, mSourceID); | ||
1987 | } | ||
1988 | |||
1989 | BOOL LLTextEditor::canPastePrimary() const | ||
1990 | { | ||
1991 | return !mReadOnly && gClipboard.canPastePrimaryString(); | ||
1992 | } | ||
1993 | |||
1994 | void LLTextEditor::updatePrimary() | ||
1995 | { | ||
1996 | if (canCopy()) | ||
1997 | { | ||
1998 | copyPrimary(); | ||
1999 | } | ||
2000 | } | ||
2001 | |||
1924 | BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask) | 2002 | BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask) |
1925 | { | 2003 | { |
1926 | BOOL handled = FALSE; | 2004 | BOOL handled = FALSE; |
@@ -1996,6 +2074,11 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask) | |||
1996 | } | 2074 | } |
1997 | } | 2075 | } |
1998 | 2076 | ||
2077 | if (handled) | ||
2078 | { | ||
2079 | updatePrimary(); | ||
2080 | } | ||
2081 | |||
1999 | return handled; | 2082 | return handled; |
2000 | } | 2083 | } |
2001 | 2084 | ||
@@ -3537,9 +3620,9 @@ void LLTextEditor::appendColoredText(const std::string &new_text, | |||
3537 | } | 3620 | } |
3538 | 3621 | ||
3539 | void LLTextEditor::appendStyledText(const std::string &new_text, | 3622 | void LLTextEditor::appendStyledText(const std::string &new_text, |
3540 | bool allow_undo, | 3623 | bool allow_undo, |
3541 | bool prepend_newline, | 3624 | bool prepend_newline, |
3542 | LLStyleSP stylep) | 3625 | const LLStyleSP stylep) |
3543 | { | 3626 | { |
3544 | S32 part = (S32)LLTextParser::WHOLE; | 3627 | S32 part = (S32)LLTextParser::WHOLE; |
3545 | if(mParseHTML) | 3628 | if(mParseHTML) |
@@ -3576,7 +3659,7 @@ void LLTextEditor::appendStyledText(const std::string &new_text, | |||
3576 | 3659 | ||
3577 | html->setLinkHREF(text.substr(start,end-start)); | 3660 | html->setLinkHREF(text.substr(start,end-start)); |
3578 | appendText(text.substr(start, end-start),allow_undo, prepend_newline, html); | 3661 | appendText(text.substr(start, end-start),allow_undo, prepend_newline, html); |
3579 | if (end < (S32)text.length()) | 3662 | if (end < (S32)text.length()) |
3580 | { | 3663 | { |
3581 | text = text.substr(end,text.length() - end); | 3664 | text = text.substr(end,text.length() - end); |
3582 | end=0; | 3665 | end=0; |
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h index 12195f2..a62f01d 100644 --- a/linden/indra/llui/lltexteditor.h +++ b/linden/indra/llui/lltexteditor.h | |||
@@ -84,6 +84,8 @@ public: | |||
84 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); | 84 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); |
85 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); | 85 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); |
86 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); | 86 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); |
87 | virtual BOOL handleMiddleMouseDown(S32 x,S32 y,MASK mask); | ||
88 | |||
87 | virtual BOOL handleKeyHere(KEY key, MASK mask ); | 89 | virtual BOOL handleKeyHere(KEY key, MASK mask ); |
88 | virtual BOOL handleUnicodeCharHere(llwchar uni_char); | 90 | virtual BOOL handleUnicodeCharHere(llwchar uni_char); |
89 | 91 | ||
@@ -119,6 +121,10 @@ public: | |||
119 | virtual BOOL canCopy() const; | 121 | virtual BOOL canCopy() const; |
120 | virtual void paste(); | 122 | virtual void paste(); |
121 | virtual BOOL canPaste() const; | 123 | virtual BOOL canPaste() const; |
124 | virtual void updatePrimary(); | ||
125 | virtual void copyPrimary(); | ||
126 | virtual void pastePrimary(); | ||
127 | virtual BOOL canPastePrimary() const; | ||
122 | virtual void doDelete(); | 128 | virtual void doDelete(); |
123 | virtual BOOL canDoDelete() const; | 129 | virtual BOOL canDoDelete() const; |
124 | virtual void selectAll(); | 130 | virtual void selectAll(); |
@@ -144,12 +150,12 @@ public: | |||
144 | void appendText(const std::string &wtext, bool allow_undo, bool prepend_newline, | 150 | void appendText(const std::string &wtext, bool allow_undo, bool prepend_newline, |
145 | const LLStyleSP stylep = NULL); | 151 | const LLStyleSP stylep = NULL); |
146 | 152 | ||
147 | void appendColoredText(const std::string &wtext, bool allow_undo, | 153 | void appendColoredText(const std::string &wtext, bool allow_undo, |
148 | bool prepend_newline, | 154 | bool prepend_newline, |
149 | const LLColor4 &color, | 155 | const LLColor4 &color, |
150 | const std::string& font_name = LLStringUtil::null); | 156 | const std::string& font_name = LLStringUtil::null); |
151 | // if styled text starts a line, you need to prepend a newline. | 157 | // if styled text starts a line, you need to prepend a newline. |
152 | void appendStyledText(const std::string &new_text, bool allow_undo, | 158 | void appendStyledText(const std::string &new_text, bool allow_undo, |
153 | bool prepend_newline, | 159 | bool prepend_newline, |
154 | LLStyleSP stylep = NULL); | 160 | LLStyleSP stylep = NULL); |
155 | void appendHighlightedText(const std::string &new_text, bool allow_undo, | 161 | void appendHighlightedText(const std::string &new_text, bool allow_undo, |
@@ -431,6 +437,8 @@ private: | |||
431 | // | 437 | // |
432 | // Methods | 438 | // Methods |
433 | // | 439 | // |
440 | void pasteHelper(bool is_primary); | ||
441 | |||
434 | void updateSegments(); | 442 | void updateSegments(); |
435 | void pruneSegments(); | 443 | void pruneSegments(); |
436 | 444 | ||
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp index 7047afc..36bc850 100644 --- a/linden/indra/llui/llview.cpp +++ b/linden/indra/llui/llview.cpp | |||
@@ -984,6 +984,30 @@ BOOL LLView::handleRightMouseUp(S32 x, S32 y, MASK mask) | |||
984 | } | 984 | } |
985 | return handled; | 985 | return handled; |
986 | } | 986 | } |
987 | |||
988 | BOOL LLView::handleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
989 | { | ||
990 | LLView* handled_view = childrenHandleMiddleMouseDown( x, y, mask ); | ||
991 | BOOL handled = (handled_view != NULL); | ||
992 | if( !handled && blockMouseEvent(x, y) ) | ||
993 | { | ||
994 | handled = TRUE; | ||
995 | handled_view = this; | ||
996 | } | ||
997 | |||
998 | return handled; | ||
999 | } | ||
1000 | |||
1001 | BOOL LLView::handleMiddleMouseUp(S32 x, S32 y, MASK mask) | ||
1002 | { | ||
1003 | BOOL handled = childrenHandleMiddleMouseUp( x, y, mask ) != NULL; | ||
1004 | if( !handled && blockMouseEvent(x, y) ) | ||
1005 | { | ||
1006 | handled = TRUE; | ||
1007 | } | ||
1008 | return handled; | ||
1009 | } | ||
1010 | |||
987 | 1011 | ||
988 | LLView* LLView::childrenHandleScrollWheel(S32 x, S32 y, S32 clicks) | 1012 | LLView* LLView::childrenHandleScrollWheel(S32 x, S32 y, S32 clicks) |
989 | { | 1013 | { |
@@ -1145,6 +1169,34 @@ LLView* LLView::childrenHandleRightMouseDown(S32 x, S32 y, MASK mask) | |||
1145 | return handled_view; | 1169 | return handled_view; |
1146 | } | 1170 | } |
1147 | 1171 | ||
1172 | LLView* LLView::childrenHandleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
1173 | { | ||
1174 | LLView* handled_view = NULL; | ||
1175 | |||
1176 | if (getVisible() && getEnabled() ) | ||
1177 | { | ||
1178 | for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) | ||
1179 | { | ||
1180 | LLView* viewp = *child_it; | ||
1181 | S32 local_x = x - viewp->getRect().mLeft; | ||
1182 | S32 local_y = y - viewp->getRect().mBottom; | ||
1183 | if (viewp->pointInView(local_x, local_y) && | ||
1184 | viewp->getVisible() && | ||
1185 | viewp->getEnabled() && | ||
1186 | viewp->handleMiddleMouseDown( local_x, local_y, mask )) | ||
1187 | { | ||
1188 | if (sDebugMouseHandling) | ||
1189 | { | ||
1190 | sMouseHandlerMessage = std::string("->") + viewp->mName + sMouseHandlerMessage; | ||
1191 | } | ||
1192 | handled_view = viewp; | ||
1193 | break; | ||
1194 | } | ||
1195 | } | ||
1196 | } | ||
1197 | return handled_view; | ||
1198 | } | ||
1199 | |||
1148 | LLView* LLView::childrenHandleDoubleClick(S32 x, S32 y, MASK mask) | 1200 | LLView* LLView::childrenHandleDoubleClick(S32 x, S32 y, MASK mask) |
1149 | { | 1201 | { |
1150 | LLView* handled_view = NULL; | 1202 | LLView* handled_view = NULL; |
@@ -1230,6 +1282,32 @@ LLView* LLView::childrenHandleRightMouseUp(S32 x, S32 y, MASK mask) | |||
1230 | return handled_view; | 1282 | return handled_view; |
1231 | } | 1283 | } |
1232 | 1284 | ||
1285 | LLView* LLView::childrenHandleMiddleMouseUp(S32 x, S32 y, MASK mask) | ||
1286 | { | ||
1287 | LLView* handled_view = NULL; | ||
1288 | if( getVisible() && getEnabled() ) | ||
1289 | { | ||
1290 | for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) | ||
1291 | { | ||
1292 | LLView* viewp = *child_it; | ||
1293 | S32 local_x = x - viewp->getRect().mLeft; | ||
1294 | S32 local_y = y - viewp->getRect().mBottom; | ||
1295 | if (viewp->pointInView(local_x, local_y) && | ||
1296 | viewp->getVisible() && | ||
1297 | viewp->getEnabled() && | ||
1298 | viewp->handleMiddleMouseUp( local_x, local_y, mask )) | ||
1299 | { | ||
1300 | if (sDebugMouseHandling) | ||
1301 | { | ||
1302 | sMouseHandlerMessage = std::string("->") + viewp->mName + sMouseHandlerMessage; | ||
1303 | } | ||
1304 | handled_view = viewp; | ||
1305 | break; | ||
1306 | } | ||
1307 | } | ||
1308 | } | ||
1309 | return handled_view; | ||
1310 | } | ||
1233 | 1311 | ||
1234 | void LLView::draw() | 1312 | void LLView::draw() |
1235 | { | 1313 | { |
@@ -2555,7 +2633,7 @@ void LLView::initFromXML(LLXMLNodePtr node, LLView* parent) | |||
2555 | node->getAttributeString("hover_cursor", cursor_string); | 2633 | node->getAttributeString("hover_cursor", cursor_string); |
2556 | mHoverCursor = getCursorFromString(cursor_string); | 2634 | mHoverCursor = getCursorFromString(cursor_string); |
2557 | } | 2635 | } |
2558 | 2636 | ||
2559 | node->getAttributeBOOL("use_bounding_rect", mUseBoundingRect); | 2637 | node->getAttributeBOOL("use_bounding_rect", mUseBoundingRect); |
2560 | node->getAttributeBOOL("mouse_opaque", mMouseOpaque); | 2638 | node->getAttributeBOOL("mouse_opaque", mMouseOpaque); |
2561 | 2639 | ||
diff --git a/linden/indra/llui/llview.h b/linden/indra/llui/llview.h index b5a34bd..539adea 100644 --- a/linden/indra/llui/llview.h +++ b/linden/indra/llui/llview.h | |||
@@ -465,6 +465,8 @@ public: | |||
465 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); | 465 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); |
466 | /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); | 466 | /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); |
467 | /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); | 467 | /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); |
468 | /*virtual*/ BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask); | ||
469 | /*virtual*/ BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask); | ||
468 | /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); | 470 | /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); |
469 | /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); | 471 | /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); |
470 | /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); | 472 | /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); |
@@ -603,6 +605,8 @@ protected: | |||
603 | LLView* childrenHandleHover(S32 x, S32 y, MASK mask); | 605 | LLView* childrenHandleHover(S32 x, S32 y, MASK mask); |
604 | LLView* childrenHandleMouseUp(S32 x, S32 y, MASK mask); | 606 | LLView* childrenHandleMouseUp(S32 x, S32 y, MASK mask); |
605 | LLView* childrenHandleMouseDown(S32 x, S32 y, MASK mask); | 607 | LLView* childrenHandleMouseDown(S32 x, S32 y, MASK mask); |
608 | LLView* childrenHandleMiddleMouseUp(S32 x, S32 y, MASK mask); | ||
609 | LLView* childrenHandleMiddleMouseDown(S32 x, S32 y, MASK mask); | ||
606 | LLView* childrenHandleDoubleClick(S32 x, S32 y, MASK mask); | 610 | LLView* childrenHandleDoubleClick(S32 x, S32 y, MASK mask); |
607 | LLView* childrenHandleScrollWheel(S32 x, S32 y, S32 clicks); | 611 | LLView* childrenHandleScrollWheel(S32 x, S32 y, S32 clicks); |
608 | LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask); | 612 | LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask); |
@@ -658,7 +662,7 @@ private: | |||
658 | boost::signals::connection mControlConnection; | 662 | boost::signals::connection mControlConnection; |
659 | 663 | ||
660 | ECursorType mHoverCursor; | 664 | ECursorType mHoverCursor; |
661 | 665 | ||
662 | public: | 666 | public: |
663 | static BOOL sDebugRects; // Draw debug rects behind everything. | 667 | static BOOL sDebugRects; // Draw debug rects behind everything. |
664 | static BOOL sDebugKeys; | 668 | static BOOL sDebugKeys; |
diff --git a/linden/indra/llvfs/lldir.cpp b/linden/indra/llvfs/lldir.cpp index f695c4c..29a3771 100644 --- a/linden/indra/llvfs/lldir.cpp +++ b/linden/indra/llvfs/lldir.cpp | |||
@@ -535,19 +535,23 @@ std::string LLDir::getForbiddenFileChars() | |||
535 | return "\\/:*?\"<>|"; | 535 | return "\\/:*?\"<>|"; |
536 | } | 536 | } |
537 | 537 | ||
538 | void LLDir::setLindenUserDir(const std::string &first, const std::string &last) | 538 | void LLDir::setLindenUserDir(const std::string &grid, const std::string &first, const std::string &last) |
539 | { | 539 | { |
540 | // if both first and last aren't set, assume we're grabbing the cached dir | 540 | // if both first and last aren't set, assume we're grabbing the cached dir |
541 | if (!first.empty() && !last.empty()) | 541 | if (!first.empty() && !last.empty()) |
542 | { | 542 | { |
543 | // some platforms have case-sensitive filesystems, so be | 543 | // some platforms have case-sensitive filesystems, so be |
544 | // utterly consistent with our firstname/lastname case. | 544 | // utterly consistent with our firstname/lastname case. |
545 | // std::string gridlower(grid); | ||
546 | // LLStringUtil::toLower(gridlower); | ||
545 | std::string firstlower(first); | 547 | std::string firstlower(first); |
546 | LLStringUtil::toLower(firstlower); | 548 | LLStringUtil::toLower(firstlower); |
547 | std::string lastlower(last); | 549 | std::string lastlower(last); |
548 | LLStringUtil::toLower(lastlower); | 550 | LLStringUtil::toLower(lastlower); |
549 | mLindenUserDir = getOSUserAppDir(); | 551 | mLindenUserDir = getOSUserAppDir(); |
550 | mLindenUserDir += mDirDelimiter; | 552 | mLindenUserDir += mDirDelimiter; |
553 | // mLindenUserDir += gridlower; | ||
554 | // mLindenUserDir += "-"; | ||
551 | mLindenUserDir += firstlower; | 555 | mLindenUserDir += firstlower; |
552 | mLindenUserDir += "_"; | 556 | mLindenUserDir += "_"; |
553 | mLindenUserDir += lastlower; | 557 | mLindenUserDir += lastlower; |
@@ -572,19 +576,23 @@ void LLDir::setChatLogsDir(const std::string &path) | |||
572 | } | 576 | } |
573 | } | 577 | } |
574 | 578 | ||
575 | void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string &last) | 579 | void LLDir::setPerAccountChatLogsDir(const std::string &grid, const std::string &first, const std::string &last) |
576 | { | 580 | { |
577 | // if both first and last aren't set, assume we're grabbing the cached dir | 581 | // if both first and last aren't set, assume we're grabbing the cached dir |
578 | if (!first.empty() && !last.empty()) | 582 | if (!first.empty() && !last.empty()) |
579 | { | 583 | { |
580 | // some platforms have case-sensitive filesystems, so be | 584 | // some platforms have case-sensitive filesystems, so be |
581 | // utterly consistent with our firstname/lastname case. | 585 | // utterly consistent with our firstname/lastname case. |
586 | // std::string gridlower(grid); | ||
587 | // LLStringUtil::toLower(gridlower); | ||
582 | std::string firstlower(first); | 588 | std::string firstlower(first); |
583 | LLStringUtil::toLower(firstlower); | 589 | LLStringUtil::toLower(firstlower); |
584 | std::string lastlower(last); | 590 | std::string lastlower(last); |
585 | LLStringUtil::toLower(lastlower); | 591 | LLStringUtil::toLower(lastlower); |
586 | mPerAccountChatLogsDir = getChatLogsDir(); | 592 | mPerAccountChatLogsDir = getChatLogsDir(); |
587 | mPerAccountChatLogsDir += mDirDelimiter; | 593 | mPerAccountChatLogsDir += mDirDelimiter; |
594 | // mPerAccountChatLogsDir += gridlower; | ||
595 | // mPerAccountChatLogsDir += "-"; | ||
588 | mPerAccountChatLogsDir += firstlower; | 596 | mPerAccountChatLogsDir += firstlower; |
589 | mPerAccountChatLogsDir += "_"; | 597 | mPerAccountChatLogsDir += "_"; |
590 | mPerAccountChatLogsDir += lastlower; | 598 | mPerAccountChatLogsDir += lastlower; |
diff --git a/linden/indra/llvfs/lldir.h b/linden/indra/llvfs/lldir.h index 760b651..21dcf5b 100644 --- a/linden/indra/llvfs/lldir.h +++ b/linden/indra/llvfs/lldir.h | |||
@@ -125,8 +125,8 @@ class LLDir | |||
125 | static std::string getForbiddenFileChars(); | 125 | static std::string getForbiddenFileChars(); |
126 | 126 | ||
127 | virtual void setChatLogsDir(const std::string &path); // Set the chat logs dir to this user's dir | 127 | virtual void setChatLogsDir(const std::string &path); // Set the chat logs dir to this user's dir |
128 | virtual void setPerAccountChatLogsDir(const std::string &first, const std::string &last); // Set the per user chat log directory. | 128 | virtual void setPerAccountChatLogsDir(const std::string &grid, const std::string &first, const std::string &last); // Set the per user chat log directory. |
129 | virtual void setLindenUserDir(const std::string &first, const std::string &last); // Set the linden user dir to this user's dir | 129 | virtual void setLindenUserDir(const std::string &grid, const std::string &first, const std::string &last); // Set the linden user dir to this user's dir |
130 | virtual void setSkinFolder(const std::string &skin_folder); | 130 | virtual void setSkinFolder(const std::string &skin_folder); |
131 | virtual bool setCacheDir(const std::string &path); | 131 | virtual bool setCacheDir(const std::string &path); |
132 | 132 | ||
diff --git a/linden/indra/llwindow/CMakeLists.txt b/linden/indra/llwindow/CMakeLists.txt index 95e315f..afce0c0 100644 --- a/linden/indra/llwindow/CMakeLists.txt +++ b/linden/indra/llwindow/CMakeLists.txt | |||
@@ -46,6 +46,7 @@ set(llwindows_HEADER_FILES | |||
46 | 46 | ||
47 | set(viewer_SOURCE_FILES | 47 | set(viewer_SOURCE_FILES |
48 | llwindow.cpp | 48 | llwindow.cpp |
49 | llmousehandler.cpp | ||
49 | ) | 50 | ) |
50 | 51 | ||
51 | set(viewer_HEADER_FILES | 52 | set(viewer_HEADER_FILES |
diff --git a/linden/indra/llwindow/llmousehandler.cpp b/linden/indra/llwindow/llmousehandler.cpp new file mode 100644 index 0000000..ae2f147 --- /dev/null +++ b/linden/indra/llwindow/llmousehandler.cpp | |||
@@ -0,0 +1,59 @@ | |||
1 | /** | ||
2 | * @file llmousehandler.cpp | ||
3 | * @brief LLMouseHandler class implementation | ||
4 | * | ||
5 | * $LicenseInfo:firstyear=2001&license=viewergpl$ | ||
6 | * | ||
7 | * Copyright (c) 2001-2007, 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 http://secondlife.com/developers/opensource/flossexception | ||
21 | * | ||
22 | * By copying, modifying or distributing this software, you acknowledge | ||
23 | * that you have read and understood your obligations described above, | ||
24 | * and agree to abide by those obligations. | ||
25 | * | ||
26 | * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO | ||
27 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
28 | * COMPLETENESS OR PERFORMANCE. | ||
29 | * $/LicenseInfo$ | ||
30 | */ | ||
31 | |||
32 | #include "llmousehandler.h" | ||
33 | |||
34 | //virtual | ||
35 | BOOL LLMouseHandler::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down) | ||
36 | { | ||
37 | BOOL handled = FALSE; | ||
38 | if (down) | ||
39 | { | ||
40 | switch (clicktype) | ||
41 | { | ||
42 | case CLICK_LEFT: handled = handleMouseDown(x, y, mask); break; | ||
43 | case CLICK_RIGHT: handled = handleRightMouseDown(x, y, mask); break; | ||
44 | case CLICK_MIDDLE: handled = handleMiddleMouseDown(x, y, mask); break; | ||
45 | case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break; | ||
46 | } | ||
47 | } | ||
48 | else | ||
49 | { | ||
50 | switch (clicktype) | ||
51 | { | ||
52 | case CLICK_LEFT: handled = handleMouseUp(x, y, mask); break; | ||
53 | case CLICK_RIGHT: handled = handleRightMouseUp(x, y, mask); break; | ||
54 | case CLICK_MIDDLE: handled = handleMiddleMouseUp(x, y, mask); break; | ||
55 | case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break; | ||
56 | } | ||
57 | } | ||
58 | return handled; | ||
59 | } | ||
diff --git a/linden/indra/llwindow/llmousehandler.h b/linden/indra/llwindow/llmousehandler.h index f3a2edd..7bd0f2e 100644 --- a/linden/indra/llwindow/llmousehandler.h +++ b/linden/indra/llwindow/llmousehandler.h | |||
@@ -33,9 +33,10 @@ | |||
33 | #ifndef LL_MOUSEHANDLER_H | 33 | #ifndef LL_MOUSEHANDLER_H |
34 | #define LL_MOUSEHANDLER_H | 34 | #define LL_MOUSEHANDLER_H |
35 | 35 | ||
36 | #include "llstring.h" | 36 | #include "linden_common.h" |
37 | #include "llrect.h" | ||
37 | 38 | ||
38 | // Abstract interface. | 39 | // Mostly-abstract interface. |
39 | // Intended for use via multiple inheritance. | 40 | // Intended for use via multiple inheritance. |
40 | // A class may have as many interfaces as it likes, but never needs to inherit one more than once. | 41 | // A class may have as many interfaces as it likes, but never needs to inherit one more than once. |
41 | 42 | ||
@@ -49,13 +50,23 @@ public: | |||
49 | SHOW_IF_NOT_BLOCKED, | 50 | SHOW_IF_NOT_BLOCKED, |
50 | SHOW_ALWAYS, | 51 | SHOW_ALWAYS, |
51 | } EShowToolTip; | 52 | } EShowToolTip; |
53 | typedef enum { | ||
54 | CLICK_LEFT, | ||
55 | CLICK_MIDDLE, | ||
56 | CLICK_RIGHT, | ||
57 | CLICK_DOUBLELEFT | ||
58 | } EClickType; | ||
59 | virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down); | ||
52 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0; | 60 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0; |
53 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0; | 61 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0; |
54 | virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0; | 62 | virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask) = 0; |
55 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) = 0; | 63 | virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask) = 0; |
56 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0; | ||
57 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) = 0; | 64 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) = 0; |
58 | virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) = 0; | 65 | virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) = 0; |
66 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0; | ||
67 | |||
68 | virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0; | ||
69 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) = 0; | ||
59 | virtual BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) = 0; | 70 | virtual BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) = 0; |
60 | virtual EShowToolTip getShowToolTip() { return SHOW_IF_NOT_BLOCKED; }; | 71 | virtual EShowToolTip getShowToolTip() { return SHOW_IF_NOT_BLOCKED; }; |
61 | virtual const std::string& getName() const = 0; | 72 | virtual const std::string& getName() const = 0; |
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp index fb4770e..53ca68d 100644 --- a/linden/indra/llwindow/llwindow.cpp +++ b/linden/indra/llwindow/llwindow.cpp | |||
@@ -308,6 +308,22 @@ void *LLWindow::getMediaWindow() | |||
308 | return getPlatformWindow(); | 308 | return getPlatformWindow(); |
309 | } | 309 | } |
310 | 310 | ||
311 | //virtual | ||
312 | BOOL LLWindow::isPrimaryTextAvailable() | ||
313 | { | ||
314 | return FALSE; // no | ||
315 | } | ||
316 | //virtual | ||
317 | BOOL LLWindow::pasteTextFromPrimary(LLWString &dst) | ||
318 | { | ||
319 | return FALSE; // fail | ||
320 | } | ||
321 | // virtual | ||
322 | BOOL LLWindow::copyTextToPrimary(const LLWString &src) | ||
323 | { | ||
324 | return FALSE; // fail | ||
325 | } | ||
326 | |||
311 | // static | 327 | // static |
312 | std::vector<std::string> LLWindow::getDynamicFallbackFontList() | 328 | std::vector<std::string> LLWindow::getDynamicFallbackFontList() |
313 | { | 329 | { |
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h index 9e01596..a649766 100644 --- a/linden/indra/llwindow/llwindow.h +++ b/linden/indra/llwindow/llwindow.h | |||
@@ -144,9 +144,15 @@ public: | |||
144 | virtual void captureMouse() = 0; | 144 | virtual void captureMouse() = 0; |
145 | virtual void releaseMouse() = 0; | 145 | virtual void releaseMouse() = 0; |
146 | virtual void setMouseClipping( BOOL b ) = 0; | 146 | virtual void setMouseClipping( BOOL b ) = 0; |
147 | |||
147 | virtual BOOL isClipboardTextAvailable() = 0; | 148 | virtual BOOL isClipboardTextAvailable() = 0; |
148 | virtual BOOL pasteTextFromClipboard(LLWString &dst) = 0; | 149 | virtual BOOL pasteTextFromClipboard(LLWString &dst) = 0; |
149 | virtual BOOL copyTextToClipboard(const LLWString &src) = 0; | 150 | virtual BOOL copyTextToClipboard(const LLWString &src) = 0; |
151 | |||
152 | virtual BOOL isPrimaryTextAvailable(); | ||
153 | virtual BOOL pasteTextFromPrimary(LLWString &dst); | ||
154 | virtual BOOL copyTextToPrimary(const LLWString &src); | ||
155 | |||
150 | virtual void flashIcon(F32 seconds) = 0; | 156 | virtual void flashIcon(F32 seconds) = 0; |
151 | virtual F32 getGamma() = 0; | 157 | virtual F32 getGamma() = 0; |
152 | virtual BOOL setGamma(const F32 gamma) = 0; // Set the gamma | 158 | virtual BOOL setGamma(const F32 gamma) = 0; // Set the gamma |
@@ -197,6 +203,7 @@ public: | |||
197 | virtual void updateLanguageTextInputArea() {} | 203 | virtual void updateLanguageTextInputArea() {} |
198 | virtual void interruptLanguageTextInput() {} | 204 | virtual void interruptLanguageTextInput() {} |
199 | virtual void spawnWebBrowser(const std::string& escaped_url) {}; | 205 | virtual void spawnWebBrowser(const std::string& escaped_url) {}; |
206 | virtual void ShellEx(const std::string& command) {}; | ||
200 | 207 | ||
201 | static std::vector<std::string> getDynamicFallbackFontList(); | 208 | static std::vector<std::string> getDynamicFallbackFontList(); |
202 | 209 | ||
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp index f9c170e..4dd0550 100644 --- a/linden/indra/llwindow/llwindowsdl.cpp +++ b/linden/indra/llwindow/llwindowsdl.cpp | |||
@@ -1230,7 +1230,6 @@ void LLWindowSDL::flashIcon(F32 seconds) | |||
1230 | #endif // LL_X11 | 1230 | #endif // LL_X11 |
1231 | } | 1231 | } |
1232 | 1232 | ||
1233 | |||
1234 | #if LL_GTK | 1233 | #if LL_GTK |
1235 | BOOL LLWindowSDL::isClipboardTextAvailable() | 1234 | BOOL LLWindowSDL::isClipboardTextAvailable() |
1236 | { | 1235 | { |
@@ -1274,22 +1273,80 @@ BOOL LLWindowSDL::copyTextToClipboard(const LLWString &text) | |||
1274 | return FALSE; // failure | 1273 | return FALSE; // failure |
1275 | } | 1274 | } |
1276 | 1275 | ||
1277 | #else | 1276 | BOOL LLWindowSDL::isPrimaryTextAvailable() |
1277 | { | ||
1278 | if (ll_try_gtk_init()) | ||
1279 | { | ||
1280 | GtkClipboard * const clipboard = | ||
1281 | gtk_clipboard_get(GDK_SELECTION_PRIMARY); | ||
1282 | return gtk_clipboard_wait_is_text_available(clipboard) ? | ||
1283 | TRUE : FALSE; | ||
1284 | } | ||
1285 | return FALSE; // failure | ||
1286 | } | ||
1287 | |||
1288 | BOOL LLWindowSDL::pasteTextFromPrimary(LLWString &text) | ||
1289 | { | ||
1290 | if (ll_try_gtk_init()) | ||
1291 | { | ||
1292 | GtkClipboard * const clipboard = | ||
1293 | gtk_clipboard_get(GDK_SELECTION_PRIMARY); | ||
1294 | gchar * const data = gtk_clipboard_wait_for_text(clipboard); | ||
1295 | if (data) | ||
1296 | { | ||
1297 | text = LLWString(utf8str_to_wstring(data)); | ||
1298 | g_free(data); | ||
1299 | return TRUE; | ||
1300 | } | ||
1301 | } | ||
1302 | return FALSE; // failure | ||
1303 | } | ||
1278 | 1304 | ||
1305 | BOOL LLWindowSDL::copyTextToPrimary(const LLWString &text) | ||
1306 | { | ||
1307 | if (ll_try_gtk_init()) | ||
1308 | { | ||
1309 | const std::string utf8 = wstring_to_utf8str(text); | ||
1310 | GtkClipboard * const clipboard = | ||
1311 | gtk_clipboard_get(GDK_SELECTION_PRIMARY); | ||
1312 | gtk_clipboard_set_text(clipboard, utf8.c_str(), utf8.length()); | ||
1313 | return TRUE; | ||
1314 | } | ||
1315 | return FALSE; // failure | ||
1316 | } | ||
1317 | |||
1318 | #else | ||
1319 | |||
1279 | BOOL LLWindowSDL::isClipboardTextAvailable() | 1320 | BOOL LLWindowSDL::isClipboardTextAvailable() |
1280 | { | 1321 | { |
1281 | return FALSE; // unsupported | 1322 | return FALSE; // unsupported |
1282 | } | 1323 | } |
1283 | 1324 | ||
1284 | BOOL LLWindowSDL::pasteTextFromClipboard(LLWString &dst) | 1325 | BOOL LLWindowSDL::pasteTextFromClipboard(LLWString &dst) |
1285 | { | 1326 | { |
1286 | return FALSE; // unsupported | 1327 | return FALSE; // unsupported |
1287 | } | 1328 | } |
1329 | |||
1288 | 1330 | ||
1289 | BOOL LLWindowSDL::copyTextToClipboard(const LLWString &s) | 1331 | BOOL LLWindowSDL::copyTextToClipboard(const LLWString &s) |
1290 | { | 1332 | { |
1291 | return FALSE; // unsupported | 1333 | return FALSE; // unsupported |
1292 | } | 1334 | } |
1335 | |||
1336 | BOOL LLWindowSDL::isPrimaryTextAvailable() | ||
1337 | { | ||
1338 | return FALSE; // unsupported | ||
1339 | } | ||
1340 | |||
1341 | BOOL LLWindowSDL::pasteTextFromPrimary(LLWString &dst) | ||
1342 | { | ||
1343 | return FALSE; // unsupported | ||
1344 | } | ||
1345 | |||
1346 | BOOL LLWindowSDL::copyTextToPrimary(const LLWString &s) | ||
1347 | { | ||
1348 | return FALSE; // unsupported | ||
1349 | } | ||
1293 | #endif // LL_GTK | 1350 | #endif // LL_GTK |
1294 | 1351 | ||
1295 | LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_resolutions) | 1352 | LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_resolutions) |
@@ -2092,8 +2149,7 @@ S32 OSMessageBoxSDL(const std::string& text, const std::string& caption, U32 typ | |||
2092 | buttons = GTK_BUTTONS_YES_NO; | 2149 | buttons = GTK_BUTTONS_YES_NO; |
2093 | break; | 2150 | break; |
2094 | } | 2151 | } |
2095 | win = gtk_message_dialog_new(NULL, flags, messagetype, buttons, "%s", | 2152 | win = gtk_message_dialog_new(NULL,flags, messagetype, buttons, "%s", text.c_str()); |
2096 | text.c_str()); | ||
2097 | 2153 | ||
2098 | # if LL_X11 | 2154 | # if LL_X11 |
2099 | // Make GTK tell the window manager to associate this | 2155 | // Make GTK tell the window manager to associate this |
diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h index cebb151..632d8fc 100644 --- a/linden/indra/llwindow/llwindowsdl.h +++ b/linden/indra/llwindow/llwindowsdl.h | |||
@@ -80,9 +80,15 @@ public: | |||
80 | /*virtual*/ void captureMouse(); | 80 | /*virtual*/ void captureMouse(); |
81 | /*virtual*/ void releaseMouse(); | 81 | /*virtual*/ void releaseMouse(); |
82 | /*virtual*/ void setMouseClipping( BOOL b ); | 82 | /*virtual*/ void setMouseClipping( BOOL b ); |
83 | |||
83 | /*virtual*/ BOOL isClipboardTextAvailable(); | 84 | /*virtual*/ BOOL isClipboardTextAvailable(); |
84 | /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst); | 85 | /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst); |
85 | /*virtual*/ BOOL copyTextToClipboard(const LLWString & src); | 86 | /*virtual*/ BOOL copyTextToClipboard(const LLWString & src); |
87 | |||
88 | /*virtual*/ BOOL isPrimaryTextAvailable(); | ||
89 | /*virtual*/ BOOL pasteTextFromPrimary(LLWString &dst); | ||
90 | /*virtual*/ BOOL copyTextToPrimary(const LLWString & src); | ||
91 | |||
86 | /*virtual*/ void flashIcon(F32 seconds); | 92 | /*virtual*/ void flashIcon(F32 seconds); |
87 | /*virtual*/ F32 getGamma(); | 93 | /*virtual*/ F32 getGamma(); |
88 | /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma | 94 | /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma |
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp index 6280868..b2826c8 100644 --- a/linden/indra/llwindow/llwindowwin32.cpp +++ b/linden/indra/llwindow/llwindowwin32.cpp | |||
@@ -2918,6 +2918,18 @@ S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 t | |||
2918 | return retval; | 2918 | return retval; |
2919 | } | 2919 | } |
2920 | 2920 | ||
2921 | void LLWindowWin32::ShellEx(const std::string& command ) | ||
2922 | { | ||
2923 | LLWString url_wstring = utf8str_to_wstring( command ); | ||
2924 | llutf16string url_utf16 = wstring_to_utf16str( url_wstring ); | ||
2925 | |||
2926 | SHELLEXECUTEINFO sei = { sizeof( sei ) }; | ||
2927 | sei.fMask = SEE_MASK_FLAG_DDEWAIT; | ||
2928 | sei.nShow = SW_SHOWNORMAL; | ||
2929 | sei.lpVerb = L"open"; | ||
2930 | sei.lpFile = url_utf16.c_str(); | ||
2931 | ShellExecuteEx( &sei ); | ||
2932 | } | ||
2921 | 2933 | ||
2922 | void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) | 2934 | void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) |
2923 | { | 2935 | { |
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h index 237f834..d3ae325 100644 --- a/linden/indra/llwindow/llwindowwin32.h +++ b/linden/indra/llwindow/llwindowwin32.h | |||
@@ -111,6 +111,7 @@ public: | |||
111 | /*virtual*/ void updateLanguageTextInputArea(); | 111 | /*virtual*/ void updateLanguageTextInputArea(); |
112 | /*virtual*/ void interruptLanguageTextInput(); | 112 | /*virtual*/ void interruptLanguageTextInput(); |
113 | /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); | 113 | /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); |
114 | /*virtual*/ void ShellEx(const std::string& command); | ||
114 | 115 | ||
115 | static std::vector<std::string> getDynamicFallbackFontList(); | 116 | static std::vector<std::string> getDynamicFallbackFontList(); |
116 | 117 | ||
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index 954ce7d..0e2ddf2 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt | |||
@@ -64,6 +64,11 @@ include_directories( | |||
64 | ) | 64 | ) |
65 | 65 | ||
66 | set(viewer_SOURCE_FILES | 66 | set(viewer_SOURCE_FILES |
67 | floaterlogin.cpp | ||
68 | hippoGridManager.cpp | ||
69 | hippoLimits.cpp | ||
70 | hippoRestRequest.cpp | ||
71 | jcfloater_animation_list.cpp | ||
67 | llagent.cpp | 72 | llagent.cpp |
68 | llagentaccess.cpp | 73 | llagentaccess.cpp |
69 | llagentdata.cpp | 74 | llagentdata.cpp |
@@ -125,6 +130,7 @@ set(viewer_SOURCE_FILES | |||
125 | llfloaterabout.cpp | 130 | llfloaterabout.cpp |
126 | llfloateractivespeakers.cpp | 131 | llfloateractivespeakers.cpp |
127 | llfloateranimpreview.cpp | 132 | llfloateranimpreview.cpp |
133 | llfloaterassetbrowser.cpp | ||
128 | llfloaterauction.cpp | 134 | llfloaterauction.cpp |
129 | llfloateravatarinfo.cpp | 135 | llfloateravatarinfo.cpp |
130 | llfloateravatarpicker.cpp | 136 | llfloateravatarpicker.cpp |
@@ -433,6 +439,7 @@ set(viewer_SOURCE_FILES | |||
433 | llwearablelist.cpp | 439 | llwearablelist.cpp |
434 | llweb.cpp | 440 | llweb.cpp |
435 | llwebbrowserctrl.cpp | 441 | llwebbrowserctrl.cpp |
442 | llwindlightremotectrl.cpp | ||
436 | llwind.cpp | 443 | llwind.cpp |
437 | llwlanimator.cpp | 444 | llwlanimator.cpp |
438 | llwldaycycle.cpp | 445 | llwldaycycle.cpp |
@@ -444,6 +451,12 @@ set(viewer_SOURCE_FILES | |||
444 | llxmlrpctransaction.cpp | 451 | llxmlrpctransaction.cpp |
445 | noise.cpp | 452 | noise.cpp |
446 | pipeline.cpp | 453 | pipeline.cpp |
454 | primbackup.cpp | ||
455 | rlvhandler.cpp | ||
456 | rlvhelper.cpp | ||
457 | rlvmultistringsearch.cpp | ||
458 | rlvextensions.cpp | ||
459 | rlvfloaterbehaviour.cpp | ||
447 | ) | 460 | ) |
448 | 461 | ||
449 | set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING | 462 | set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING |
@@ -466,7 +479,11 @@ endif (LINUX) | |||
466 | set(viewer_HEADER_FILES | 479 | set(viewer_HEADER_FILES |
467 | CMakeLists.txt | 480 | CMakeLists.txt |
468 | ViewerInstall.cmake | 481 | ViewerInstall.cmake |
469 | 482 | floaterlogin.h | |
483 | hippoGridManager.h | ||
484 | hippoLimits.h | ||
485 | hippoRestRequest.h | ||
486 | jcfloater_animation_list.h | ||
470 | llagent.h | 487 | llagent.h |
471 | llagentaccess.h | 488 | llagentaccess.h |
472 | llagentdata.h | 489 | llagentdata.h |
@@ -530,6 +547,7 @@ set(viewer_HEADER_FILES | |||
530 | llfloaterabout.h | 547 | llfloaterabout.h |
531 | llfloateractivespeakers.h | 548 | llfloateractivespeakers.h |
532 | llfloateranimpreview.h | 549 | llfloateranimpreview.h |
550 | llfloaterassetbrowser.h | ||
533 | llfloaterauction.h | 551 | llfloaterauction.h |
534 | llfloateravatarinfo.h | 552 | llfloateravatarinfo.h |
535 | llfloateravatarpicker.h | 553 | llfloateravatarpicker.h |
@@ -843,6 +861,7 @@ set(viewer_HEADER_FILES | |||
843 | llwebbrowserctrl.h | 861 | llwebbrowserctrl.h |
844 | llwind.h | 862 | llwind.h |
845 | llwindebug.h | 863 | llwindebug.h |
864 | llwindlightremotectrl.h | ||
846 | llwlanimator.h | 865 | llwlanimator.h |
847 | llwldaycycle.h | 866 | llwldaycycle.h |
848 | llwlparammanager.h | 867 | llwlparammanager.h |
@@ -854,9 +873,17 @@ set(viewer_HEADER_FILES | |||
854 | macmain.h | 873 | macmain.h |
855 | noise.h | 874 | noise.h |
856 | pipeline.h | 875 | pipeline.h |
876 | primbackup.h | ||
857 | randgauss.h | 877 | randgauss.h |
858 | VertexCache.h | 878 | VertexCache.h |
859 | VorbisFramework.h | 879 | VorbisFramework.h |
880 | rlvdefines.h | ||
881 | rlvevent.h | ||
882 | rlvhandler.h | ||
883 | rlvhelper.h | ||
884 | rlvmultistringsearch.h | ||
885 | rlvextensions.h | ||
886 | rlvfloaterbehaviour.h | ||
860 | ) | 887 | ) |
861 | 888 | ||
862 | source_group("CMake Rules" FILES ViewerInstall.cmake) | 889 | source_group("CMake Rules" FILES ViewerInstall.cmake) |
@@ -1042,7 +1069,9 @@ set(viewer_XUI_FILES | |||
1042 | skins/default/xui/en-us/floater_about_land.xml | 1069 | skins/default/xui/en-us/floater_about_land.xml |
1043 | skins/default/xui/en-us/floater_about.xml | 1070 | skins/default/xui/en-us/floater_about.xml |
1044 | skins/default/xui/en-us/floater_active_speakers.xml | 1071 | skins/default/xui/en-us/floater_active_speakers.xml |
1072 | skins/default/xui/en-us/floater_animation_list.xml | ||
1045 | skins/default/xui/en-us/floater_animation_preview.xml | 1073 | skins/default/xui/en-us/floater_animation_preview.xml |
1074 | skins/default/xui/en-us/floater_asset_browser.xml | ||
1046 | skins/default/xui/en-us/floater_auction.xml | 1075 | skins/default/xui/en-us/floater_auction.xml |
1047 | skins/default/xui/en-us/floater_audio_volume.xml | 1076 | skins/default/xui/en-us/floater_audio_volume.xml |
1048 | skins/default/xui/en-us/floater_avatar_picker.xml | 1077 | skins/default/xui/en-us/floater_avatar_picker.xml |
@@ -1224,6 +1253,9 @@ set(viewer_XUI_FILES | |||
1224 | skins/default/xui/en-us/panel_voice_options.xml | 1253 | skins/default/xui/en-us/panel_voice_options.xml |
1225 | skins/default/xui/en-us/panel_voice_remote_expanded.xml | 1254 | skins/default/xui/en-us/panel_voice_remote_expanded.xml |
1226 | skins/default/xui/en-us/panel_voice_remote.xml | 1255 | skins/default/xui/en-us/panel_voice_remote.xml |
1256 | skins/default/xui/en-us/panel_windlight_controls.xml | ||
1257 | skins/default/xui/en-us/panel_windlight_remote.xml | ||
1258 | skins/default/xui/en-us/panel_windlight_remote_expanded.xml | ||
1227 | skins/default/xui/en-us/role_actions.xml | 1259 | skins/default/xui/en-us/role_actions.xml |
1228 | skins/default/xui/en-us/strings.xml | 1260 | skins/default/xui/en-us/strings.xml |
1229 | skins/default/xui/en-us/teleport_strings.xml | 1261 | skins/default/xui/en-us/teleport_strings.xml |
@@ -1415,6 +1447,7 @@ if (WINDOWS) | |||
1415 | endif (WINDOWS) | 1447 | endif (WINDOWS) |
1416 | 1448 | ||
1417 | target_link_libraries(${VIEWER_BINARY_NAME} | 1449 | target_link_libraries(${VIEWER_BINARY_NAME} |
1450 | ${NDOF_LIBRARY} | ||
1418 | ${LLAUDIO_LIBRARIES} | 1451 | ${LLAUDIO_LIBRARIES} |
1419 | ${LLCHARACTER_LIBRARIES} | 1452 | ${LLCHARACTER_LIBRARIES} |
1420 | ${LLIMAGE_LIBRARIES} | 1453 | ${LLIMAGE_LIBRARIES} |
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index 50e6503..14a0102 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings | |||
@@ -1,5 +1,5 @@ | |||
1 | /* Localized versions of Info.plist keys */ | 1 | /* Localized versions of Info.plist keys */ |
2 | 2 | ||
3 | CFBundleName = "Imprudence"; | 3 | CFBundleName = "Imprudence"; |
4 | CFBundleShortVersionString = "Imprudence version 1.1.0"; | 4 | CFBundleShortVersionString = "Imprudence version 1.2.0 beta 2"; |
5 | CFBundleGetInfoString = "Imprudence version 1.1.0"; | 5 | CFBundleGetInfoString = "Imprudence version 1.2.0 beta 2"; |
diff --git a/linden/indra/newview/Info-Imprudence.plist b/linden/indra/newview/Info-Imprudence.plist index 7c79a11..e44dcbe 100644 --- a/linden/indra/newview/Info-Imprudence.plist +++ b/linden/indra/newview/Info-Imprudence.plist | |||
@@ -32,7 +32,7 @@ | |||
32 | </dict> | 32 | </dict> |
33 | </array> | 33 | </array> |
34 | <key>CFBundleVersion</key> | 34 | <key>CFBundleVersion</key> |
35 | <string>1.1.0</string> | 35 | <string>1.2.0 beta 2</string> |
36 | <key>CSResourcesFileMapped</key> | 36 | <key>CSResourcesFileMapped</key> |
37 | <true/> | 37 | <true/> |
38 | </dict> | 38 | </dict> |
diff --git a/linden/indra/newview/app_settings/default_grids.xml b/linden/indra/newview/app_settings/default_grids.xml new file mode 100644 index 0000000..13293cf --- /dev/null +++ b/linden/indra/newview/app_settings/default_grids.xml | |||
@@ -0,0 +1,37 @@ | |||
1 | <llsd> | ||
2 | <array> | ||
3 | |||
4 | <!-- | ||
5 | This file contains fallback settings only. | ||
6 | The actual list of grids is loaded from a web server. | ||
7 | --> | ||
8 | |||
9 | <map> | ||
10 | <key>default_grids_version</key><string>0</string> | ||
11 | </map> | ||
12 | |||
13 | <!-- Second Life --> | ||
14 | <map> | ||
15 | <key>gridnick</key><string>secondlife</string> | ||
16 | <key>gridname</key><string>Second Life</string> | ||
17 | <key>platform</key><string>SecondLife</string> | ||
18 | <key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string> | ||
19 | <key>loginpage</key><string>http://secondlife.com/app/login/</string> | ||
20 | <key>helperuri</key><string>https://secondlife.com/helpers/</string> | ||
21 | <key>website</key><string>http://secondlife.com/</string> | ||
22 | <key>support</key><string>http://secondlife.com/support/</string> | ||
23 | <key>register</key><string>http://secondlife.com/registration/</string> | ||
24 | <key>password</key><string>http://secondlife.com/account/request.php</string> | ||
25 | </map> | ||
26 | |||
27 | <!-- Local Host --> | ||
28 | <map> | ||
29 | <key>gridnick</key><string>localhost</string> | ||
30 | <key>gridname</key><string>Local Host</string> | ||
31 | <key>platform</key><string>OpenSim</string> | ||
32 | <key>loginuri</key><string>http://127.0.0.1:9000/</string> | ||
33 | <key>helperuri</key><string>http://127.0.0.1:9000/</string> | ||
34 | </map> | ||
35 | |||
36 | </array> | ||
37 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 7e18cea..18c80eb 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml | |||
@@ -1,7 +1,150 @@ | |||
1 | <?xml version="1.0" ?> | 1 | <?xml version="1.0" ?> |
2 | <llsd> | 2 | <llsd> |
3 | <map> | 3 | <map> |
4 | <key>AFKTimeout</key> | 4 | <key>RestrainedLife</key> |
5 | <map> | ||
6 | <key>Comment</key> | ||
7 | <string>Toggles the RestrainedLife features (BDSM lockable toys support). Needs a restart of the viewer.</string> | ||
8 | <key>Persist</key> | ||
9 | <integer>1</integer> | ||
10 | <key>Type</key> | ||
11 | <string>Boolean</string> | ||
12 | <key>Value</key> | ||
13 | <integer>0</integer> | ||
14 | </map> | ||
15 | <key>RestrainedLifeDebug</key> | ||
16 | <map> | ||
17 | <key>Comment</key> | ||
18 | <string>Toggles the RestrainedLife debug mode (displays the commands when in debug mode).</string> | ||
19 | <key>Persist</key> | ||
20 | <integer>1</integer> | ||
21 | <key>Type</key> | ||
22 | <string>Boolean</string> | ||
23 | <key>Value</key> | ||
24 | <integer>0</integer> | ||
25 | </map> | ||
26 | <key>RestrainedLifeNoSetEnv</key> | ||
27 | <map> | ||
28 | <key>Comment</key> | ||
29 | <string>When TRUE, forbids to set the environment (time of day and Windlight settings) via RestrainedLife. Needs a restart of the viewer.</string> | ||
30 | <key>Persist</key> | ||
31 | <integer>1</integer> | ||
32 | <key>Type</key> | ||
33 | <string>Boolean</string> | ||
34 | <key>Value</key> | ||
35 | <integer>0</integer> | ||
36 | </map> | ||
37 | <key>RestrainedLifeForbidGiveToRLV</key> | ||
38 | <map> | ||
39 | <key>Comment</key> | ||
40 | <string>When FALSE, allows to give sub-folders to the #RLV RestrainedLife folder.</string> | ||
41 | <key>Persist</key> | ||
42 | <integer>1</integer> | ||
43 | <key>Type</key> | ||
44 | <string>Boolean</string> | ||
45 | <key>Value</key> | ||
46 | <integer>1</integer> | ||
47 | </map> | ||
48 | <key>RLVaEnableLegacyNaming</key> | ||
49 | <map> | ||
50 | <key>Comment</key> | ||
51 | <string>Enables legacy naming convention for folders</string> | ||
52 | <key>Persist</key> | ||
53 | <integer>1</integer> | ||
54 | <key>Type</key> | ||
55 | <string>Boolean</string> | ||
56 | <key>Value</key> | ||
57 | <integer>1</integer> | ||
58 | </map> | ||
59 | <key>RLVaEnableWear</key> | ||
60 | <map> | ||
61 | <key>Comment</key> | ||
62 | <string>When TRUE, enables the "Wear" option on the inventory item context menu for attachments.</string> | ||
63 | <key>Persist</key> | ||
64 | <integer>1</integer> | ||
65 | <key>Type</key> | ||
66 | <string>Boolean</string> | ||
67 | <key>Value</key> | ||
68 | <integer>1</integer> | ||
69 | </map> | ||
70 | <key>RLVaHideLockedLayers</key> | ||
71 | <map> | ||
72 | <key>Comment</key> | ||
73 | <string>When TRUE, hides worn but "remove outfit" restricted clothing layers from @getoufit</string> | ||
74 | <key>Persist</key> | ||
75 | <integer>1</integer> | ||
76 | <key>Type</key> | ||
77 | <string>Boolean</string> | ||
78 | <key>Value</key> | ||
79 | <integer>0</integer> | ||
80 | </map> | ||
81 | <key>RLVaHideLockedAttachments</key> | ||
82 | <map> | ||
83 | <key>Comment</key> | ||
84 | <string>When TRUE, hides worn but "no detach" restricted attachments from @getattach</string> | ||
85 | <key>Persist</key> | ||
86 | <integer>1</integer> | ||
87 | <key>Type</key> | ||
88 | <string>Boolean</string> | ||
89 | <key>Value</key> | ||
90 | <integer>0</integer> | ||
91 | </map> | ||
92 | <key>RLVaShowNameTags</key> | ||
93 | <map> | ||
94 | <key>Comment</key> | ||
95 | <string>Display of names above avatars is subject to the general "Show Names" setting when @shownames=n restricted</string> | ||
96 | <key>Persist</key> | ||
97 | <integer>1</integer> | ||
98 | <key>Type</key> | ||
99 | <string>Boolean</string> | ||
100 | <key>Value</key> | ||
101 | <integer>0</integer> | ||
102 | </map> | ||
103 | <key>WarnFirstRLVDetach</key> | ||
104 | <map> | ||
105 | <key>Comment</key> | ||
106 | <string>Enables FirstRLVDetach warning dialog</string> | ||
107 | <key>Persist</key> | ||
108 | <integer>1</integer> | ||
109 | <key>Type</key> | ||
110 | <string>Boolean</string> | ||
111 | <key>Value</key> | ||
112 | <integer>1</integer> | ||
113 | </map> | ||
114 | <key>WarnFirstRLVEnableWear</key> | ||
115 | <map> | ||
116 | <key>Comment</key> | ||
117 | <string>Enables RLVEnableWear warning dialog</string> | ||
118 | <key>Persist</key> | ||
119 | <integer>1</integer> | ||
120 | <key>Type</key> | ||
121 | <string>Boolean</string> | ||
122 | <key>Value</key> | ||
123 | <integer>1</integer> | ||
124 | </map> | ||
125 | <key>WarnFirstRLVFartouch</key> | ||
126 | <map> | ||
127 | <key>Comment</key> | ||
128 | <string>Enables FirstRLVFartouch warning dialog</string> | ||
129 | <key>Persist</key> | ||
130 | <integer>1</integer> | ||
131 | <key>Type</key> | ||
132 | <string>Boolean</string> | ||
133 | <key>Value</key> | ||
134 | <integer>1</integer> | ||
135 | </map> | ||
136 | <key>WarnFirstRLVGiveToRLV</key> | ||
137 | <map> | ||
138 | <key>Comment</key> | ||
139 | <string>Enables FirstRLVGiveToRLV warning dialog</string> | ||
140 | <key>Persist</key> | ||
141 | <integer>1</integer> | ||
142 | <key>Type</key> | ||
143 | <string>Boolean</string> | ||
144 | <key>Value</key> | ||
145 | <integer>1</integer> | ||
146 | </map> | ||
147 | <key>AFKTimeout</key> | ||
5 | <map> | 148 | <map> |
6 | <key>Comment</key> | 149 | <key>Comment</key> |
7 | <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string> | 150 | <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string> |
@@ -664,6 +807,17 @@ | |||
664 | <key>Value</key> | 807 | <key>Value</key> |
665 | <integer>0</integer> | 808 | <integer>0</integer> |
666 | </map> | 809 | </map> |
810 | <key>BlockClickSit</key> | ||
811 | <map> | ||
812 | <key>Comment</key> | ||
813 | <string>Block click sit</string> | ||
814 | <key>Persist</key> | ||
815 | <integer>1</integer> | ||
816 | <key>Type</key> | ||
817 | <string>Boolean</string> | ||
818 | <key>Value</key> | ||
819 | <integer>0</integer> | ||
820 | </map> | ||
667 | <key>BrowserHome</key> | 821 | <key>BrowserHome</key> |
668 | <map> | 822 | <map> |
669 | <key>Comment</key> | 823 | <key>Comment</key> |
@@ -1325,6 +1479,17 @@ | |||
1325 | <key>Value</key> | 1479 | <key>Value</key> |
1326 | <real>0.5</real> | 1480 | <real>0.5</real> |
1327 | </map> | 1481 | </map> |
1482 | <key>ChatChannelSelect</key> | ||
1483 | <map> | ||
1484 | <key>Comment</key> | ||
1485 | <string>Toggle custom channel controls in the chat bar</string> | ||
1486 | <key>Persist</key> | ||
1487 | <integer>1</integer> | ||
1488 | <key>Type</key> | ||
1489 | <string>Boolean</string> | ||
1490 | <key>Value</key> | ||
1491 | <integer>0</integer> | ||
1492 | </map> | ||
1328 | <key>ChatFontSize</key> | 1493 | <key>ChatFontSize</key> |
1329 | <map> | 1494 | <map> |
1330 | <key>Comment</key> | 1495 | <key>Comment</key> |
@@ -3059,6 +3224,17 @@ | |||
3059 | <key>Value</key> | 3224 | <key>Value</key> |
3060 | <integer>0</integer> | 3225 | <integer>0</integer> |
3061 | </map> | 3226 | </map> |
3227 | <key>DoubleClickTeleport</key> | ||
3228 | <map> | ||
3229 | <key>Comment</key> | ||
3230 | <string>Enable double-click teleport</string> | ||
3231 | <key>Persist</key> | ||
3232 | <integer>1</integer> | ||
3233 | <key>Type</key> | ||
3234 | <string>Boolean</string> | ||
3235 | <key>Value</key> | ||
3236 | <integer>1</integer> | ||
3237 | </map> | ||
3062 | <key>DragAndDropToolTipDelay</key> | 3238 | <key>DragAndDropToolTipDelay</key> |
3063 | <map> | 3239 | <map> |
3064 | <key>Comment</key> | 3240 | <key>Comment</key> |
@@ -3185,6 +3361,17 @@ | |||
3185 | <key>Value</key> | 3361 | <key>Value</key> |
3186 | <integer>1</integer> | 3362 | <integer>1</integer> |
3187 | </map> | 3363 | </map> |
3364 | <key>EnableWindlightRemote</key> | ||
3365 | <map> | ||
3366 | <key>Comment</key> | ||
3367 | <string>Enable windlight quick access remote in toolbar</string> | ||
3368 | <key>Persist</key> | ||
3369 | <integer>1</integer> | ||
3370 | <key>Type</key> | ||
3371 | <string>Boolean</string> | ||
3372 | <key>Value</key> | ||
3373 | <integer>1</integer> | ||
3374 | </map> | ||
3188 | <key>EnergyFromTop</key> | 3375 | <key>EnergyFromTop</key> |
3189 | <map> | 3376 | <map> |
3190 | <key>Comment</key> | 3377 | <key>Comment</key> |
@@ -3469,6 +3656,22 @@ | |||
3469 | <integer>0</integer> | 3656 | <integer>0</integer> |
3470 | </array> | 3657 | </array> |
3471 | </map> | 3658 | </map> |
3659 | <key>FloaterAnimationListRect</key> | ||
3660 | <map> | ||
3661 | <key>Comment</key> | ||
3662 | <string>Rectangle for Animation List</string> | ||
3663 | <key>Persist</key> | ||
3664 | <integer>1</integer> | ||
3665 | <key>Type</key> | ||
3666 | <string>Rect</string> | ||
3667 | <key>Value</key> | ||
3668 | <array> | ||
3669 | <integer>0</integer> | ||
3670 | <integer>275</integer> | ||
3671 | <integer>1000</integer> | ||
3672 | <integer>0</integer> | ||
3673 | </array> | ||
3674 | </map> | ||
3472 | <key>FloaterAudioVolumeRect</key> | 3675 | <key>FloaterAudioVolumeRect</key> |
3473 | <map> | 3676 | <map> |
3474 | <key>Comment</key> | 3677 | <key>Comment</key> |
@@ -3920,7 +4123,6 @@ | |||
3920 | <integer>0</integer> | 4123 | <integer>0</integer> |
3921 | </array> | 4124 | </array> |
3922 | </map> | 4125 | </map> |
3923 | |||
3924 | <key>FloaterObjectIMInfo</key> | 4126 | <key>FloaterObjectIMInfo</key> |
3925 | <map> | 4127 | <map> |
3926 | <key>Comment</key> | 4128 | <key>Comment</key> |
@@ -3985,6 +4187,22 @@ | |||
3985 | <integer>200</integer> | 4187 | <integer>200</integer> |
3986 | </array> | 4188 | </array> |
3987 | </map> | 4189 | </map> |
4190 | <key>FloaterPrimImport</key> | ||
4191 | <map> | ||
4192 | <key>Comment</key> | ||
4193 | <string>Rectangle for import/export</string> | ||
4194 | <key>Persist</key> | ||
4195 | <integer>1</integer> | ||
4196 | <key>Type</key> | ||
4197 | <string>Rect</string> | ||
4198 | <key>Value</key> | ||
4199 | <array> | ||
4200 | <integer>0</integer> | ||
4201 | <integer>25</integer> | ||
4202 | <integer>400</integer> | ||
4203 | <integer>0</integer> | ||
4204 | </array> | ||
4205 | </map> | ||
3988 | <key>FloaterRegionInfo</key> | 4206 | <key>FloaterRegionInfo</key> |
3989 | <map> | 4207 | <map> |
3990 | <key>Comment</key> | 4208 | <key>Comment</key> |
@@ -4895,6 +5113,17 @@ | |||
4895 | <key>Value</key> | 5113 | <key>Value</key> |
4896 | <real>1.0</real> | 5114 | <real>1.0</real> |
4897 | </map> | 5115 | </map> |
5116 | <key>InventorySearchType</key> | ||
5117 | <map> | ||
5118 | <key>Comment</key> | ||
5119 | <string>Controls what type of inventory search we perform.</string> | ||
5120 | <key>Persist</key> | ||
5121 | <integer>0</integer> | ||
5122 | <key>Type</key> | ||
5123 | <string>U32</string> | ||
5124 | <key>Value</key> | ||
5125 | <integer>0</integer> | ||
5126 | </map> | ||
4898 | <key>InventorySortOrder</key> | 5127 | <key>InventorySortOrder</key> |
4899 | <map> | 5128 | <map> |
4900 | <key>Comment</key> | 5129 | <key>Comment</key> |
@@ -5451,6 +5680,17 @@ | |||
5451 | <key>Value</key> | 5680 | <key>Value</key> |
5452 | <integer>0</integer> | 5681 | <integer>0</integer> |
5453 | </map> | 5682 | </map> |
5683 | <key>LoggedIntoOpenSim</key> | ||
5684 | <map> | ||
5685 | <key>Comment</key> | ||
5686 | <string>Check whether or not we're in an OpenSimulator (default 0)</string> | ||
5687 | <key>Persist</key> | ||
5688 | <integer>1</integer> | ||
5689 | <key>Type</key> | ||
5690 | <string>Boolean</string> | ||
5691 | <key>Value</key> | ||
5692 | <integer>0</integer> | ||
5693 | </map> | ||
5454 | <key>LoginAsGod</key> | 5694 | <key>LoginAsGod</key> |
5455 | <map> | 5695 | <map> |
5456 | <key>Comment</key> | 5696 | <key>Comment</key> |
@@ -5528,6 +5768,17 @@ | |||
5528 | <key>Value</key> | 5768 | <key>Value</key> |
5529 | <real>128.0</real> | 5769 | <real>128.0</real> |
5530 | </map> | 5770 | </map> |
5771 | <key>MapShowAgentCount</key> | ||
5772 | <map> | ||
5773 | <key>Comment</key> | ||
5774 | <string>Show number of agents next to region names on world map</string> | ||
5775 | <key>Persist</key> | ||
5776 | <integer>1</integer> | ||
5777 | <key>Type</key> | ||
5778 | <string>Boolean</string> | ||
5779 | <key>Value</key> | ||
5780 | <integer>1</integer> | ||
5781 | </map> | ||
5531 | <key>MapShowEvents</key> | 5782 | <key>MapShowEvents</key> |
5532 | <map> | 5783 | <map> |
5533 | <key>Comment</key> | 5784 | <key>Comment</key> |
@@ -5748,6 +5999,28 @@ | |||
5748 | <key>Value</key> | 5999 | <key>Value</key> |
5749 | <integer>1</integer> | 6000 | <integer>1</integer> |
5750 | </map> | 6001 | </map> |
6002 | <key>MiniMapNotifyChatRange</key> | ||
6003 | <map> | ||
6004 | <key>Comment</key> | ||
6005 | <string>Notify when avatars enter chat range</string> | ||
6006 | <key>Persist</key> | ||
6007 | <integer>1</integer> | ||
6008 | <key>Type</key> | ||
6009 | <string>Boolean</string> | ||
6010 | <key>Value</key> | ||
6011 | <integer>1</integer> | ||
6012 | </map> | ||
6013 | <key>MiniMapNotifySimRange</key> | ||
6014 | <map> | ||
6015 | <key>Comment</key> | ||
6016 | <string>Notify when avatars enters the current sim</string> | ||
6017 | <key>Persist</key> | ||
6018 | <integer>1</integer> | ||
6019 | <key>Type</key> | ||
6020 | <string>Boolean</string> | ||
6021 | <key>Value</key> | ||
6022 | <integer>0</integer> | ||
6023 | </map> | ||
5751 | <key>MiniMapPrimMaxRadius</key> | 6024 | <key>MiniMapPrimMaxRadius</key> |
5752 | <map> | 6025 | <map> |
5753 | <key>Comment</key> | 6026 | <key>Comment</key> |
@@ -5784,7 +6057,7 @@ | |||
5784 | <key>MiniMapScale</key> | 6057 | <key>MiniMapScale</key> |
5785 | <map> | 6058 | <map> |
5786 | <key>Comment</key> | 6059 | <key>Comment</key> |
5787 | <string>Miniature world map zoom levle (pixels per region)</string> | 6060 | <string>Miniature world map zoom level (pixels per region)</string> |
5788 | <key>Persist</key> | 6061 | <key>Persist</key> |
5789 | <integer>1</integer> | 6062 | <integer>1</integer> |
5790 | <key>Type</key> | 6063 | <key>Type</key> |
@@ -5976,7 +6249,7 @@ | |||
5976 | <key>Type</key> | 6249 | <key>Type</key> |
5977 | <string>F32</string> | 6250 | <string>F32</string> |
5978 | <key>Value</key> | 6251 | <key>Value</key> |
5979 | <integer>20</integer> | 6252 | <integer>96</integer> |
5980 | </map> | 6253 | </map> |
5981 | <key>NextOwnerCopy</key> | 6254 | <key>NextOwnerCopy</key> |
5982 | <map> | 6255 | <map> |
@@ -6186,6 +6459,22 @@ | |||
6186 | <real>1</real> | 6459 | <real>1</real> |
6187 | </array> | 6460 | </array> |
6188 | </map> | 6461 | </map> |
6462 | <key>ObjectIMColor</key> | ||
6463 | <map> | ||
6464 | <key>Comment</key> | ||
6465 | <string>Color of IMs from objects</string> | ||
6466 | <key>Persist</key> | ||
6467 | <integer>1</integer> | ||
6468 | <key>Type</key> | ||
6469 | <string>Color4</string> | ||
6470 | <key>Value</key> | ||
6471 | <array> | ||
6472 | <real>0.699999988079</real> | ||
6473 | <real>0.899999976158</real> | ||
6474 | <real>0.699999988079</real> | ||
6475 | <real>1</real> | ||
6476 | </array> | ||
6477 | </map> | ||
6189 | <key>OpenDebugStatAdvanced</key> | 6478 | <key>OpenDebugStatAdvanced</key> |
6190 | <map> | 6479 | <map> |
6191 | <key>Comment</key> | 6480 | <key>Comment</key> |
@@ -6356,6 +6645,17 @@ | |||
6356 | <key>Value</key> | 6645 | <key>Value</key> |
6357 | <integer>0</integer> | 6646 | <integer>0</integer> |
6358 | </map> | 6647 | </map> |
6648 | <key>ParticleChat</key> | ||
6649 | <map> | ||
6650 | <key>Comment</key> | ||
6651 | <string>Chat target of effect beam to channel 9000</string> | ||
6652 | <key>Persist</key> | ||
6653 | <integer>1</integer> | ||
6654 | <key>Type</key> | ||
6655 | <string>Boolean</string> | ||
6656 | <key>Value</key> | ||
6657 | <integer>1</integer> | ||
6658 | </map> | ||
6359 | <key>PerAccountSettingsFile</key> | 6659 | <key>PerAccountSettingsFile</key> |
6360 | <map> | 6660 | <map> |
6361 | <key>Comment</key> | 6661 | <key>Comment</key> |
@@ -6513,7 +6813,7 @@ | |||
6513 | <key>Type</key> | 6813 | <key>Type</key> |
6514 | <string>U32</string> | 6814 | <string>U32</string> |
6515 | <key>Value</key> | 6815 | <key>Value</key> |
6516 | <integer>13</integer> | 6816 | <integer>13</integer> |
6517 | </map> | 6817 | </map> |
6518 | <key>PreviewAnimRect</key> | 6818 | <key>PreviewAnimRect</key> |
6519 | <map> | 6819 | <map> |
@@ -8811,6 +9111,17 @@ | |||
8811 | <key>Value</key> | 9111 | <key>Value</key> |
8812 | <integer>0</integer> | 9112 | <integer>0</integer> |
8813 | </map> | 9113 | </map> |
9114 | <key>ShowStreamTitle</key> | ||
9115 | <map> | ||
9116 | <key>Comment</key> | ||
9117 | <string>Show the title of the song playing on the parcel's stream</string> | ||
9118 | <key>Persist</key> | ||
9119 | <integer>1</integer> | ||
9120 | <key>Type</key> | ||
9121 | <string>Boolean</string> | ||
9122 | <key>Value</key> | ||
9123 | <integer>1</integer> | ||
9124 | </map> | ||
8814 | <key>ShowTangentBasis</key> | 9125 | <key>ShowTangentBasis</key> |
8815 | <map> | 9126 | <map> |
8816 | <key>Comment</key> | 9127 | <key>Comment</key> |
@@ -8877,6 +9188,17 @@ | |||
8877 | <key>Value</key> | 9188 | <key>Value</key> |
8878 | <integer>0</integer> | 9189 | <integer>0</integer> |
8879 | </map> | 9190 | </map> |
9191 | <key>ShowWindlightSettingsPopup</key> | ||
9192 | <map> | ||
9193 | <key>Comment</key> | ||
9194 | <string>Show environment settings popup</string> | ||
9195 | <key>Persist</key> | ||
9196 | <integer>1</integer> | ||
9197 | <key>Type</key> | ||
9198 | <string>Boolean</string> | ||
9199 | <key>Value</key> | ||
9200 | <integer>0</integer> | ||
9201 | </map> | ||
8880 | <key>ShowWorldMap</key> | 9202 | <key>ShowWorldMap</key> |
8881 | <map> | 9203 | <map> |
8882 | <key>Comment</key> | 9204 | <key>Comment</key> |
@@ -9126,6 +9448,28 @@ | |||
9126 | <key>Value</key> | 9448 | <key>Value</key> |
9127 | <integer>0</integer> | 9449 | <integer>0</integer> |
9128 | </map> | 9450 | </map> |
9451 | <key>SpamCount</key> | ||
9452 | <map> | ||
9453 | <key>Comment</key> | ||
9454 | <string>Number of items spammed per time set in SpamTime. RECOMMENDED IS 4.000</string> | ||
9455 | <key>Persist</key> | ||
9456 | <integer>1</integer> | ||
9457 | <key>Type</key> | ||
9458 | <string>F32</string> | ||
9459 | <key>Value</key> | ||
9460 | <real>4.0</real> | ||
9461 | </map> | ||
9462 | <key>SpamTime</key> | ||
9463 | <map> | ||
9464 | <key>Comment</key> | ||
9465 | <string>Time of Evalulating spam. RECOMMENDED NUMBER IS 1.000</string> | ||
9466 | <key>Persist</key> | ||
9467 | <integer>1</integer> | ||
9468 | <key>Type</key> | ||
9469 | <string>F32</string> | ||
9470 | <key>Value</key> | ||
9471 | <real>1.0</real> | ||
9472 | </map> | ||
9129 | <key>SpeakingColor</key> | 9473 | <key>SpeakingColor</key> |
9130 | <map> | 9474 | <map> |
9131 | <key>Comment</key> | 9475 | <key>Comment</key> |
@@ -9381,7 +9725,7 @@ | |||
9381 | <key>Type</key> | 9725 | <key>Type</key> |
9382 | <string>F32</string> | 9726 | <string>F32</string> |
9383 | <key>Value</key> | 9727 | <key>Value</key> |
9384 | <real>500.0</real> | 9728 | <real>1000.0</real> |
9385 | </map> | 9729 | </map> |
9386 | <key>ToolHelpRect</key> | 9730 | <key>ToolHelpRect</key> |
9387 | <map> | 9731 | <map> |
@@ -11219,6 +11563,17 @@ | |||
11219 | <key>Value</key> | 11563 | <key>Value</key> |
11220 | <integer>0</integer> | 11564 | <integer>0</integer> |
11221 | </map> | 11565 | </map> |
11566 | <key>VerticalIMTabs</key> | ||
11567 | <map> | ||
11568 | <key>Comment</key> | ||
11569 | <string>Enable vertical layout for IM tabs</string> | ||
11570 | <key>Persist</key> | ||
11571 | <integer>1</integer> | ||
11572 | <key>Type</key> | ||
11573 | <string>Boolean</string> | ||
11574 | <key>Value</key> | ||
11575 | <integer>0</integer> | ||
11576 | </map> | ||
11222 | <key>VivoxAutoPostCrashDumps</key> | 11577 | <key>VivoxAutoPostCrashDumps</key> |
11223 | <map> | 11578 | <map> |
11224 | <key>Comment</key> | 11579 | <key>Comment</key> |
@@ -11626,6 +11981,17 @@ | |||
11626 | <key>Value</key> | 11981 | <key>Value</key> |
11627 | <integer>1</integer> | 11982 | <integer>1</integer> |
11628 | </map> | 11983 | </map> |
11984 | <key>WarnFirstMiniMap</key> | ||
11985 | <map> | ||
11986 | <key>Comment</key> | ||
11987 | <string>Enables FirstMiniMap warning dialog</string> | ||
11988 | <key>Persist</key> | ||
11989 | <integer>1</integer> | ||
11990 | <key>Type</key> | ||
11991 | <string>Boolean</string> | ||
11992 | <key>Value</key> | ||
11993 | <integer>1</integer> | ||
11994 | </map> | ||
11629 | <key>WarnFirstOverrideKeys</key> | 11995 | <key>WarnFirstOverrideKeys</key> |
11630 | <map> | 11996 | <map> |
11631 | <key>Comment</key> | 11997 | <key>Comment</key> |
@@ -12016,5 +12382,38 @@ | |||
12016 | <key>Value</key> | 12382 | <key>Value</key> |
12017 | <integer>0</integer> | 12383 | <integer>0</integer> |
12018 | </map> | 12384 | </map> |
12385 | <key>DefaultGrid</key> | ||
12386 | <map> | ||
12387 | <key>Comment</key> | ||
12388 | <string>Nickname of the default grid</string> | ||
12389 | <key>Persist</key> | ||
12390 | <integer>1</integer> | ||
12391 | <key>Type</key> | ||
12392 | <string>String</string> | ||
12393 | <key>Value</key> | ||
12394 | <string>secondlife</string> | ||
12395 | </map> | ||
12396 | <key>KeepAppearance</key> | ||
12397 | <map> | ||
12398 | <key>Comment</key> | ||
12399 | <string>Keep appearance across grid teleport</string> | ||
12400 | <key>Persist</key> | ||
12401 | <integer>1</integer> | ||
12402 | <key>Type</key> | ||
12403 | <string>Boolean</string> | ||
12404 | <key>Value</key> | ||
12405 | <string>0</string> | ||
12406 | </map> | ||
12407 | <key>CheckForGridUpdates</key> | ||
12408 | <map> | ||
12409 | <key>Comment</key> | ||
12410 | <string>Check for grid info updates on the web server</string> | ||
12411 | <key>Persist</key> | ||
12412 | <integer>1</integer> | ||
12413 | <key>Type</key> | ||
12414 | <string>Boolean</string> | ||
12415 | <key>Value</key> | ||
12416 | <integer>1</integer> | ||
12417 | </map> | ||
12019 | </map> | 12418 | </map> |
12020 | </llsd> | 12419 | </llsd> |
diff --git a/linden/indra/newview/app_settings/settings_per_account.xml b/linden/indra/newview/app_settings/settings_per_account.xml index 90c7b11..59caac4 100644 --- a/linden/indra/newview/app_settings/settings_per_account.xml +++ b/linden/indra/newview/app_settings/settings_per_account.xml | |||
@@ -1,6 +1,17 @@ | |||
1 | <llsd> | 1 | <llsd> |
2 | <map> | 2 | <map> |
3 | <key>BusyModeResponse</key> | 3 | <key>RLVaLoginLastLocation</key> |
4 | <map> | ||
5 | <key>Comment</key> | ||
6 | <string>Determines whether the next login will be forced to the last logoff location (set by the viewer)</string> | ||
7 | <key>Persist</key> | ||
8 | <integer>1</integer> | ||
9 | <key>Type</key> | ||
10 | <string>Boolean</string> | ||
11 | <key>Value</key> | ||
12 | <integer>1</integer> | ||
13 | </map> | ||
14 | <key>BusyModeResponse</key> | ||
4 | <map> | 15 | <map> |
5 | <key>Comment</key> | 16 | <key>Comment</key> |
6 | <string>Auto response to instant messages while in busy mode.</string> | 17 | <string>Auto response to instant messages while in busy mode.</string> |
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default1.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default1.xml new file mode 100644 index 0000000..a9d0f0e --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default1.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0384939114611456</real> | ||
6 | <real>0.95795135955843591</real> | ||
7 | <real>0.95795135955843591</real> | ||
8 | <real>0.60696905358246056</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.20658362946772124</real> | ||
13 | <real>0.43003502308076946</real> | ||
14 | <real>0.77534221609780829</real> | ||
15 | <real>0.61779229342937469</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.34674560611608651</real> | ||
20 | <real>0.38732792231055679</real> | ||
21 | <real>0.49042100459337234</real> | ||
22 | <real>0.58080440759658813</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.33948845342081757</real> | ||
27 | <real>0.33948845342081757</real> | ||
28 | <real>0.33948845342081757</real> | ||
29 | <real>0.6362861692905426</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.95397572096092276</real> | ||
36 | <real>1.0000000298023224</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.1250000037252903</real> | ||
43 | <real>1.0000000298023224</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998722208165</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1.0000000298023224</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.314831098603321</real> | ||
55 | <real>10.011000171161356</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1.0000000298023224</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0002873900482277883</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1.0000000298023224</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.87670719623565674</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1.0000000298023224</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0000000298023224</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1.0000000298023224</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5.0000001490116119</real> | ||
95 | <real>0.0010000000917914607</real> | ||
96 | <real>-0.48000001257440683</real> | ||
97 | <real>1.0000000298023224</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.70000002224998603</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1.0000000298023224</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.1784939272396473</real> | ||
109 | <real>0.1991560042470284</real> | ||
110 | <real>0.1991560042470284</real> | ||
111 | <real>1.0000000298023224</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.49086946249008179</real> | ||
117 | <real>-0.87123316526412964</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1205.163865879178</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1.0000000298023224</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.6285052299499512</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5413080077610317</real> | ||
136 | <real>1.5705089192829433</real> | ||
137 | <real>1.6435112576923672</real> | ||
138 | <real>0.56847512722015381</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default2.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default2.xml new file mode 100644 index 0000000..5367387 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default2.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0499999505996698</real> | ||
6 | <real>1.0499999505996698</real> | ||
7 | <real>1.0499999505996698</real> | ||
8 | <real>0.34999999382495872</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.24475815546304436</real> | ||
13 | <real>0.44872327986443139</real> | ||
14 | <real>0.759999978199005</real> | ||
15 | <real>0.38000001338005091</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.49548382238803412</real> | ||
20 | <real>0.49548381855426504</real> | ||
21 | <real>0.64000000093460097</real> | ||
22 | <real>0.32000000046730048</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.40999999671936077</real> | ||
27 | <real>0.40999999671936077</real> | ||
28 | <real>0.40999999671936077</real> | ||
29 | <real>0.40999999671936077</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.99999999999999623</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999999237537178</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.200000040817258</real> | ||
55 | <real>10.010999893335338</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998592350524</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.80000001235008633</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0010000000503715134</real> | ||
96 | <real>-0.47999998292446122</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.69999998764991744</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.18999999454975031</real> | ||
109 | <real>0.19915600071018602</real> | ||
110 | <real>0.19915600071018602</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.91269153356552124</real> | ||
117 | <real>-0.40864923596382141</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1604.9999921321869</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.9917699098587036</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.73421055009741187</real> | ||
136 | <real>0.78157896155557771</real> | ||
137 | <real>0.89999997529983111</real> | ||
138 | <real>0.29999998147487428</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default3.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default3.xml new file mode 100644 index 0000000..5185175 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20default3.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0499999460917593</real> | ||
6 | <real>1.0499999460917593</real> | ||
7 | <real>1.0499999460917593</real> | ||
8 | <real>0.34999999512411506</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.2447581519847149</real> | ||
13 | <real>0.44872328351986113</real> | ||
14 | <real>0.75999999517881633</real> | ||
15 | <real>0.38000003464613324</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.49548381839263711</real> | ||
20 | <real>0.49548381254157786</real> | ||
21 | <real>0.63999999116870609</real> | ||
22 | <real>0.31999999558435305</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.40999999615399413</real> | ||
27 | <real>0.40999999615399413</real> | ||
28 | <real>0.40999999615399413</real> | ||
29 | <real>0.40999999615399413</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.99999999999999423</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998778293413</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.199999843971682</real> | ||
55 | <real>10.010999677075688</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998844229546</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.80000000975177565</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0010000000429292444</real> | ||
96 | <real>-0.47999999271352323</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.69999999024823012</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.18999999879470264</real> | ||
109 | <real>0.19915600203784933</real> | ||
110 | <real>0.19915600203784933</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.80060893297195435</real> | ||
117 | <real>-0.59918725490570068</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1604.9999940395355</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.2132818698883057</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.73421055652810585</real> | ||
136 | <real>0.78157895060378157</real> | ||
137 | <real>0.89999998049645447</real> | ||
138 | <real>0.29999998164705199</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20neutral.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20neutral.xml new file mode 100644 index 0000000..e0cdfb1 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20neutral.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.89999997615814209</real> | ||
6 | <real>0.89999997615814209</real> | ||
7 | <real>0.89999997615814209</real> | ||
8 | <real>0.29999998211860657</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.91235297918319702</real> | ||
13 | <real>0.93999999761581421</real> | ||
14 | <real>0.88470596075057983</real> | ||
15 | <real>0.4699999988079071</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.68000000715255737</real> | ||
20 | <real>0.93999999761581421</real> | ||
21 | <real>1.4399999380111694</real> | ||
22 | <real>1.4399999380111694</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.30162510275840759</real> | ||
27 | <real>0.30162510275840759</real> | ||
28 | <real>0.30162510275840759</real> | ||
29 | <real>0.75779753923416138</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.92926150560379028</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.376492500305176</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00013000000035390258</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.69999998807907104</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5499999523162842</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>15.799999237060547</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.96999996900558472</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.49818512797355652</real> | ||
117 | <real>0.86707067489624023</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>295</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.52150440216064453</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.32999998331069946</real> | ||
136 | <real>0.26999998092651367</real> | ||
137 | <real>0.26999998092651367</real> | ||
138 | <real>0.51999998092651367</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city%20weirdlights.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city%20weirdlights.xml new file mode 100644 index 0000000..c2daa99 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city%20weirdlights.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.71999996900558472</real> | ||
6 | <real>0.71999996900558472</real> | ||
7 | <real>0.71999996900558472</real> | ||
8 | <real>0.23999999463558197</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | <real>0</real> | ||
15 | <real>0</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0</real> | ||
21 | <real>0.43999999761581421</real> | ||
22 | <real>0.2199999988079071</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.14000000059604645</real> | ||
27 | <real>0.14000000059604645</real> | ||
28 | <real>0.14000000059604645</real> | ||
29 | <real>0.14000000059604645</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.20999999344348907</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.52999997138977051</real> | ||
42 | <real>0.0099999997764825821</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.070000000298023224</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>18</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34000000357627869</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00018000000272877514</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>6.7000002861022949</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.5185837745666504</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>17.399999618530273</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.34999999403953552</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.17000000178813934</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.36812454462051392</real> | ||
116 | <real>1.7484555314695172e-007</real> | ||
117 | <real>-0.92977648973464966</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>263</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.0399999618530273</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>6.2831854820251465</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5899999141693115</real> | ||
136 | <real>1.5899999141693115</real> | ||
137 | <real>1.5899999141693115</real> | ||
138 | <real>1.5899999141693115</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city.xml new file mode 100644 index 0000000..0728f66 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20city.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.71999996900558472</real> | ||
6 | <real>0.71999996900558472</real> | ||
7 | <real>0.71999996900558472</real> | ||
8 | <real>0.23999999463558197</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | <real>0</real> | ||
15 | <real>0</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0</real> | ||
21 | <real>0.43999999761581421</real> | ||
22 | <real>0.2199999988079071</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.14000000059604645</real> | ||
27 | <real>0.14000000059604645</real> | ||
28 | <real>0.14000000059604645</real> | ||
29 | <real>0.14000000059604645</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.20999999344348907</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.52999997138977051</real> | ||
42 | <real>0.0099999997764825821</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.070000000298023224</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>18</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34000000357627869</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00018000000272877514</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>6.7000002861022949</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.5185837745666504</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>17.399999618530273</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.34999999403953552</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.17000000178813934</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.36776852607727051</real> | ||
116 | <real>0.043968122452497482</real> | ||
117 | <real>-0.92887729406356812</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>263</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.0399999618530273</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.043982300907373428</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5899999141693115</real> | ||
136 | <real>1.5899999141693115</real> | ||
137 | <real>1.5899999141693115</real> | ||
138 | <real>1.5899999141693115</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20night.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20night.xml new file mode 100644 index 0000000..2f5cfb8 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor%20night.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0</real> | ||
6 | <real>0</real> | ||
7 | <real>0</real> | ||
8 | <real>0</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.13997539444089213</real> | ||
13 | <real>0.38665792478461469</real> | ||
14 | <real>0.77332294252195766</real> | ||
15 | <real>0.95108884837904384</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0.22876684367656708</real> | ||
21 | <real>0.290018230676651</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.25999999046325684</real> | ||
27 | <real>0.28883209824562073</real> | ||
28 | <real>0.28994369506835938</real> | ||
29 | <real>0.28999999165534973</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.17999999225139618</real> | ||
34 | <real>0.50999999046325684</real> | ||
35 | <real>0.91999995708465576</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.25</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.436104517528292</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0002899999963119626</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>1.3000000715255737</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.2619466781616211</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>20</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>0</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.12999999523162842</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.14999999105930328</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.024202039465308189</real> | ||
116 | <real>0.99950659275054932</real> | ||
117 | <real>-0.020021669566631317</real> | ||
118 | <real>1</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>394.39999389648437</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>2</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>4.6809735298156738</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.98999994993209839</real> | ||
136 | <real>0.95999997854232788</real> | ||
137 | <real>0.95999997854232788</real> | ||
138 | <real>1.0799999237060547</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor2.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor2.xml new file mode 100644 index 0000000..c2e5792 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20outdoor2.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0384939114611456</real> | ||
6 | <real>0.95795135955843591</real> | ||
7 | <real>0.95795135955843591</real> | ||
8 | <real>0.60696905358246056</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.20658362946772124</real> | ||
13 | <real>0.43003502308076946</real> | ||
14 | <real>0.77534221609780829</real> | ||
15 | <real>0.61779229342937469</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.34674560611608651</real> | ||
20 | <real>0.38732792231055679</real> | ||
21 | <real>0.49042100459337234</real> | ||
22 | <real>0.58080440759658813</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.33948845342081757</real> | ||
27 | <real>0.33948845342081757</real> | ||
28 | <real>0.33948845342081757</real> | ||
29 | <real>0.6362861692905426</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.95397572096092276</real> | ||
36 | <real>1.0000000298023224</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.1250000037252903</real> | ||
43 | <real>1.0000000298023224</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998722208165</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1.0000000298023224</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.314831098603321</real> | ||
55 | <real>10.011000171161356</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1.0000000298023224</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0002873900482277883</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1.0000000298023224</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.87670719623565674</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1.0000000298023224</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.1415927410125732</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0000000298023224</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1.0000000298023224</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5.0000001490116119</real> | ||
95 | <real>0.0010000000917914607</real> | ||
96 | <real>-0.48000001257440683</real> | ||
97 | <real>1.0000000298023224</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.70000002224998603</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1.0000000298023224</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.1784939272396473</real> | ||
109 | <real>0.1991560042470284</real> | ||
110 | <real>0.1991560042470284</real> | ||
111 | <real>1.0000000298023224</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>8.7422776573475858e-008</real> | ||
116 | <real>0</real> | ||
117 | <real>-1</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1205.163865879178</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1.0000000298023224</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5413080077610317</real> | ||
136 | <real>1.5705089192829433</real> | ||
137 | <real>1.6435112576923672</real> | ||
138 | <real>0.56847512722015381</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20shadows.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20shadows.xml new file mode 100644 index 0000000..01d06a1 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20shadows.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.2226010262966156</real> | ||
6 | <real>0.26450860500335693</real> | ||
7 | <real>0.35999998450279236</real> | ||
8 | <real>0.11999999731779099</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.14522500336170197</real> | ||
13 | <real>0.39999699592590332</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.15130999684333801</real> | ||
20 | <real>0.30000001192092896</real> | ||
21 | <real>0.35131001472473145</real> | ||
22 | <real>1</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.12862999737262726</real> | ||
27 | <real>0.12862999737262726</real> | ||
28 | <real>0.12862999737262726</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.88419097661972046</real> | ||
34 | <real>0.53047597408294678</real> | ||
35 | <real>0.4270470142364502</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.38419300317764282</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0001250890054507181</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>11.40000057220459</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>1.8849555253982544</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.7300000190734863</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>0.19999980926513672</real> | ||
95 | <real>0.0012815999798476696</real> | ||
96 | <real>0</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.6499999761581421</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.14999999105930328</real> | ||
109 | <real>0.21744099259376526</real> | ||
110 | <real>0.21744099259376526</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.95105654001235962</real> | ||
116 | <real>0</real> | ||
117 | <real>-0.30901694297790527</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>4000</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>2</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>3</real> | ||
136 | <real>3</real> | ||
137 | <real>3</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio1.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio1.xml new file mode 100644 index 0000000..ca448d0 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio1.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.51940256357192993</real> | ||
6 | <real>0.61718720197677612</real> | ||
7 | <real>0.84000003337860107</real> | ||
8 | <real>0.2800000011920929</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.14522500336170197</real> | ||
13 | <real>0.39999699592590332</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.15130999684333801</real> | ||
20 | <real>0.30000001192092896</real> | ||
21 | <real>0.35131001472473145</real> | ||
22 | <real>1</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.12862999737262726</real> | ||
27 | <real>0.12862999737262726</real> | ||
28 | <real>0.12862999737262726</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.88419097661972046</real> | ||
34 | <real>0.53047597408294678</real> | ||
35 | <real>0.4270470142364502</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.38419300317764282</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.59999996423721313</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>7.9999997979030013e-005</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>11.40000057220459</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0099999904632568</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>6.4079799652099609</real> | ||
95 | <real>0.0012815999798476696</real> | ||
96 | <real>-0.42292699217796326</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>4</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.21744099259376526</real> | ||
109 | <real>0.21744099259376526</real> | ||
110 | <real>0.21744099259376526</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.21200713515281677</real> | ||
117 | <real>0.97726809978485107</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>4000</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>2</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.21362832188606262</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>3</real> | ||
136 | <real>3</real> | ||
137 | <real>3</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio2.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio2.xml new file mode 100644 index 0000000..fc32f29 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio2.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.80999994277954102</real> | ||
6 | <real>0.6044776439666748</real> | ||
7 | <real>0.6044776439666748</real> | ||
8 | <real>0.26999998092651367</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.63999998569488525</real> | ||
13 | <real>1.1799999475479126</real> | ||
14 | <real>2</real> | ||
15 | <real>2</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.23999999463558197</real> | ||
20 | <real>0.23999999463558197</real> | ||
21 | <real>0.31999999284744263</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.12862999737262726</real> | ||
27 | <real>0.12862999737262726</real> | ||
28 | <real>0.12862999737262726</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.88419097661972046</real> | ||
34 | <real>0.53047597408294678</real> | ||
35 | <real>0.4270470142364502</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.38419300317764282</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.12999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998817685992</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>1.0053097009658813</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0799999237060547</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0012815999798476696</real> | ||
96 | <real>-0.49999997019767761</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.64999997615814209</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.08999999612569809</real> | ||
109 | <real>0.21744099259376526</real> | ||
110 | <real>0.21744099259376526</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.84432792663574219</real> | ||
116 | <real>0</real> | ||
117 | <real>0.53582674264907837</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>188</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>2</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.5799999237060547</real> | ||
136 | <real>2.5799999237060547</real> | ||
137 | <real>2.5799999237060547</real> | ||
138 | <real>2.5799999237060547</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio3.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio3.xml new file mode 100644 index 0000000..af5676b --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio3.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.71999996900558472</real> | ||
6 | <real>0.53731358051300049</real> | ||
7 | <real>0.53731358051300049</real> | ||
8 | <real>0.23999999463558197</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.47999998927116394</real> | ||
13 | <real>1.1799999475479126</real> | ||
14 | <real>2</real> | ||
15 | <real>2</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.23999999463558197</real> | ||
20 | <real>0.23999999463558197</real> | ||
21 | <real>0.31999999284744263</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.12862999737262726</real> | ||
27 | <real>0.12862999737262726</real> | ||
28 | <real>0.12862999737262726</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.88419097661972046</real> | ||
34 | <real>0.53047597408294678</real> | ||
35 | <real>0.4270470142364502</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.38419300317764282</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.12999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998817685992</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.2200000286102295</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.8000001907348633</real> | ||
95 | <real>0.0012815999798476696</real> | ||
96 | <real>-0.44999998807907104</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.08999999612569809</real> | ||
109 | <real>0.21744099259376526</real> | ||
110 | <real>0.21744099259376526</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.32094338536262512</real> | ||
117 | <real>-0.94709837436676025</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>188</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>2</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.8148672580718994</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.5799999237060547</real> | ||
136 | <real>2.5799999237060547</real> | ||
137 | <real>2.5799999237060547</real> | ||
138 | <real>2.5799999237060547</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio4.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio4.xml new file mode 100644 index 0000000..c2e5792 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio4.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0384939114611456</real> | ||
6 | <real>0.95795135955843591</real> | ||
7 | <real>0.95795135955843591</real> | ||
8 | <real>0.60696905358246056</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.20658362946772124</real> | ||
13 | <real>0.43003502308076946</real> | ||
14 | <real>0.77534221609780829</real> | ||
15 | <real>0.61779229342937469</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.34674560611608651</real> | ||
20 | <real>0.38732792231055679</real> | ||
21 | <real>0.49042100459337234</real> | ||
22 | <real>0.58080440759658813</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.33948845342081757</real> | ||
27 | <real>0.33948845342081757</real> | ||
28 | <real>0.33948845342081757</real> | ||
29 | <real>0.6362861692905426</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>0.95397572096092276</real> | ||
36 | <real>1.0000000298023224</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.1250000037252903</real> | ||
43 | <real>1.0000000298023224</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998722208165</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1.0000000298023224</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.314831098603321</real> | ||
55 | <real>10.011000171161356</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.26999998092651367</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1.0000000298023224</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0002873900482277883</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1.0000000298023224</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.87670719623565674</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1.0000000298023224</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.1415927410125732</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0000000298023224</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1.0000000298023224</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5.0000001490116119</real> | ||
95 | <real>0.0010000000917914607</real> | ||
96 | <real>-0.48000001257440683</real> | ||
97 | <real>1.0000000298023224</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.70000002224998603</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1.0000000298023224</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.1784939272396473</real> | ||
109 | <real>0.1991560042470284</real> | ||
110 | <real>0.1991560042470284</real> | ||
111 | <real>1.0000000298023224</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>8.7422776573475858e-008</real> | ||
116 | <real>0</real> | ||
117 | <real>-1</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1205.163865879178</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1.0000000298023224</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5413080077610317</real> | ||
136 | <real>1.5705089192829433</real> | ||
137 | <real>1.6435112576923672</real> | ||
138 | <real>0.56847512722015381</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio5.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio5.xml new file mode 100644 index 0000000..fde46ae --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio5.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>2.0099997520446777</real> | ||
6 | <real>1.9199999570846558</real> | ||
7 | <real>1.8899999856948853</real> | ||
8 | <real>2.0099997520446777</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.63999998569488525</real> | ||
13 | <real>1.1799999475479126</real> | ||
14 | <real>2</real> | ||
15 | <real>2</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.23999999463558197</real> | ||
20 | <real>0.23999999463558197</real> | ||
21 | <real>0.31999999284744263</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.39050509865536398</real> | ||
27 | <real>0.39050509865536398</real> | ||
28 | <real>0.39050509865536398</real> | ||
29 | <real>0.39050509865536398</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.52609699964523315</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998254906856</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.199999735331062</real> | ||
55 | <real>10.010999579794088</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.12999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998391111764</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.1499999761581421</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.9999998807907104</real> | ||
95 | <real>0.0010000000478643939</real> | ||
96 | <real>-0.47999998436731417</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.64999997615814209</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.08999999612569809</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0</real> | ||
117 | <real>1</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>188</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.5799999237060547</real> | ||
136 | <real>2.5799999237060547</real> | ||
137 | <real>2.5799999237060547</real> | ||
138 | <real>2.5799999237060547</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio6.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio6.xml new file mode 100644 index 0000000..f18cc75 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio6.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.5299999713897705</real> | ||
6 | <real>1.5299999713897705</real> | ||
7 | <real>1.5299999713897705</real> | ||
8 | <real>0.50999999046325684</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.72533315420150757</real> | ||
13 | <real>0.995555579662323</real> | ||
14 | <real>1.2799999713897705</real> | ||
15 | <real>0.63999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.19999998807907104</real> | ||
20 | <real>0.2199999988079071</real> | ||
21 | <real>0.23999999463558197</real> | ||
22 | <real>0.23999999463558197</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.39999997615814209</real> | ||
27 | <real>0.40999999642372131</real> | ||
28 | <real>0.40999999642372131</real> | ||
29 | <real>0.40999999642372131</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1</real> | ||
34 | <real>1</real> | ||
35 | <real>0.29999998211860657</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.29999998211860657</real> | ||
41 | <real>0.29999998211860657</real> | ||
42 | <real>0.08999999612569809</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.69999998807907104</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.069999776780605</real> | ||
55 | <real>10.069999776780605</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00011000000085914508</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>15.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0099999904632568</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>12</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.26999998092651367</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.95105654001235962</real> | ||
117 | <real>0.30901697278022766</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>913</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.2566370964050293</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.17999999225139618</real> | ||
136 | <real>0.17999999225139618</real> | ||
137 | <real>0.17999999225139618</real> | ||
138 | <real>0.059999998658895493</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio7.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio7.xml new file mode 100644 index 0000000..05deb2e --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio7.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.5299999713897705</real> | ||
6 | <real>1.5299999713897705</real> | ||
7 | <real>1.5299999713897705</real> | ||
8 | <real>0.50999999046325684</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.72533315420150757</real> | ||
13 | <real>0.995555579662323</real> | ||
14 | <real>1.2799999713897705</real> | ||
15 | <real>0.63999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.19999998807907104</real> | ||
20 | <real>0.2199999988079071</real> | ||
21 | <real>0.23999999463558197</real> | ||
22 | <real>0.23999999463558197</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.39999997615814209</real> | ||
27 | <real>0.40999999642372131</real> | ||
28 | <real>0.40999999642372131</real> | ||
29 | <real>0.40999999642372131</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1</real> | ||
34 | <real>1</real> | ||
35 | <real>0.29999998211860657</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.29999998211860657</real> | ||
41 | <real>0.29999998211860657</real> | ||
42 | <real>0.08999999612569809</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.69999998807907104</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.069999776780605</real> | ||
55 | <real>10.069999776780605</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00011000000085914508</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>15.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.2200000286102295</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>11.80000114440918</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.26999998092651367</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.95105654001235962</real> | ||
117 | <real>0.30901697278022766</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>913</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.2566370964050293</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.23999999463558197</real> | ||
136 | <real>0.23999999463558197</real> | ||
137 | <real>0.23999999463558197</real> | ||
138 | <real>0.079999998211860657</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio8.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio8.xml new file mode 100644 index 0000000..0fff0a1 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio8.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.1100000143051147</real> | ||
6 | <real>1.1100000143051147</real> | ||
7 | <real>1.1100000143051147</real> | ||
8 | <real>0.37000000476837158</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.72533315420150757</real> | ||
13 | <real>0.995555579662323</real> | ||
14 | <real>1.2799999713897705</real> | ||
15 | <real>0.63999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.19999998807907104</real> | ||
20 | <real>0.2199999988079071</real> | ||
21 | <real>0.23999999463558197</real> | ||
22 | <real>0.23999999463558197</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.39999997615814209</real> | ||
27 | <real>0.40999999642372131</real> | ||
28 | <real>0.40999999642372131</real> | ||
29 | <real>0.40999999642372131</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1</real> | ||
34 | <real>1</real> | ||
35 | <real>0.29999998211860657</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.29999998211860657</real> | ||
41 | <real>0.29999998211860657</real> | ||
42 | <real>0.08999999612569809</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.69999998807907104</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.069999776780605</real> | ||
55 | <real>10.069999776780605</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00011000000085914508</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>15.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.8199999332427979</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>12</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.26999998092651367</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.97452688217163086</real> | ||
117 | <real>0.22427067160606384</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>913</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.3446017503738403</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.23999999463558197</real> | ||
136 | <real>0.23999999463558197</real> | ||
137 | <real>0.23999999463558197</real> | ||
138 | <real>0.079999998211860657</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio9.xml b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio9.xml new file mode 100644 index 0000000..198ff7e --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%2EAnaLu%2E%20studio9.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.0799999237060547</real> | ||
6 | <real>1.0799999237060547</real> | ||
7 | <real>1.0799999237060547</real> | ||
8 | <real>0.35999998450279236</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.72533315420150757</real> | ||
13 | <real>0.995555579662323</real> | ||
14 | <real>1.2799999713897705</real> | ||
15 | <real>0.63999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.19999998807907104</real> | ||
20 | <real>0.2199999988079071</real> | ||
21 | <real>0.23999999463558197</real> | ||
22 | <real>0.23999999463558197</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.39999997615814209</real> | ||
27 | <real>0.40999999642372131</real> | ||
28 | <real>0.40999999642372131</real> | ||
29 | <real>0.40999999642372131</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1</real> | ||
34 | <real>1</real> | ||
35 | <real>0.29999998211860657</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.29999998211860657</real> | ||
41 | <real>0.29999998211860657</real> | ||
42 | <real>0.08999999612569809</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.69999998807907104</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.069999776780605</real> | ||
55 | <real>10.069999776780605</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00011000000085914508</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>15.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.2200000286102295</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>12</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.26999998092651367</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0</real> | ||
116 | <real>0.84094464778900146</real> | ||
117 | <real>0.54112118482589722</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>913</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.99902653694152832</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.65999996662139893</real> | ||
136 | <real>0.65999996662139893</real> | ||
137 | <real>0.65999996662139893</real> | ||
138 | <real>0.2199999988079071</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%202012.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%202012.xml new file mode 100644 index 0000000..657f423 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%202012.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>1</real><real>0.45923501253128052</real><real>0</real><real>1</real></array><key>blue_density</key><array><real>0.25613615825332658</real><real>0.41819368084009056</real><real>0.6726322016895665</real><real>1</real></array><key>blue_horizon</key><array><real>0.47774650705002841</real><real>0.80108383983144904</real><real>0.91266119477967322</real><real>0.98532241580704749</real></array><key>cloud_color</key><array><real>0.52756190160579308</real><real>0.52756190160579308</real><real>0.52756190160579308</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.72999995946884155</real><real>0.34000000357627869</real><real>0.32999998331069946</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.28999999165534973</real><real>0.84999996423721313</real><real>0.019999999552965164</real><real>1</real></array><key>cloud_scale</key><array><real>0.32999998058761548</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.499399946934318</real><real>10.010999746491507</real></array><key>cloud_shadow</key><array><real>0.34999999403953552</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>9.9999997473787516e-006</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>0.69999999890643494</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>0.9424777626991272</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.610000025154136</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>5.7999992370605469</real><real>0.0010000000474974513</real><real>-1.0499999523162842</real><real>1</real></array><key>haze_density</key><array><real>1.5557675468824073</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.33174386620521545</real><real>0.1991559842625179</real><real>0.1991559842625179</real><real>1</real></array><key>lightnorm</key><array><real>-0.76118850708007813</real><real>0.33873793482780457</real><real>0.55303585529327393</real><real>0</real></array><key>max_y</key><array><real>711.42973550362512</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0</real><key>sun_angle</key><real>0.34557521343231201</real><key>sunlight_color</key><array><real>2.3399999141693115</real><real>0.35999998450279236</real><real>0.44999998807907104</real><real>2.3399999141693115</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Alien%20planet.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Alien%20planet.xml new file mode 100644 index 0000000..ff69e15 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Alien%20planet.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.82999998331069946</real><real>0.18999999761581421</real><real>0.20999999344348907</real><real>0.82999998331069946</real></array><key>blue_density</key><array><real>0</real><real>0.49500009417533875</real><real>0.62999999523162842</real><real>0.62999999523162842</real></array><key>blue_horizon</key><array><real>0.51675063371658325</real><real>0.34671968221664429</real><real>0.65999996662139893</real><real>0.65999996662139893</real></array><key>cloud_color</key><array><real>0.18999999761581421</real><real>0.070000000298023224</real><real>0</real><real>0.18999999761581421</real></array><key>cloud_pos_density1</key><array><real>0.68999999761581421</real><real>0.32999998331069946</real><real>0.51999998092651367</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.2199999988079071</real><real>0.84999996423721313</real><real>0.12999999523162842</real><real>1</real></array><key>cloud_scale</key><array><real>0.47999998927116394</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.453993749294909</real><real>10.026071512513319</real></array><key>cloud_shadow</key><array><real>0.28999999165534973</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>1.9999999494757503e-005</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>26.80000114440918</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>4.5867252349853516</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>0.87000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>0.19999980926513672</real><real>0.0010000000474974513</real><real>-0.49999997019767761</real><real>1</real></array><key>haze_density</key><array><real>2.2100000381469727</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.25999999046325684</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.86939668655395508</real><real>0.48175376653671265</real><real>0.10983037948608398</real><real>0</real></array><key>max_y</key><array><real>394.39999389648437</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>1.1000000238418579</real><key>sun_angle</key><real>2.6389377117156982</real><key>sunlight_color</key><array><real>1.4399999380111694</real><real>1.8300000429153442</real><real>3</real><real>3</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20An%20incongruent%20truth.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20An%20incongruent%20truth.xml new file mode 100644 index 0000000..a780e5d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20An%20incongruent%20truth.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0</real><real>0</real><real>0.44999998807907104</real><real>0.44999998807907104</real></array><key>blue_density</key><array><real>0.13997539444089213</real><real>0.38665792478461469</real><real>0.77332294252195766</real><real>0.95108884837904384</real></array><key>blue_horizon</key><array><real>0</real><real>0.22876684367656708</real><real>0.290018230676651</real><real>0.31999999284744263</real></array><key>cloud_color</key><array><real>0.25999999046325684</real><real>0.28883209824562073</real><real>0.28994369506835938</real><real>0.28999999165534973</real></array><key>cloud_pos_density1</key><array><real>0.17999999225139618</real><real>0.50999999046325684</real><real>0.91999995708465576</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.5</real><real>0.5</real><real>0.079999998211860657</real><real>1</real></array><key>cloud_scale</key><array><real>0.25</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.436104517528292</real><real>10.032009389655741</real></array><key>cloud_shadow</key><array><real>0.34000000357627869</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.0002899999963119626</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>1.3000000715255737</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>2.2619466781616211</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5399999618530273</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>4.0000009536743164</real><real>0.0010000000474974513</real><real>-0.74999994039535522</real><real>1</real></array><key>haze_density</key><array><real>0.12999999523162842</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.14999999105930328</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.74630618095397949</real><real>0.24868990480899811</real><real>-0.61739814281463623</real><real>0</real></array><key>max_y</key><array><real>394.39999389648437</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.44999998807907104</real><key>sun_angle</key><real>0.25132742524147034</real><key>sunlight_color</key><array><real>2.6999998092651367</real><real>2.3490002155303955</real><real>1.4040002822875977</real><real>0.89999997615814209</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arid%20nestler.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arid%20nestler.xml new file mode 100644 index 0000000..1eff3af --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arid%20nestler.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.054342277348041534</real> | ||
6 | <real>0.249813511967659</real> | ||
7 | <real>0.34000000357627869</real> | ||
8 | <real>0.34000000357627869</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.4699999988079071</real> | ||
13 | <real>0.4699999988079071</real> | ||
14 | <real>0.4699999988079071</real> | ||
15 | <real>0.4699999988079071</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.2799564003944397</real> | ||
20 | <real>0.2199999988079071</real> | ||
21 | <real>0.64999997615814209</real> | ||
22 | <real>0.64999997615814209</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.34000000357627869</real> | ||
27 | <real>0.16604645550251007</real> | ||
28 | <real>0.16918087005615234</real> | ||
29 | <real>0.34000000357627869</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.26999998092651367</real> | ||
34 | <real>0.099999994039535522</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.32999998331069946</real> | ||
41 | <real>0.52999997138977051</real> | ||
42 | <real>0.059999998658895493</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>9.644780158996582</real> | ||
55 | <real>10.423800468444824</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31000000238418579</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>5.999999848427251e-005</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>15.40000057220459</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.18849556148052216</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.24999998509883881</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.66999995708465576</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.15999999642372131</real> | ||
109 | <real>0.13210900127887726</real> | ||
110 | <real>0.13210900127887726</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.18643523752689362</real> | ||
116 | <real>0.10036152601242065</real> | ||
117 | <real>-0.97732770442962646</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>737</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>3</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.62999999523162842</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.0410618782043457</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.2200000286102295</real> | ||
136 | <real>2.2200000286102295</real> | ||
137 | <real>2.2200000286102295</real> | ||
138 | <real>0.74000000953674316</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arrakissed.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arrakissed.xml new file mode 100644 index 0000000..66dfef5 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Arrakissed.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.17999999225139618</real> | ||
6 | <real>0.14482758939266205</real> | ||
7 | <real>0.14999999105930328</real> | ||
8 | <real>0.21000000834465027</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0.22999770939350128</real> | ||
14 | <real>0.45999997854232788</real> | ||
15 | <real>0.65999996662139893</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0.54652589559555054</real> | ||
21 | <real>0.63999998569488525</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.61000001430511475</real> | ||
27 | <real>0</real> | ||
28 | <real>0</real> | ||
29 | <real>0.61000001430511475</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.53999996185302734</real> | ||
34 | <real>0.50999999046325684</real> | ||
35 | <real>0.23999999463558197</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.059999998658895493</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.2800000011920929</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>20</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.11999999731779099</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00022000000171829015</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.8274333477020264</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.7599999904632568</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>0.39999961853027344</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.74999994039535522</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>2.679999828338623</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.40999999642372131</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.30239814519882202</real> | ||
116 | <real>0.20586305856704712</real> | ||
117 | <real>-0.93068563938140869</real> | ||
118 | <real>1</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1128</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.68000000715255737</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.3489382266998291</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.0999999046325684</real> | ||
136 | <real>0.59999978542327881</real> | ||
137 | <real>0.31500005722045898</real> | ||
138 | <real>0.69999998807907104</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asian%20red%20dawn.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asian%20red%20dawn.xml new file mode 100644 index 0000000..39813c2 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asian%20red%20dawn.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.039999999105930328</real><real>0.029999999329447746</real><real>0</real><real>0.039999999105930328</real></array><key>blue_density</key><array><real>0</real><real>0.25999999046325684</real><real>0.5</real><real>0.5</real></array><key>blue_horizon</key><array><real>0</real><real>0</real><real>0</real><real>0</real></array><key>cloud_color</key><array><real>0.25999999046325684</real><real>0</real><real>0</real><real>0.25999999046325684</real></array><key>cloud_pos_density1</key><array><real>0.68999999761581421</real><real>0.68999999761581421</real><real>0.5</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.51999998092651367</real><real>0.81000000238418579</real><real>0.10999999940395355</real><real>1</real></array><key>cloud_scale</key><array><real>0.34999999403953552</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>20</real><real>20</real></array><key>cloud_shadow</key><array><real>0.34999999403953552</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00019999999494757503</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>22.100000381469727</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>1.5707963705062866</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.2099999189376831</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>20</real><real>0.0010000000474974513</real><real>0</real><real>1</real></array><key>haze_density</key><array><real>0.0099999997764825821</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.99802672863006592</real><real>0.062790460884571075</real><real>4.362513550404401e-008</real><real>0</real></array><key>max_y</key><array><real>1014.1000366210937</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.75999999046325684</real><key>sun_angle</key><real>3.0787608623504639</real><key>sunlight_color</key><array><real>1.619999885559082</real><real>1.2690000534057617</real><real>0.91800004243850708</real><real>0.53999996185302734</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asiatix.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asiatix.xml new file mode 100644 index 0000000..bf35008 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Asiatix.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.32999998331069946</real> | ||
6 | <real>0.059999998658895493</real> | ||
7 | <real>0</real> | ||
8 | <real>0.32999998331069946</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.083504162728786469</real> | ||
13 | <real>0.22999770939350128</real> | ||
14 | <real>0.45999997854232788</real> | ||
15 | <real>0.45999997854232788</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.31871956586837769</real> | ||
20 | <real>0.6319204568862915</real> | ||
21 | <real>0.74000000953674316</real> | ||
22 | <real>0.74000000953674316</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>1</real> | ||
27 | <real>0.47999998927116394</real> | ||
28 | <real>0.69999998807907104</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.5</real> | ||
34 | <real>0.5</real> | ||
35 | <real>0.22999998927116394</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.28999999165534973</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>20</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.38999998569488525</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00016999999934341758</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>10.699999809265137</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.5814156532287598</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>6.6000008583068848</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>3.2599999904632568</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.4699999988079071</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.4257793128490448</real> | ||
116 | <real>0</real> | ||
117 | <real>-0.9048270583152771</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1267.5999755859375</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.3199999332427979</real> | ||
136 | <real>0.84000003337860107</real> | ||
137 | <real>0.37800011038780212</real> | ||
138 | <real>1.3199999332427979</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation%202.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation%202.xml new file mode 100644 index 0000000..2edb929 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation%202.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.029999999329447746</real><real>0</real><real>0</real><real>0.029999999329447746</real></array><key>blue_density</key><array><real>0.097999997437000275</real><real>0.2800000011920929</real><real>1</real><real>1</real></array><key>blue_horizon</key><array><real>0.11999999731779099</real><real>0.35094299912452698</real><real>1</real><real>1</real></array><key>cloud_color</key><array><real>0.48999997973442078</real><real>0.79000002145767212</real><real>0.80000001192092896</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.48999997973442078</real><real>0.5</real><real>0.18999999761581421</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.38999998569488525</real><real>0.5</real><real>0.25999999046325684</real><real>1</real></array><key>cloud_scale</key><array><real>0.37000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.9300004821488983</real><real>10.199999788063906</real></array><key>cloud_shadow</key><array><real>0.28999999165534973</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00021999998716637492</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>4</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.2044246196746826</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5399999618530273</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>3.8000010331979865</real><real>0.001000000059761974</real><real>-0.49999996688498527</real><real>1</real></array><key>haze_density</key><array><real>0.20999999344348907</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.049999997019767761</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.062759645283222198</real><real>0.031410921365022659</real><real>0.99753427505493164</real><real>0</real></array><key>max_y</key><array><real>676.10003662109375</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.44999998807907104</real><key>sun_angle</key><real>3.1101765632629395</real><key>sunlight_color</key><array><real>1.7999999523162842</real><real>1.4099999666213989</real><real>1.0199999809265137</real><real>1.7999999523162842</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation.xml new file mode 100644 index 0000000..4ee8115 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Azure%20desertation.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.029999999329447746</real><real>0</real><real>0</real><real>0.029999999329447746</real></array><key>blue_density</key><array><real>0.097999997437000275</real><real>0.2800000011920929</real><real>1</real><real>1</real></array><key>blue_horizon</key><array><real>0.11999999731779099</real><real>0.35094299912452698</real><real>1</real><real>1</real></array><key>cloud_color</key><array><real>0.48999997973442078</real><real>0.79000002145767212</real><real>0.80000001192092896</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.53999996185302734</real><real>0.5</real><real>0.39999997615814209</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.38999998569488525</real><real>0.5</real><real>0.08999999612569809</real><real>1</real></array><key>cloud_scale</key><array><real>0.34999999403953552</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.9300004821488983</real><real>10.199999788063906</real></array><key>cloud_shadow</key><array><real>0.31000000238418579</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00021999998716637492</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>4</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.2044246196746826</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5399999618530273</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>3.8000010331979865</real><real>0.001000000059761974</real><real>-0.49999996688498527</real><real>1</real></array><key>haze_density</key><array><real>0.20999999344348907</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.049999997019767761</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.056814663112163544</real><real>0.42577928304672241</real><real>-0.90304160118103027</real><real>0</real></array><key>max_y</key><array><real>676.10003662109375</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.44999998807907104</real><key>sun_angle</key><real>0.4398229718208313</real><key>sunlight_color</key><array><real>1.7999999523162842</real><real>1.4099999666213989</real><real>1.0199999809265137</real><real>1.7999999523162842</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Barcelon%20variation%202.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Barcelon%20variation%202.xml new file mode 100644 index 0000000..ca17be5 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Barcelon%20variation%202.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.32999998331069946</real> | ||
6 | <real>0.106283999979496</real> | ||
7 | <real>0.14465400576591492</real> | ||
8 | <real>0.32999998331069946</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.14522500336170197</real> | ||
13 | <real>0.39999699592590332</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.56000000238418579</real> | ||
20 | <real>0.30000001192092896</real> | ||
21 | <real>0.35131001472473145</real> | ||
22 | <real>0.56000000238418579</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.51999998092651367</real> | ||
27 | <real>0.41999998688697815</real> | ||
28 | <real>0.71999996900558472</real> | ||
29 | <real>0.71999996900558472</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.50999999046325684</real> | ||
34 | <real>0.47999998927116394</real> | ||
35 | <real>0.68999999761581421</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.039999999105930328</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.38999998569488525</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.32999998331069946</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00014000000373926014</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>25.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.5132739543914795</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.6100000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.2000007629394531</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.59999996423721313</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.53999996185302734</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.34999999403953552</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.4798322319984436</real> | ||
116 | <real>0.57757276296615601</real> | ||
117 | <real>-0.66043221950531006</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>632</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>21</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.059999998658895493</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.61575222015380859</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.0099997520446777</real> | ||
136 | <real>1.3500000238418579</real> | ||
137 | <real>1.3500000238418579</real> | ||
138 | <real>2.0099997520446777</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Beautiful%20again.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Beautiful%20again.xml new file mode 100644 index 0000000..4020b04 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Beautiful%20again.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.75</real> | ||
6 | <real>0</real> | ||
7 | <real>0.43269237875938416</real> | ||
8 | <real>0.25</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.45999997854232788</real> | ||
13 | <real>0.38665792346000671</real> | ||
14 | <real>0.7733229398727417</real> | ||
15 | <real>0.81999999284744263</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.39999997615814209</real> | ||
20 | <real>0.22876684367656708</real> | ||
21 | <real>0.290018230676651</real> | ||
22 | <real>0.39999997615814209</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.25999999046325684</real> | ||
27 | <real>0.28883209824562073</real> | ||
28 | <real>0.28994369506835938</real> | ||
29 | <real>0.28999999165534973</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.17999999225139618</real> | ||
34 | <real>0.50999999046325684</real> | ||
35 | <real>0.91999995708465576</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.25</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.436104517528292</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34000000357627869</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00017999998817685992</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>26.80000114440918</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>1.8849555253982544</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.6699999570846558</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>9.0000009536743164</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.69999998807907104</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.45999997854232788</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.070000000298023224</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.93839412927627563</real> | ||
116 | <real>0.16263717412948608</real> | ||
117 | <real>-0.30490267276763916</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>395</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.3999999761581421</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.16336283087730408</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.3399999141693115</real> | ||
136 | <real>1.5422734022140503</real> | ||
137 | <real>0.92181861400604248</real> | ||
138 | <real>0.77999997138977051</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Breaking%20firmament.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Breaking%20firmament.xml new file mode 100644 index 0000000..ff87474 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Breaking%20firmament.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.059999998658895493</real><real>0</real><real>0</real><real>0.059999998658895493</real></array><key>blue_density</key><array><real>0.31999999284744263</real><real>0.31999999284744263</real><real>0.82999998331069946</real><real>0.82999998331069946</real></array><key>blue_horizon</key><array><real>0.5</real><real>0.35999998450279236</real><real>0.5</real><real>0.59999996423721313</real></array><key>cloud_color</key><array><real>0.14000000059604645</real><real>0.14000000059604645</real><real>0.14000000059604645</real><real>0.14000000059604645</real></array><key>cloud_pos_density1</key><array><real>0.81999999284744263</real><real>0.93999999761581421</real><real>0.75</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.44999998807907104</real><real>0.35999998450279236</real><real>0.019999999552965164</real><real>1</real></array><key>cloud_scale</key><array><real>0.17999999225139618</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>20</real><real>20</real></array><key>cloud_shadow</key><array><real>0.37000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00016999999934341758</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>0</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.0787608623504639</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.809999942779541</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>7.5999999046325684</real><real>0.0010000000474974513</real><real>-0.64999997615814209</real><real>1</real></array><key>haze_density</key><array><real>0.22999998927116394</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.18999999761581421</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.062017403542995453</real><real>0.15643446147441864</real><real>-0.98573935031890869</real><real>0</real></array><key>max_y</key><array><real>253.5</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.39999997615814209</real><key>sun_angle</key><real>0.15707962214946747</real><key>sunlight_color</key><array><real>2.0399999618530273</real><real>2.0399999618530273</real><real>2.0399999618530273</real><real>0.68000000715255737</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Brillianter%20sunset.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Brillianter%20sunset.xml new file mode 100644 index 0000000..5e9a17f --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Brillianter%20sunset.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.32999998331069946</real><real>0.073474660515785217</real><real>0.099999994039535522</real><real>0.32999998331069946</real></array><key>blue_density</key><array><real>0.13251747190952301</real><real>0.36499634385108948</real><real>0.72999995946884155</real><real>0.72999995946884155</real></array><key>blue_horizon</key><array><real>0.16366751492023468</real><real>0.32450026273727417</real><real>0.37999999523162842</real><real>0.37999999523162842</real></array><key>cloud_color</key><array><real>0.23999999463558197</real><real>0.17508696019649506</real><real>0.17508696019649506</real><real>0.23999999463558197</real></array><key>cloud_pos_density1</key><array><real>0.79999995231628418</real><real>0.75999999046325684</real><real>0.74000000953674316</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.44999998807907104</real><real>0.35999998450279236</real><real>0.079999998211860657</real><real>1</real></array><key>cloud_scale</key><array><real>0.28999999165534973</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.49940013885498</real><real>10.01099967956543</real></array><key>cloud_shadow</key><array><real>0.32999998331069946</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00032999998074956238</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>2.7000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.0787608623504639</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5999999046325684</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>7.5999999046325684</real><real>0.0010000000474974513</real><real>-2.25</real><real>1</real></array><key>haze_density</key><array><real>0.079999998211860657</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.049999997019767761</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.06251179426908493</real><real>0.094108313322067261</real><real>-0.99359744787216187</real><real>0</real></array><key>max_y</key><array><real>605</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.12999999523162842</real><key>sun_angle</key><real>0.094247780740261078</real><key>sunlight_color</key><array><real>2.0699999332427979</real><real>2.0024998188018799</real><real>1.5974999666213989</real><real>0.68999999761581421</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Bubble%20sun%20severance.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Bubble%20sun%20severance.xml new file mode 100644 index 0000000..2d10b90 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Bubble%20sun%20severance.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.28999999165534973</real><real>0.099999994039535522</real><real>0.19999998807907104</real><real>0.31000000238418579</real></array><key>blue_density</key><array><real>0</real><real>0.39999699592590332</real><real>0.80000197887420654</real><real>1</real></array><key>blue_horizon</key><array><real>0.051684476435184479</real><real>0.10247376561164856</real><real>0.11999999731779099</real><real>0.11999999731779099</real></array><key>cloud_color</key><array><real>0.63231253623962402</real><real>0.64999997615814209</real><real>0.64999997615814209</real><real>0.64999997615814209</real></array><key>cloud_pos_density1</key><array><real>0.50999999046325684</real><real>0.45999997854232788</real><real>0.82999998331069946</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.48999997973442078</real><real>0.5</real><real>0.079999998211860657</real><real>1</real></array><key>cloud_scale</key><array><real>0.32999998331069946</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.49940013885498</real><real>10.01099967956543</real></array><key>cloud_shadow</key><array><real>0.25999999046325684</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00041999999666586518</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>16.80000114440918</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>6.2203531265258789</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.7300000190734863</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>5</real><real>0.0010000000474974513</real><real>-0.59999996423721313</real><real>1</real></array><key>haze_density</key><array><real>0.40999999642372131</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.2199999988079071</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.062759861350059509</real><real>0.031410761177539825</real><real>0.99753421545028687</real><real>0</real></array><key>max_y</key><array><real>605</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.14000000059604645</real><key>sun_angle</key><real>0.031415928155183792</real><key>sunlight_color</key><array><real>2.6100001335144043</real><real>2.6100001335144043</real><real>2.6100001335144043</real><real>0.87000000476837158</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Castle%20vain.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Castle%20vain.xml new file mode 100644 index 0000000..6122d61 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Castle%20vain.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.17000000178813934</real><real>0.11609756201505661</real><real>0.062195118516683578</real><real>0.17000000178813934</real></array><key>blue_density</key><array><real>0</real><real>0.25</real><real>0.13500000536441803</real><real>0.25</real></array><key>blue_horizon</key><array><real>0.10961377620697021</real><real>0.073546595871448517</real><real>0.14000000059604645</real><real>0.14000000059604645</real></array><key>cloud_color</key><array><real>0.18999999761581421</real><real>0.059999998658895493</real><real>0.049999997019767761</real><real>0.22999998927116394</real></array><key>cloud_pos_density1</key><array><real>0.69999998807907104</real><real>0.37000000476837158</real><real>0.87999999523162842</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.2199999988079071</real><real>0.75999999046325684</real><real>0.079999998211860657</real><real>1</real></array><key>cloud_scale</key><array><real>0.47999998927116394</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.453993749294909</real><real>10.026071512513319</real></array><key>cloud_shadow</key><array><real>0.29999998211860657</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>1.9999999494757503e-005</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>37.600002288818359</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.2672562599182129</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.2799999713897705</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>0.19999980926513672</real><real>0.0010000000474974513</real><real>-0.49999997019767761</real><real>1</real></array><key>haze_density</key><array><real>1.2599999904632568</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.35999998450279236</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.11792353540658951</real><real>0.33873796463012695</real><real>0.93346166610717773</real><real>0</real></array><key>max_y</key><array><real>309.89999389648437</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>1.0799999237060547</real><key>sun_angle</key><real>2.7960174083709717</real><key>sunlight_color</key><array><real>0.93000000715255737</real><real>0.44639992713928223</real><real>0.66030013561248779</real><real>0.31000000238418579</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Climacontrasty.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Climacontrasty.xml new file mode 100644 index 0000000..3f8483a --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Climacontrasty.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.84000003337860107</real> | ||
6 | <real>0.71999996900558472</real> | ||
7 | <real>0.84000003337860107</real> | ||
8 | <real>0.2800000011920929</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.38399907946586609</real> | ||
13 | <real>0.63999354839324951</real> | ||
14 | <real>1.2799999713897705</real> | ||
15 | <real>0.63999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.31999999284744263</real> | ||
20 | <real>0.26181814074516296</real> | ||
21 | <real>0.31999999284744263</real> | ||
22 | <real>0.15999999642372131</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.2800000011920929</real> | ||
27 | <real>0.22615399956703186</real> | ||
28 | <real>0.22615399956703186</real> | ||
29 | <real>0.2800000011920929</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.14000000059604645</real> | ||
34 | <real>0.09771379828453064</real> | ||
35 | <real>0.87000000476837158</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.40999999642372131</real> | ||
41 | <real>0.4699999988079071</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.39999997615814209</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.28999999165534973</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00042999998549930751</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>3.4000000953674316</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.56548666954040527</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.4699999988079071</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>6.2000012397766113</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.47999998927116394</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.69999998807907104</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.15999999642372131</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.53277301788330078</real> | ||
116 | <real>0.10661106556653976</real> | ||
117 | <real>-0.83951592445373535</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>644</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>3</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.0347785949707031</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.5799999237060547</real> | ||
136 | <real>2.5799999237060547</real> | ||
137 | <real>2.5799999237060547</real> | ||
138 | <real>0.85999995470046997</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Clouds%20indifferent.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Clouds%20indifferent.xml new file mode 100644 index 0000000..3b6ebe9 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Clouds%20indifferent.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0</real><real>0</real><real>0.26999998092651367</real><real>0.26999998092651367</real></array><key>blue_density</key><array><real>0.34457135200500488</real><real>0.55514287948608398</real><real>0.66999995708465576</real><real>0.66999995708465576</real></array><key>blue_horizon</key><array><real>0.33888885378837585</real><real>0.47444438934326172</real><real>0.61000001430511475</real><real>0.61000001430511475</real></array><key>cloud_color</key><array><real>0.70999997854232788</real><real>0.74000000953674316</real><real>1</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.79999995231628418</real><real>0.90999996662139893</real><real>0.69999998807907104</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.44999998807907104</real><real>0.35999998450279236</real><real>0.0099999997764825821</real><real>1</real></array><key>cloud_scale</key><array><real>0.14000000059604645</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>20</real><real>20</real></array><key>cloud_shadow</key><array><real>0.35999998450279236</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00049999996554106474</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>0.10000000149011612</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>4.0840702056884766</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.7400000095367432</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>13.19999885559082</real><real>0.0010000000474974513</real><real>-1.4499999284744263</real><real>1</real></array><key>haze_density</key><array><real>0.25999999046325684</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.18999999761581421</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.80542641878128052</real><real>0.094108313322067261</real><real>-0.58517682552337646</real><real>0</real></array><key>max_y</key><array><real>112.70000457763672</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.20999999344348907</real><key>sun_angle</key><real>0.094247780740261078</real><key>sunlight_color</key><array><real>1.0499999523162842</real><real>1.5299999713897705</real><real>1.6500000953674316</real><real>1.6500000953674316</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Cobraring.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Cobraring.xml new file mode 100644 index 0000000..e05abc6 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Cobraring.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0</real><real>0</real><real>0</real><real>0</real></array><key>blue_density</key><array><real>0</real><real>0.35499647259712219</real><real>0.70999997854232788</real><real>0.70999997854232788</real></array><key>blue_horizon</key><array><real>0</real><real>0.79999995231628418</real><real>1</real><real>1</real></array><key>cloud_color</key><array><real>0.39999997615814209</real><real>0.34999999403953552</real><real>0.099999994039535522</real><real>0.39999997615814209</real></array><key>cloud_pos_density1</key><array><real>0.51999998092651367</real><real>0.40999999642372131</real><real>0.69999998807907104</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.5</real><real>0.5</real><real>0.029999999329447746</real><real>1</real></array><key>cloud_scale</key><array><real>0.14999999105930328</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.49940013885498</real><real>10.01099967956543</real></array><key>cloud_shadow</key><array><real>0.47999998927116394</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00038999997195787728</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>8.6999998092651367</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>0.8796459436416626</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.0900000333786011</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>8.600001335144043</real><real>0.0010000000474974513</real><real>-1.1999999284744263</real><real>1</real></array><key>haze_density</key><array><real>0.71999996900558472</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.14999999105930328</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.74749541282653809</real><real>0.2425992339849472</real><real>0.61838197708129883</real><real>0</real></array><key>max_y</key><array><real>158</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0</real><key>sun_angle</key><real>0.24504423141479492</real><key>sunlight_color</key><array><real>3</real><real>1.2599999904632568</real><real>0.27000004053115845</real><real>3</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Coral%20reef.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Coral%20reef.xml new file mode 100644 index 0000000..0f2ebdb --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Coral%20reef.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.25356096029281616</real> | ||
6 | <real>0.40908080339431763</real> | ||
7 | <real>0.65999996662139893</real> | ||
8 | <real>0.2199999988079071</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.3884127140045166</real> | ||
13 | <real>0.63416171073913574</real> | ||
14 | <real>1.0199999809265137</real> | ||
15 | <real>0.50999999046325684</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.79566740989685059</real> | ||
20 | <real>1.3341723680496216</real> | ||
21 | <real>1.5199999809265137</real> | ||
22 | <real>0.75999999046325684</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.35999998450279236</real> | ||
27 | <real>0.35834389925003052</real> | ||
28 | <real>0.35834389925003052</real> | ||
29 | <real>0.35999998450279236</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.65999996662139893</real> | ||
34 | <real>0.34000000357627869</real> | ||
35 | <real>0.32999998331069946</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.28999999165534973</real> | ||
41 | <real>0.84999996423721313</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.32999998058761548</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.499399946934318</real> | ||
55 | <real>10.010999746491507</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31999999284744263</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00045999998110346496</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.8274333477020264</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.3500000238418579</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.2366936635580714</real> | ||
95 | <real>0.0010000000718780599</real> | ||
96 | <real>-0.49272174722960926</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.2699999809265137</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.32999998331069946</real> | ||
109 | <real>0.19915598630905151</real> | ||
110 | <real>0.19915598630905151</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.2967471182346344</real> | ||
116 | <real>0.27899089455604553</real> | ||
117 | <real>0.91329360008239746</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>403</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.8588495254516602</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.56603914499282837</real> | ||
136 | <real>0.62662863731384277</real> | ||
137 | <real>0.77999997138977051</real> | ||
138 | <real>0.25999999046325684</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Damage%20down.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Damage%20down.xml new file mode 100644 index 0000000..7fe8a59 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Damage%20down.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>2.5199999809265137</real> | ||
6 | <real>0.89999997615814209</real> | ||
7 | <real>0</real> | ||
8 | <real>0.8399999737739563</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.31999999284744263</real> | ||
13 | <real>0.22953487932682037</real> | ||
14 | <real>0.41999998688697815</real> | ||
15 | <real>0.5</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.39999997615814209</real> | ||
20 | <real>0.35094299912452698</real> | ||
21 | <real>0.8399999737739563</real> | ||
22 | <real>0.87999999523162842</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.56049990653991699</real> | ||
27 | <real>0.7504999041557312</real> | ||
28 | <real>0.75999999046325684</real> | ||
29 | <real>0.75999999046325684</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.10999999940395355</real> | ||
34 | <real>5.6909198760986328</real> | ||
35 | <real>0.74000000953674316</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.14000000059604645</real> | ||
41 | <real>6.9909601211547852</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.35999998450279236</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>12.40999960899353</real> | ||
55 | <real>10.199999809265137</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34000000357627869</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00026999998954124749</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>1.3000000715255737</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.6100000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.94999998807907104</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.91999995708465576</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.10999999940395355</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.55164581537246704</real> | ||
117 | <real>-0.83407843112945557</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>2228</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.5572564601898193</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.4600000381469727</real> | ||
136 | <real>1.5</real> | ||
137 | <real>0.89999997615814209</real> | ||
138 | <real>2.4600000381469727</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Dark%20came%20over.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Dark%20came%20over.xml new file mode 100644 index 0000000..e184cdc --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Dark%20came%20over.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.08999999612569809</real><real>0.08999999612569809</real><real>0</real><real>0.08999999612569809</real></array><key>blue_density</key><array><real>0.10500001907348633</real><real>0.29999998211860657</real><real>0.59999996423721313</real><real>0.59999996423721313</real></array><key>blue_horizon</key><array><real>0.11220983415842056</real><real>0.32816043496131897</real><real>0.68999999761581421</real><real>0.68999999761581421</real></array><key>cloud_color</key><array><real>0.63999998569488525</real><real>0.56685715913772583</real><real>0.31085717678070068</real><real>0.63999998569488525</real></array><key>cloud_pos_density1</key><array><real>0.79999995231628418</real><real>1</real><real>0.87000000476837158</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.69999998807907104</real><real>0.70999997854232788</real><real>0.079999998211860657</real><real>1</real></array><key>cloud_scale</key><array><real>0.19999998807907104</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.9300003051757813</real><real>10.199999809265137</real></array><key>cloud_shadow</key><array><real>0.31999999284744263</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00047999998787418008</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>7.4000000953674316</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>2.6389377117156982</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.3399999141693115</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>2.9999995231628418</real><real>0.0010000000474974513</real><real>-0.99999994039535522</real><real>1</real></array><key>haze_density</key><array><real>0.53999996185302734</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.12999999523162842</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.47582259774208069</real><real>0.15643444657325745</real><real>0.86551785469055176</real><real>0</real></array><key>max_y</key><array><real>1971.800048828125</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.56000000238418579</real><key>sun_angle</key><real>2.9845130443572998</real><key>sunlight_color</key><array><real>0.87000000476837158</real><real>0.6421428918838501</real><real>0.42000001668930054</real><real>0.28999999165534973</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Das%20fog.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Das%20fog.xml new file mode 100644 index 0000000..3dc815f --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Das%20fog.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>3</real> | ||
6 | <real>3</real> | ||
7 | <real>3</real> | ||
8 | <real>1</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | <real>0</real> | ||
15 | <real>0</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0</real> | ||
21 | <real>0</real> | ||
22 | <real>0</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>1</real> | ||
27 | <real>1</real> | ||
28 | <real>1</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1</real> | ||
34 | <real>1</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1</real> | ||
41 | <real>1</real> | ||
42 | <real>1</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>1</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>1</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00089999998454004526</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>100</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>6.2831854820251465</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>0.19999980926513672</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-2.5</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.25</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.14000000059604645</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-1.7484555314695172e-007</real> | ||
116 | <real>1.7484555314695172e-007</real> | ||
117 | <real>1</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>4000</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>2</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>6.2831854820251465</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>3</real> | ||
136 | <real>3</real> | ||
137 | <real>3</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Deep%20blue%20sky.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Deep%20blue%20sky.xml new file mode 100644 index 0000000..212da90 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Deep%20blue%20sky.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.28464806749374816</real><real>0.45923502031814678</real><real>0.7409173846244812</real><real>0.7409173846244812</real></array><key>blue_density</key><array><real>0.25613615825332658</real><real>0.41819368084009056</real><real>0.6726322016895665</real><real>1</real></array><key>blue_horizon</key><array><real>0.47774650705002841</real><real>0.80108383983144904</real><real>0.91266119477967322</real><real>0.98532241580704749</real></array><key>cloud_color</key><array><real>0.52756190160579308</real><real>0.52756190160579308</real><real>0.52756190160579308</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.72999995946884155</real><real>0.34000000357627869</real><real>0.32999998331069946</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.28999999165534973</real><real>0.84999996423721313</real><real>0.019999999552965164</real><real>1</real></array><key>cloud_scale</key><array><real>0.32999998058761548</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.499399946934318</real><real>10.010999746491507</real></array><key>cloud_shadow</key><array><real>0.25999999046325684</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>9.9999997473787516e-006</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>0.69999999890643494</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.1415927410125732</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.610000025154136</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>4.2366936635580714</real><real>0.0010000000718780599</real><real>-0.49272174722960926</real><real>1</real></array><key>haze_density</key><array><real>1.5557675468824073</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.33174386620521545</real><real>0.1991559842625179</real><real>0.1991559842625179</real><real>1</real></array><key>lightnorm</key><array><real>-6.1817239327410789e-008</real><real>0.70710676908493042</real><real>0.70710676908493042</real><real>0</real></array><key>max_y</key><array><real>711.42973550362512</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0</real><key>sun_angle</key><real>2.3561944961547852</real><key>sunlight_color</key><array><real>0.62994743245872087</real><real>0.69737775977682759</real><real>0.86806544391379248</real><real>0.28935515608276319</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Desert%20Sunset%20mod.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Desert%20Sunset%20mod.xml new file mode 100644 index 0000000..2e2a2f3 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Desert%20Sunset%20mod.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.48999997973442078</real> | ||
6 | <real>0.088169597089290619</real> | ||
7 | <real>0.11999999731779099</real> | ||
8 | <real>0.48999997973442078</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.14522500336170197</real> | ||
13 | <real>0.39999997615814209</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.10767599940299988</real> | ||
20 | <real>0.18999999761581421</real> | ||
21 | <real>0.25</real> | ||
22 | <real>0.26999998092651367</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.22615399956703186</real> | ||
27 | <real>0.37000000476837158</real> | ||
28 | <real>0.22615399956703186</real> | ||
29 | <real>0.37000000476837158</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>1.6884100437164307</real> | ||
34 | <real>0.50999999046325684</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>1.6884100437164307</real> | ||
41 | <real>0.52609699964523315</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.199999809265137</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.35999998450279236</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00046999999904073775</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>7.4000000953674316</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>5.2778754234313965</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.6100000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>3.8000011444091797</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.87000000476837158</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.12999999523162842</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.84266197681427002</real> | ||
116 | <real>0.062790460884571075</real> | ||
117 | <real>-0.53476929664611816</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>553</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.0787608623504639</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.1899998188018799</real> | ||
136 | <real>2.8385701179504395</real> | ||
137 | <real>2.8385701179504395</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Early%20warning.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Early%20warning.xml new file mode 100644 index 0000000..43c343a --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Early%20warning.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.87000000476837158</real> | ||
6 | <real>0.54375004768371582</real> | ||
7 | <real>0.24468749761581421</real> | ||
8 | <real>0.28999999165534973</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.31000000238418579</real> | ||
13 | <real>0.36606386303901672</real> | ||
14 | <real>0.62000000476837158</real> | ||
15 | <real>0.31000000238418579</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.85999995470046997</real> | ||
20 | <real>0.35698121786117554</real> | ||
21 | <real>0.56792449951171875</real> | ||
22 | <real>0.42999997735023499</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.31428584456443787</real> | ||
27 | <real>0.55000001192092896</real> | ||
28 | <real>0.39285731315612793</real> | ||
29 | <real>0.55000001192092896</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.65999996662139893</real> | ||
34 | <real>0.45999997854232788</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.71999996900558472</real> | ||
41 | <real>0.41999998688697815</real> | ||
42 | <real>0.059999998658895493</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.44999998807907104</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.200000040817258</real> | ||
55 | <real>10.010999893335338</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31999999284744263</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00016999999934341758</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>4.7000002861022949</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>6.0946898460388184</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.94999998807907104</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>7.7999997138977051</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.55000001192092896</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.75999999046325684</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.19999998807907104</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.17994101345539093</real> | ||
116 | <real>0.27899089455604553</real> | ||
117 | <real>-0.94328433275222778</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1208</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.95999997854232788</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.8588495254516602</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.2899999618530273</real> | ||
136 | <real>0.78157889842987061</real> | ||
137 | <real>0.89999997615814209</real> | ||
138 | <real>0.42999997735023499</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Eno%20would%20be%20proud.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Eno%20would%20be%20proud.xml new file mode 100644 index 0000000..dede67c --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Eno%20would%20be%20proud.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.2800000011920929</real> | ||
6 | <real>0.14962118864059448</real> | ||
7 | <real>0.2036362886428833</real> | ||
8 | <real>0.2800000011920929</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.13977900147438049</real> | ||
13 | <real>0.38499599695205688</real> | ||
14 | <real>0.93999999761581421</real> | ||
15 | <real>0.93999999761581421</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.39999997615814209</real> | ||
20 | <real>0.18999999761581421</real> | ||
21 | <real>0.079999998211860657</real> | ||
22 | <real>0.41999998688697815</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.53999996185302734</real> | ||
27 | <real>0.50999999046325684</real> | ||
28 | <real>0.22615399956703186</real> | ||
29 | <real>0.53999996185302734</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.51999998092651367</real> | ||
34 | <real>0.62000000476837158</real> | ||
35 | <real>0.41999998688697815</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.29999998211860657</real> | ||
41 | <real>0.48999997973442078</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.20999999344348907</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.739999771118164</real> | ||
55 | <real>10.600000381469727</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.39999997615814209</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00038999997195787728</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>8.1000003814697266</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.12566371262073517</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.89999997615814209</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.8000001907348633</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.49999997019767761</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.2099999189376831</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.10999999940395355</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.11373797059059143</real> | ||
116 | <real>0.42008551955223083</real> | ||
117 | <real>-0.90032875537872314</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>789</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>28</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.099999994039535522</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.7080531120300293</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.1610879898071289</real> | ||
136 | <real>1.5523307323455811</real> | ||
137 | <real>2.8799998760223389</real> | ||
138 | <real>0.95999997854232788</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Evil%20machinery.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Evil%20machinery.xml new file mode 100644 index 0000000..22e82a3 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Evil%20machinery.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.5899999141693115</real> | ||
6 | <real>0.53999996185302734</real> | ||
7 | <real>0</real> | ||
8 | <real>1.5899999141693115</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.52199989557266235</real> | ||
13 | <real>0.32480010390281677</real> | ||
14 | <real>0.57999998331069946</real> | ||
15 | <real>0.28999999165534973</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.85999995470046997</real> | ||
20 | <real>0.63999998569488525</real> | ||
21 | <real>1</real> | ||
22 | <real>1.059999942779541</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.37000000476837158</real> | ||
27 | <real>0.25999999046325684</real> | ||
28 | <real>0.039999999105930328</real> | ||
29 | <real>0.37000000476837158</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.51999998092651367</real> | ||
34 | <real>0.38999998569488525</real> | ||
35 | <real>0.68999999761581421</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0</real> | ||
41 | <real>0</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.17000000178813934</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.5</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00089999998454004526</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>100</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.12566371262073517</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.4699999988079071</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>11.600000381469727</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-1.4999998807907104</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.0099999997764825821</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.10497009009122849</real> | ||
116 | <real>0.54639440774917603</real> | ||
117 | <real>0.83092385530471802</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>4</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.57805311679840088</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.3499999046325684</real> | ||
136 | <real>1.559999942779541</real> | ||
137 | <real>0.56999999284744263</real> | ||
138 | <real>1.559999942779541</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Farmatronic%20sepia.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Farmatronic%20sepia.xml new file mode 100644 index 0000000..d2b489d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Farmatronic%20sepia.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0</real><real>0</real><real>0</real><real>0</real></array><key>blue_density</key><array><real>0</real><real>0.099999994039535522</real><real>0.11999999731779099</real><real>0.11999999731779099</real></array><key>blue_horizon</key><array><real>0.029999999329447746</real><real>0.029999999329447746</real><real>0.029999999329447746</real><real>0.029999999329447746</real></array><key>cloud_color</key><array><real>0.37999999523162842</real><real>0.31999999284744263</real><real>0.22999998927116394</real><real>0.37999999523162842</real></array><key>cloud_pos_density1</key><array><real>0.74000000953674316</real><real>0.93999999761581421</real><real>0.84999996423721313</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.65999996662139893</real><real>0.52999997138977051</real><real>0.039999999105930328</real><real>1</real></array><key>cloud_scale</key><array><real>0.18999999761581421</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>20</real><real>20</real></array><key>cloud_shadow</key><array><real>0.32999998331069946</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00013000000035390258</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>1.3000000715255737</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>2.3247785568237305</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.9499999284744263</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>17.399999618530273</real><real>0.0010000000474974513</real><real>-0.64999997615814209</real><real>1</real></array><key>haze_density</key><array><real>0.62000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.20999999344348907</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.72322046756744385</real><real>0.12533323466777802</real><real>-0.67914927005767822</real><real>0</real></array><key>max_y</key><array><real>281.70001220703125</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.39999997615814209</real><key>sun_angle</key><real>0.12566371262073517</real><key>sunlight_color</key><array><real>1.5899999141693115</real><real>1.5299999713897705</real><real>1.5899999141693115</real><real>1.5899999141693115</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Fogvari.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Fogvari.xml new file mode 100644 index 0000000..addb480 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Fogvari.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.3952941596508026123046875</real> | ||
6 | <real>0.3952941596508026123046875</real> | ||
7 | <real>0.420000016689300537109375</real> | ||
8 | <real>0.1400000005960464477539062</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.1452250033617019653320312</real> | ||
13 | <real>0.3999969959259033203125</real> | ||
14 | <real>0.80000197887420654296875</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.430702149868011474609375</real> | ||
20 | <real>0.853946685791015625</real> | ||
21 | <real>1</real> | ||
22 | <real>1</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.699999988079071044921875</real> | ||
27 | <real>0.699999988079071044921875</real> | ||
28 | <real>0.699999988079071044921875</real> | ||
29 | <real>0.699999988079071044921875</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.5</real> | ||
34 | <real>0.5</real> | ||
35 | <real>0.53999996185302734375</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.125</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.2999999821186065673828125</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498046875</real> | ||
55 | <real>10.0109996795654296875</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.2199999988079071044921875</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0003100000030826777219772339</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>8.1000003814697265625</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.949999988079071044921875</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>0.99999904632568359375</real> | ||
95 | <real>0.001000000047497451305389404</real> | ||
96 | <real>-2.5</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>4</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.64999997615814208984375</real> | ||
109 | <real>0.1991560012102127075195312</real> | ||
110 | <real>0.1991560012102127075195312</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.99715888500213623046875</real> | ||
117 | <real>-0.0753269493579864501953125</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>54</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.6461946964263916015625</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.599999964237213134765625</real> | ||
136 | <real>0.599999964237213134765625</real> | ||
137 | <real>0.599999964237213134765625</real> | ||
138 | <real>0.199999988079071044921875</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Grit%20%26%20shame.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Grit%20%26%20shame.xml new file mode 100644 index 0000000..a9fda37 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Grit%20%26%20shame.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.26999998092651367</real> | ||
6 | <real>0.22736841440200806</real> | ||
7 | <real>0</real> | ||
8 | <real>0.08999999612569809</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.038261249661445618</real> | ||
13 | <real>0.43999999761581421</real> | ||
14 | <real>0.11478374153375626</real> | ||
15 | <real>0.2199999988079071</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0</real> | ||
20 | <real>0.60503017902374268</real> | ||
21 | <real>0.89999997615814209</real> | ||
22 | <real>0.44999998807907104</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>1</real> | ||
27 | <real>0</real> | ||
28 | <real>0</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.53999996185302734</real> | ||
34 | <real>0.45999997854232788</real> | ||
35 | <real>0.61000001430511475</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.039999999105930328</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.29999998211860657</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>20</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31999999284744263</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00014999999257270247</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>10.100000381469727</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.6442475318908691</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.2799999713897705</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>0.39999961853027344</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.55000001192092896</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>2.8599998950958252</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.44999998807907104</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.48175370693206787</real> | ||
116 | <real>1.7484555314695172e-007</real> | ||
117 | <real>-0.87630665302276611</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>886</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>6.2831854820251465</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.86999994516372681</real> | ||
136 | <real>0.71999996900558472</real> | ||
137 | <real>1.7699999809265137</real> | ||
138 | <real>1.7699999809265137</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Herr%20Gracken.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Herr%20Gracken.xml new file mode 100644 index 0000000..ab35e75 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Herr%20Gracken.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.68999993801116943</real> | ||
6 | <real>0.55225539207458496</real> | ||
7 | <real>0.5645453929901123</real> | ||
8 | <real>0.22999998927116394</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.079999998211860657</real> | ||
13 | <real>0.21999964118003845</real> | ||
14 | <real>0.39999997615814209</real> | ||
15 | <real>0.39999997615814209</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>1.1200000047683716</real> | ||
20 | <real>0.37999999523162842</real> | ||
21 | <real>0.19999998807907104</real> | ||
22 | <real>1.1200000047683716</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.55000001192092896</real> | ||
27 | <real>0.47999998927116394</real> | ||
28 | <real>0.31999999284744263</real> | ||
29 | <real>0.55000001192092896</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.89999997615814209</real> | ||
34 | <real>0.94999998807907104</real> | ||
35 | <real>0.75999999046325684</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.26999998092651367</real> | ||
41 | <real>0.18999999761581421</real> | ||
42 | <real>0.049999997019767761</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.25</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>9.993240904292179</real> | ||
55 | <real>10.179008409703329</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34999999403953552</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00022000000171829015</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>39.900001525878906</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>1.7592918872833252</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0799999237060547</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>3.600001335144043</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.39999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.1100000143051147</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.14999999105930328</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.073992699384689331</real> | ||
116 | <real>0.99715888500213623</real> | ||
117 | <real>0.014114863239228725</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>456</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.26999998092651367</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>1.6461946964263916</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.8899999856948853</real> | ||
136 | <real>1.2300000190734863</real> | ||
137 | <real>1.2899999618530273</real> | ||
138 | <real>1.8899999856948853</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Holy%20romance.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Holy%20romance.xml new file mode 100644 index 0000000..4515e5e --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Holy%20romance.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.31535112857818604</real> | ||
6 | <real>0.37471914291381836</real> | ||
7 | <real>0.50999999046325684</real> | ||
8 | <real>0.17000000178813934</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.019999999552965164</real> | ||
13 | <real>0.31999650597572327</real> | ||
14 | <real>0.63999998569488525</real> | ||
15 | <real>0.69999998807907104</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.37999999523162842</real> | ||
20 | <real>0.34158006310462952</real> | ||
21 | <real>0.39999997615814209</real> | ||
22 | <real>0.39999997615814209</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.34000000357627869</real> | ||
27 | <real>0.21396400034427643</real> | ||
28 | <real>0.21396400034427643</real> | ||
29 | <real>0.34000000357627869</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.27044001221656799</real> | ||
34 | <real>1</real> | ||
35 | <real>1</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.10062900185585022</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.41999998688697815</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>9.644780158996582</real> | ||
55 | <real>10.423800468444824</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.32704401016235352</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00015849100600462407</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>3.4000000953674316</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0013735899701714516</real> | ||
96 | <real>-0.55000001192092896</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.6792449951171875</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.13210900127887726</real> | ||
109 | <real>0.13210900127887726</real> | ||
110 | <real>0.13210900127887726</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.031410444527864456</real> | ||
117 | <real>-0.99950659275054932</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1308.1800537109375</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>5</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.1101770401000977</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>3</real> | ||
136 | <real>3</real> | ||
137 | <real>3</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Hong%20Kong.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Hong%20Kong.xml new file mode 100644 index 0000000..6f16a16 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Hong%20Kong.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.81999999284744263</real><real>0.34119853377342224</real><real>0.60482907295227051</real><real>0.81999999284744263</real></array><key>blue_density</key><array><real>0</real><real>0.54214274883270264</real><real>0.68999999761581421</real><real>0.68999999761581421</real></array><key>blue_horizon</key><array><real>0.32884129881858826</real><real>0.22063982486724854</real><real>0.41999998688697815</real><real>0.41999998688697815</real></array><key>cloud_color</key><array><real>0.34999999403953552</real><real>0.13600000739097595</real><real>0.17000000178813934</real><real>0.34999999403953552</real></array><key>cloud_pos_density1</key><array><real>0.68999999761581421</real><real>0.34000000357627869</real><real>0.70999997854232788</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.28999999165534973</real><real>0.84999996423721313</real><real>0.14000000059604645</real><real>1</real></array><key>cloud_scale</key><array><real>0.39999997615814209</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.453993749294909</real><real>10.026071512513319</real></array><key>cloud_shadow</key><array><real>0.37000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>1.9999999494757503e-005</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>24.80000114440918</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>5.5292034149169922</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>0.53999996185302734</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>14.800000190734863</real><real>0.0010000000474974513</real><real>-0.79999995231628418</real><real>1</real></array><key>haze_density</key><array><real>1.1000000238418579</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.28999999165534973</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.68420904874801636</real><real>0.031410921365022659</real><real>-0.72860914468765259</real><real>0</real></array><key>max_y</key><array><real>394.39999389648437</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>1.1799999475479126</real><key>sun_angle</key><real>3.1101765632629395</real><key>sunlight_color</key><array><real>1.2422535419464111</real><real>1.9665026664733887</real><real>2.5199999809265137</real><real>0.8399999737739563</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Ivory%20flowers.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Ivory%20flowers.xml new file mode 100644 index 0000000..7838e49 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Ivory%20flowers.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.87000000476837158</real> | ||
6 | <real>0.69088232517242432</real> | ||
7 | <real>0.69088232517242432</real> | ||
8 | <real>0.28999999165534973</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.63999998569488525</real> | ||
13 | <real>0.39999699592590332</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.71999996900558472</real> | ||
20 | <real>0.37999999523162842</real> | ||
21 | <real>0.39999997615814209</real> | ||
22 | <real>0.71999996900558472</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.31999999284744263</real> | ||
27 | <real>0.17000000178813934</real> | ||
28 | <real>0.22615399956703186</real> | ||
29 | <real>0.31999999284744263</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.4699999988079071</real> | ||
34 | <real>0.31999999284744263</real> | ||
35 | <real>0.75999999046325684</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.69999998807907104</real> | ||
41 | <real>0.35999998450279236</real> | ||
42 | <real>0.25</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.56999999284744263</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>5.1099996566772461</real> | ||
55 | <real>9.339999794960022</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.37999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0004400000034365803</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>3.4000000953674316</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>5.4035391807556152</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.94999998807907104</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>11.400001525878906</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.39999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.31999999284744263</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.10999999940395355</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.76612204313278198</real> | ||
116 | <real>0.10661106556653976</real> | ||
117 | <real>-0.63379108905792236</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>859</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.19999998807907104</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.0347785949707031</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.4600000381469727</real> | ||
136 | <real>2.4600000381469727</real> | ||
137 | <real>2.4600000381469727</real> | ||
138 | <real>0.81999999284744263</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Liz%20gluft.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Liz%20gluft.xml new file mode 100644 index 0000000..2c5b7f8 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Liz%20gluft.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.23999999463558197</real><real>0.3031410276889801</real><real>0.30667626857757568</real><real>0.32999998331069946</real></array><key>blue_density</key><array><real>0.10031381994485855</real><real>0.2849995493888855</real><real>0.56999999284744263</real><real>0.56999999284744263</real></array><key>blue_horizon</key><array><real>0.15806560218334198</real><real>0.31211113929748535</real><real>0.52999997138977051</real><real>0.52999997138977051</real></array><key>cloud_color</key><array><real>0.62000000476837158</real><real>0.72737622261047363</real><real>0.73626559972763062</real><real>1</real></array><key>cloud_pos_density1</key><array><real>0.89999997615814209</real><real>0.93999999761581421</real><real>0.96999996900558472</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.41999998688697815</real><real>0.23999999463558197</real><real>0.029999999329447746</real><real>1</real></array><key>cloud_scale</key><array><real>0.29999998211860657</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.993240904292179</real><real>10.179008409703329</real></array><key>cloud_shadow</key><array><real>0.31000000238418579</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00018000000272877514</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>6.7000002861022949</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>2.1362831592559814</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5399999618530273</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>3.600001335144043</real><real>0.0010000000474974513</real><real>-0.14999999105930328</real><real>1</real></array><key>haze_density</key><array><real>0.74000000953674316</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.18999999761581421</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.82937246561050415</real><real>0.187381312251091</real><real>-0.5263359546661377</real><real>0</real></array><key>max_y</key><array><real>1105</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.18999999761581421</real><key>sun_angle</key><real>0.18849556148052216</real><key>sunlight_color</key><array><real>1.2599999904632568</real><real>1.2599999904632568</real><real>1.2599999904632568</real><real>0.41999998688697815</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Lonely%20cyberpunks.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Lonely%20cyberpunks.xml new file mode 100644 index 0000000..e3281cf --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Lonely%20cyberpunks.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.14999999105930328</real> | ||
6 | <real>0.051724139600992203</real> | ||
7 | <real>0.10344827920198441</real> | ||
8 | <real>0.049999997019767761</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0.39999699592590332</real> | ||
14 | <real>0.80000197887420654</real> | ||
15 | <real>1</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.051684476435184479</real> | ||
20 | <real>0.31999999284744263</real> | ||
21 | <real>0.11999999731779099</real> | ||
22 | <real>0.31999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.63231253623962402</real> | ||
27 | <real>0.64999997615814209</real> | ||
28 | <real>0.64999997615814209</real> | ||
29 | <real>0.64999997615814209</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.50999999046325684</real> | ||
34 | <real>0.45999997854232788</real> | ||
35 | <real>0.68000000715255737</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.48999997973442078</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.079999998211860657</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.32999998331069946</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.23999999463558197</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00031999999191612005</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>49.299999237060547</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>5.9690260887145996</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.7300000190734863</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.2000007629394531</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.79999995231628418</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.69999998807907104</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.2199999988079071</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.30879738926887512</real> | ||
116 | <real>0.037690185010433197</real> | ||
117 | <real>0.95038080215454102</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>940</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.14000000059604645</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.03769911453127861</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.95999997854232788</real> | ||
136 | <real>0.6731034517288208</real> | ||
137 | <real>0.95999997854232788</real> | ||
138 | <real>0.31999999284744263</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Moon%20berries.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Moon%20berries.xml new file mode 100644 index 0000000..864933b --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Moon%20berries.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.079999998211860657</real><real>0.070000000298023224</real><real>0</real><real>0.099999994039535522</real></array><key>blue_density</key><array><real>0.13125002384185791</real><real>0.375</real><real>0.75</real><real>0.75</real></array><key>blue_horizon</key><array><real>0.12196721881628036</real><real>0.35669612884521484</real><real>0.75</real><real>0.75</real></array><key>cloud_color</key><array><real>0.69999998807907104</real><real>0.62000000476837158</real><real>0.34000000357627869</real><real>0.77999997138977051</real></array><key>cloud_pos_density1</key><array><real>0.79999995231628418</real><real>1</real><real>1</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.69999998807907104</real><real>0.70999997854232788</real><real>0.10999999940395355</real><real>1</real></array><key>cloud_scale</key><array><real>0.20999999344348907</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.9300003051757813</real><real>10.199999809265137</real></array><key>cloud_shadow</key><array><real>0.31000000238418579</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00036000000545755029</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>7.4000000953674316</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>2.7017695903778076</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.5399999618530273</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>4.0000009536743164</real><real>0.0010000000474974513</real><real>-0.89999997615814209</real><real>1</real></array><key>haze_density</key><array><real>0.14999999105930328</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.23999999463558197</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.35949742794036865</real><real>0.53582680225372314</real><real>-0.76397073268890381</real><real>0</real></array><key>max_y</key><array><real>2084.5</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>24</integer><key>star_brightness</key><real>0.68000000715255737</real><key>sun_angle</key><real>0.56548666954040527</real><key>sunlight_color</key><array><real>1.2599999904632568</real><real>0.93000000715255737</real><real>0.89999997615814209</real><real>1.2599999904632568</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Noxumic.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Noxumic.xml new file mode 100644 index 0000000..3471ed2 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Noxumic.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.40799996256828308</real> | ||
6 | <real>0.42000001668930054</real> | ||
7 | <real>0.26400002837181091</real> | ||
8 | <real>0.14000000059604645</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.17045657336711884</real> | ||
13 | <real>0.77999997138977051</real> | ||
14 | <real>0.529285728931427</real> | ||
15 | <real>0.38999998569488525</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.69882345199584961</real> | ||
20 | <real>0.71999996900558472</real> | ||
21 | <real>0.58235287666320801</real> | ||
22 | <real>0.35999998450279236</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.25999999046325684</real> | ||
27 | <real>0.28999999165534973</real> | ||
28 | <real>0.57999998331069946</real> | ||
29 | <real>0.57999998331069946</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.4699999988079071</real> | ||
34 | <real>0.32999998331069946</real> | ||
35 | <real>0.77999997138977051</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.26999998092651367</real> | ||
41 | <real>0.15999999642372131</real> | ||
42 | <real>0.08999999612569809</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.34000000357627869</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.069999776780605</real> | ||
55 | <real>9.6399997770786285</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.2800000011920929</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00019999999494757503</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>7.4000000953674316</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0099999904632568</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>13.399999618530273</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.39999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.2400000095367432</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.31999999284744263</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0.23649881780147552</real> | ||
117 | <real>-0.97163176536560059</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>725</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>22</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.9028317928314209</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.3499999046325684</real> | ||
136 | <real>1.3240385055541992</real> | ||
137 | <real>1.2201924324035645</real> | ||
138 | <real>0.44999998807907104</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Oriental%20delight.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Oriental%20delight.xml new file mode 100644 index 0000000..679b9e8 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Oriental%20delight.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.89999997615814209</real><real>0.22999998927116394</real><real>0</real><real>0.89999997615814209</real></array><key>blue_density</key><array><real>0.5444445013999939</real><real>0.4714285135269165</real><real>0.59999996423721313</real><real>0.59999996423721313</real></array><key>blue_horizon</key><array><real>0.62999999523162842</real><real>0.29418638348579407</real><real>0.20999999344348907</real><real>0.62999999523162842</real></array><key>cloud_color</key><array><real>0.12999999523162842</real><real>0.079999998211860657</real><real>0</real><real>0.12999999523162842</real></array><key>cloud_pos_density1</key><array><real>0.25999999046325684</real><real>0.31000000238418579</real><real>0.52999997138977051</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.18999999761581421</real><real>0.89999997615814209</real><real>0.070000000298023224</real><real>1</real></array><key>cloud_scale</key><array><real>0.41999998688697815</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.453993749294909</real><real>10.026071512513319</real></array><key>cloud_shadow</key><array><real>0.32999998331069946</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>3.9999998989515007e-005</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>4.7000002861022949</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>3.5185837745666504</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>0.93999999761581421</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>18.599998474121094</real><real>0.0010000000474974513</real><real>-1.25</real><real>1</real></array><key>haze_density</key><array><real>0.87000000476837158</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.53999996185302734</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>-0.35010725259780884</real><real>0.30901703238487244</real><real>0.88426995277404785</real><real>0</real></array><key>max_y</key><array><real>366.20001220703125</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.37999999523162842</real><key>sun_angle</key><real>2.8274333477020264</real><key>sunlight_color</key><array><real>1.5899999141693115</real><real>1.1811429262161255</real><real>0.95783114433288574</real><real>0.52999997138977051</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Our%20night%20together.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Our%20night%20together.xml new file mode 100644 index 0000000..1ee2df7 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Our%20night%20together.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.15812495350837708</real> | ||
6 | <real>0.10834565013647079</real> | ||
7 | <real>0.32999998331069946</real> | ||
8 | <real>0.32999998331069946</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0.22842106223106384</real> | ||
14 | <real>0.56000000238418579</real> | ||
15 | <real>0.56000000238418579</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.34999999403953552</real> | ||
20 | <real>0.21593084931373596</real> | ||
21 | <real>0.30163845419883728</real> | ||
22 | <real>0.34999999403953552</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.68507599830627441</real> | ||
27 | <real>0.80405128002166748</real> | ||
28 | <real>0.81000000238418579</real> | ||
29 | <real>0.81000000238418579</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.5</real> | ||
34 | <real>0.5</real> | ||
35 | <real>0.20999999344348907</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.11999999731779099</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.31000000238418579</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.33593833803161</real> | ||
55 | <real>10.065257411083678</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.37999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00026000000070780516</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>43</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.7646017074584961</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.8600000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>8.8000011444091797</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-1.0499999523162842</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.4900000095367432</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.14999999105930328</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.36322319507598877</real> | ||
116 | <real>0.16263668239116669</real> | ||
117 | <real>0.91739749908447266</real> | ||
118 | <real>1</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1474</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.6499999761581421</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>6.1198229789733887</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.9799998998641968</real> | ||
136 | <real>1.3627382516860962</real> | ||
137 | <real>1.1429417133331299</real> | ||
138 | <real>0.65999996662139893</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Polaron%20charge%20II.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Polaron%20charge%20II.xml new file mode 100644 index 0000000..2547726 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Polaron%20charge%20II.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.84000003337860107</real> | ||
6 | <real>0.2892836332321167</real> | ||
7 | <real>0.39371848106384277</real> | ||
8 | <real>0.2800000011920929</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0</real> | ||
13 | <real>0.85999995470046997</real> | ||
14 | <real>0.68083322048187256</real> | ||
15 | <real>0.85999995470046997</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.77999997138977051</real> | ||
20 | <real>0.19999998807907104</real> | ||
21 | <real>0.42999997735023499</real> | ||
22 | <real>0.77999997138977051</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.51999998092651367</real> | ||
27 | <real>0.56999999284744263</real> | ||
28 | <real>0.44999998807907104</real> | ||
29 | <real>0.62999999523162842</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.5899999737739563</real> | ||
34 | <real>0.37000000476837158</real> | ||
35 | <real>0.57999998331069946</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.14999999105930328</real> | ||
41 | <real>0.84999996423721313</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.31999999284744263</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.499399908684609</real> | ||
55 | <real>10.010999908119629</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.17999999225139618</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00033999999868683517</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>17.600000381469727</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.0159289836883545</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.1999999284744263</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>9.2000007629394531</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.85000002384185791</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.7799999713897705</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.2800000011920929</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.12533320486545563</real> | ||
116 | <real>0</real> | ||
117 | <real>0.99211472272872925</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>537</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0.63999998569488525</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.1604423522949219</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.90927821397781372</real> | ||
136 | <real>2.9399998188018799</real> | ||
137 | <real>1.6367011070251465</real> | ||
138 | <real>0.97999995946884155</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Red%20city.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Red%20city.xml new file mode 100644 index 0000000..924c2b6 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Red%20city.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1</real> | ||
6 | <real>0.019999999552965164</real> | ||
7 | <real>0</real> | ||
8 | <real>1</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.099999994039535522</real> | ||
13 | <real>0.24640001356601715</real> | ||
14 | <real>0.87999999523162842</real> | ||
15 | <real>0.87999999523162842</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>1</real> | ||
20 | <real>0.70652174949645996</real> | ||
21 | <real>0.95652180910110474</real> | ||
22 | <real>1</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.59800004959106445</real> | ||
27 | <real>0.68137490749359131</real> | ||
28 | <real>0.68999999761581421</real> | ||
29 | <real>0.68999999761581421</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.5899999737739563</real> | ||
34 | <real>0.53999996185302734</real> | ||
35 | <real>0.37000000476837158</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0</real> | ||
41 | <real>0</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.20999999344348907</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10</real> | ||
55 | <real>10</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.28999999165534973</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00026000000070780516</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>10.100000381469727</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>4.9008846282958984</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.3999999761581421</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>15</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-2.5</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.40999999642372131</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.08999999612569809</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.98180252313613892</real> | ||
116 | <real>0.031410444527864456</real> | ||
117 | <real>-0.18728893995285034</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>632</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.059999942779541</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>3.1101770401000977</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>3</real> | ||
136 | <real>2.0099997520446777</real> | ||
137 | <real>1.2721518278121948</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Sparz%20puft.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Sparz%20puft.xml new file mode 100644 index 0000000..a127d36 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Sparz%20puft.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>1.4699999094009399</real> | ||
6 | <real>1.4699999094009399</real> | ||
7 | <real>1.4699999094009399</real> | ||
8 | <real>0.48999997973442078</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.50068968534469604</real> | ||
13 | <real>0.65999996662139893</real> | ||
14 | <real>0.59172403812408447</real> | ||
15 | <real>0.32999998331069946</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.81999999284744263</real> | ||
20 | <real>0.59653842449188232</real> | ||
21 | <real>0.4696153998374939</real> | ||
22 | <real>0.81999999284744263</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.22999998927116394</real> | ||
27 | <real>0.17000000178813934</real> | ||
28 | <real>0.17000000178813934</real> | ||
29 | <real>0.22999998927116394</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.89999997615814209</real> | ||
34 | <real>0.42999997735023499</real> | ||
35 | <real>0.2800000011920929</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0</real> | ||
41 | <real>0.19999998807907104</real> | ||
42 | <real>0.45999997854232788</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.42999997735023499</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.200000040817258</real> | ||
55 | <real>10.010999893335338</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.22999998927116394</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>1.9999999494757503e-005</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>12.800000190734863</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.62831848859786987</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>0.87999999523162842</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>9.8000001907348633</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.85000002384185791</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>3.0499999523162842</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.17999999225139618</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.42594048380851746</real> | ||
116 | <real>0.68911367654800415</real> | ||
117 | <real>-0.58625680208206177</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>295</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>27</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.0799999237060547</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.3813273906707764</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.2599999904632568</real> | ||
136 | <real>0.72947371006011963</real> | ||
137 | <real>0.84000003337860107</real> | ||
138 | <real>1.2599999904632568</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Stay%20stonkin%27.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Stay%20stonkin%27.xml new file mode 100644 index 0000000..57ce616 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Stay%20stonkin%27.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.079999998211860657</real><real>0.2800000011920929</real><real>0.28653734922409058</real><real>0.31000000238418579</real></array><key>blue_density</key><array><real>0.78999996185302734</real><real>0.34725272655487061</real><real>0</real><real>0.78999996185302734</real></array><key>blue_horizon</key><array><real>0.45999997854232788</real><real>0.35633799433708191</real><real>0.34338021278381348</real><real>0.45999997854232788</real></array><key>cloud_color</key><array><real>0.25777778029441833</real><real>0.43999999761581421</real><real>0</real><real>0.43999999761581421</real></array><key>cloud_pos_density1</key><array><real>0.47999998927116394</real><real>0.77999997138977051</real><real>0.78999996185302734</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.5</real><real>0.5</real><real>0.17000000178813934</real><real>1</real></array><key>cloud_scale</key><array><real>0.26999998092651367</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>10.072908222972274</real><real>10.152564609237686</real></array><key>cloud_shadow</key><array><real>0.25999999046325684</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00014000000373926014</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>8.1000003814697266</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>6.2831854820251465</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.4699999094009399</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>4.101177011798768</real><real>0.0010000000397674888</real><real>-0.49498037251770732</real><real>1</real></array><key>haze_density</key><array><real>0</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.50999999046325684</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>7.4445637210374116e-008</real><real>0.90482699871063232</real><real>-0.42577937245368958</real><real>0</real></array><key>max_y</key><array><real>921</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0</real><key>sun_angle</key><real>2.0106194019317627</real><key>sunlight_color</key><array><real>1.9499999284744263</real><real>0.71999996900558472</real><real>1.6899898052215576</real><real>1.9499999284744263</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Study%20vessels.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Study%20vessels.xml new file mode 100644 index 0000000..0047172 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Study%20vessels.xml | |||
@@ -0,0 +1 @@ | |||
<llsd><map><key>ambient</key><array><real>0.53999996185302734</real><real>0</real><real>0</real><real>0.53999996185302734</real></array><key>blue_density</key><array><real>0.086239993572235107</real><real>0.24640001356601715</real><real>0.87999999523162842</real><real>0.87999999523162842</real></array><key>blue_horizon</key><array><real>0.10560000687837601</real><real>0.30882984399795532</real><real>0.87999999523162842</real><real>0.87999999523162842</real></array><key>cloud_color</key><array><real>0.47774997353553772</real><real>0.77024996280670166</real><real>0.77999997138977051</real><real>0.77999997138977051</real></array><key>cloud_pos_density1</key><array><real>0.48999997973442078</real><real>0.5</real><real>0.35999998450279236</real><real>1</real></array><key>cloud_pos_density2</key><array><real>0.34000000357627869</real><real>0.42999997735023499</real><real>0.37000000476837158</real><real>1</real></array><key>cloud_scale</key><array><real>0.28999999165534973</real><real>0</real><real>0</real><real>1</real></array><key>cloud_scroll_rate</key><array><real>9.930000339250185</real><real>10.199999625297616</real></array><key>cloud_shadow</key><array><real>0.35999998450279236</real><real>0</real><real>0</real><real>1</real></array><key>density_multiplier</key><array><real>0.00016999999934341758</real><real>0</real><real>0</real><real>1</real></array><key>distance_multiplier</key><array><real>29.5</real><real>0</real><real>0</real><real>1</real></array><key>east_angle</key><real>1.8221237659454346</real><key>enable_cloud_scroll</key><array><boolean>0</boolean><boolean>0</boolean></array><key>gamma</key><array><real>1.4800000190734863</real><real>0</real><real>0</real><real>1</real></array><key>glow</key><array><real>11.200000762939453</real><real>0.0010000000474974513</real><real>-2.3999998569488525</real><real>1</real></array><key>haze_density</key><array><real>0.5899999737739563</real><real>0</real><real>0</real><real>1</real></array><key>haze_horizon</key><array><real>0.48999997973442078</real><real>0.19915600121021271</real><real>0.19915600121021271</real><real>1</real></array><key>lightnorm</key><array><real>0.96810519695281982</real><real>0.031410921365022659</real><real>0.24856719374656677</real><real>0</real></array><key>max_y</key><array><real>450.70001220703125</real><real>0</real><real>0</real><real>1</real></array><key>preset_num</key><integer>18</integer><key>star_brightness</key><real>0.68999999761581421</real><key>sun_angle</key><real>3.1101765632629395</real><key>sunlight_color</key><array><real>2.0099997520446777</real><real>1.3892644643783569</real><real>1.0049998760223389</real><real>0.66999995708465576</real></array></map></llsd> | |||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Teak%20weak.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Teak%20weak.xml new file mode 100644 index 0000000..c865b39 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Teak%20weak.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.42000001668930054</real> | ||
6 | <real>0</real> | ||
7 | <real>0</real> | ||
8 | <real>0.42000001668930054</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.019999999552965164</real> | ||
13 | <real>0.059999998658895493</real> | ||
14 | <real>0.019999999552965164</real> | ||
15 | <real>0.059999998658895493</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.89999997615814209</real> | ||
20 | <real>0.71999996900558472</real> | ||
21 | <real>0.53999996185302734</real> | ||
22 | <real>1.0799999237060547</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0</real> | ||
27 | <real>0</real> | ||
28 | <real>0</real> | ||
29 | <real>0</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.47999998927116394</real> | ||
34 | <real>0.23999999463558197</real> | ||
35 | <real>0.34999999403953552</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.5</real> | ||
41 | <real>0.5</real> | ||
42 | <real>0.17000000178813934</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.26999998092651367</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.072908222972274</real> | ||
55 | <real>10.152564609237686</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.25999999046325684</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00018999999156221747</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>9.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0.8796459436416626</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0799999237060547</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>4.101177011798768</real> | ||
95 | <real>0.0010000000397674888</real> | ||
96 | <real>-0.49498037251770732</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.52999997138977051</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.43309280276298523</real> | ||
116 | <real>0.82708048820495605</real> | ||
117 | <real>-0.35828551650047302</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>993</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>0</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>2.1676990985870361</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.9499999284744263</real> | ||
136 | <real>1.3799998760223389</real> | ||
137 | <real>1.6899898052215576</real> | ||
138 | <real>1.9499999284744263</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Wuxia%20nights.xml b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Wuxia%20nights.xml new file mode 100644 index 0000000..2774c08 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/%5BTOR%5D%20Wuxia%20nights.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.87185126543045044</real> | ||
6 | <real>1.0359940528869629</real> | ||
7 | <real>1.4099999666213989</real> | ||
8 | <real>0.4699999988079071</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.5</real> | ||
13 | <real>0.019999999552965164</real> | ||
14 | <real>0.5</real> | ||
15 | <real>0.51999998092651367</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.84959989786148071</real> | ||
20 | <real>1.1799999475479126</real> | ||
21 | <real>1.1799999475479126</real> | ||
22 | <real>0.5899999737739563</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.22615399956703186</real> | ||
27 | <real>0.22615399956703186</real> | ||
28 | <real>0.22615399956703186</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0</real> | ||
34 | <real>0.23999999463558197</real> | ||
35 | <real>0.34999999403953552</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>5.9584097862243652</real> | ||
41 | <real>6.9909601211547852</real> | ||
42 | <real>0.0099999997764825821</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.37999999523162842</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>10.49940013885498</real> | ||
55 | <real>10.01099967956543</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.19999998807907104</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00026999998954124749</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>0.5</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>0</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>0</boolean> | ||
83 | <boolean>0</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>5</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.69999998807907104</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>1.6799999475479126</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>1</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0</real> | ||
116 | <real>0</real> | ||
117 | <real>1</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>18</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>2</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>6.1512389183044434</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.32999998331069946</real> | ||
136 | <real>1.6170113086700439</real> | ||
137 | <real>3</real> | ||
138 | <real>1</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml new file mode 100644 index 0000000..896abf6 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.35999998450279236</real> | ||
6 | <real>0.42000001668930054</real> | ||
7 | <real>0.42000001668930054</real> | ||
8 | <real>0.42000001668930054</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.51999998092651367</real> | ||
13 | <real>0.2800000011920929</real> | ||
14 | <real>0.51999998092651367</real> | ||
15 | <real>0.51999998092651367</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.69999998807907104</real> | ||
20 | <real>0.69999998807907104</real> | ||
21 | <real>0.68000000715255737</real> | ||
22 | <real>0.69999998807907104</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>1</real> | ||
27 | <real>0.79000002145767212</real> | ||
28 | <real>0.80000001192092896</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.40999999642372131</real> | ||
34 | <real>0.39999997615814209</real> | ||
35 | <real>0.88999998569488525</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.28999999165534973</real> | ||
41 | <real>0.32999998331069946</real> | ||
42 | <real>0.039999999105930328</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.37999999523162842</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>11.809999465942383</real> | ||
55 | <real>12.799999237060547</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31999999284744263</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00021999998716637492</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>4</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.8327431678771973</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>14.40000057220459</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.85000002384185791</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>2.0399999618530273</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.049999997019767761</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.63680768013000488</real> | ||
116 | <real>0.043968122452497482</real> | ||
117 | <real>-0.76976805925369263</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>676.10003662109375</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>2</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.043982300907373428</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.369999885559082</real> | ||
136 | <real>1.4099999666213989</real> | ||
137 | <real>1.0199999809265137</real> | ||
138 | <real>2.369999885559082</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml new file mode 100644 index 0000000..3b170ac --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.84000003337860107</real> | ||
6 | <real>0.56999999284744263</real> | ||
7 | <real>0.56999999284744263</real> | ||
8 | <real>0.84000003337860107</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>1.0799999237060547</real> | ||
13 | <real>0.51999998092651367</real> | ||
14 | <real>0.51999998092651367</real> | ||
15 | <real>1.0799999237060547</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.57999998331069946</real> | ||
20 | <real>0.25999999046325684</real> | ||
21 | <real>0.25999999046325684</real> | ||
22 | <real>0.57999998331069946</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>1</real> | ||
27 | <real>0.79000002145767212</real> | ||
28 | <real>0.80000001192092896</real> | ||
29 | <real>1</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.40999999642372131</real> | ||
34 | <real>0.39999997615814209</real> | ||
35 | <real>0.88999998569488525</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.28999999165534973</real> | ||
41 | <real>0.32999998331069946</real> | ||
42 | <real>0.039999999105930328</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.37999999523162842</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>11.809999465942383</real> | ||
55 | <real>12.799999237060547</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.31999999284744263</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.0002899999963119626</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>5.5999999046325684</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.8327431678771973</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>14.40000057220459</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.85000002384185791</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>2.0399999618530273</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.049999997019767761</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.63495957851409912</real> | ||
116 | <real>0.087851203978061676</real> | ||
117 | <real>-0.76753407716751099</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>676.10003662109375</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>18</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>2</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.087964601814746857</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>2.2799999713897705</real> | ||
136 | <real>0.75</real> | ||
137 | <real>0.59999996423721313</real> | ||
138 | <real>2.2799999713897705</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml new file mode 100644 index 0000000..5cc7a61 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.71999996900558472</real> | ||
6 | <real>0.71999996900558472</real> | ||
7 | <real>0.71999996900558472</real> | ||
8 | <real>0.23999999463558197</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.31999999284744263</real> | ||
13 | <real>0.094117648899555206</real> | ||
14 | <real>0.094117648899555206</real> | ||
15 | <real>0.15999999642372131</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.45999997854232788</real> | ||
20 | <real>0</real> | ||
21 | <real>0.039999999105930328</real> | ||
22 | <real>0.45999997854232788</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.14000000059604645</real> | ||
27 | <real>0.14000000059604645</real> | ||
28 | <real>0.14000000059604645</real> | ||
29 | <real>0.14000000059604645</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.20999999344348907</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.52999997138977051</real> | ||
42 | <real>0.0099999997764825821</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.070000000298023224</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>18</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.34000000357627869</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00018000000272877514</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>6.7000002861022949</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.5185837745666504</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.0399999618530273</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>17.399999618530273</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.40999999642372131</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.17000000178813934</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.3677685558795929</real> | ||
116 | <real>0.043968122452497482</real> | ||
117 | <real>-0.92887735366821289</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>263</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.0399999618530273</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.043982300907373428</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5899999141693115</real> | ||
136 | <real>1.5899999141693115</real> | ||
137 | <real>1.5899999141693115</real> | ||
138 | <real>1.5899999141693115</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml new file mode 100644 index 0000000..d48a4a2 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.42000001668930054</real> | ||
6 | <real>0.29999998211860657</real> | ||
7 | <real>0.29999998211860657</real> | ||
8 | <real>0.42000001668930054</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.59999996423721313</real> | ||
13 | <real>0.15999999642372131</real> | ||
14 | <real>0.2199999988079071</real> | ||
15 | <real>0.59999996423721313</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.029999999329447746</real> | ||
20 | <real>0</real> | ||
21 | <real>0</real> | ||
22 | <real>0.079999998211860657</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0.81999999284744263</real> | ||
27 | <real>0.18999999761581421</real> | ||
28 | <real>0.039999999105930328</real> | ||
29 | <real>0.81999999284744263</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.20999999344348907</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.52999997138977051</real> | ||
42 | <real>0.0099999997764825821</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.14000000059604645</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>18</real> | ||
55 | <real>20</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.37999999523162842</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00015999999595806003</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>17.399999618530273</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>2.3247785568237305</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.5299999713897705</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>17.399999618530273</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.64999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.32999998331069946</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.079999998211860657</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>-0.72615015506744385</real> | ||
116 | <real>0.087851203978061676</real> | ||
117 | <real>-0.68190038204193115</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>1048</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.3199999332427979</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0.087964601814746857</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>1.5899999141693115</real> | ||
136 | <real>0.47999998927116394</real> | ||
137 | <real>0.53999996185302734</real> | ||
138 | <real>1.5899999141693115</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml new file mode 100644 index 0000000..3ceb600 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.77999997138977051</real> | ||
6 | <real>0.29999998211860657</real> | ||
7 | <real>0.29999998211860657</real> | ||
8 | <real>0.77999997138977051</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>1.5799999237060547</real> | ||
13 | <real>0.45999997854232788</real> | ||
14 | <real>0.45999997854232788</real> | ||
15 | <real>1.5799999237060547</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.97999995946884155</real> | ||
20 | <real>0.34000000357627869</real> | ||
21 | <real>0.35999998450279236</real> | ||
22 | <real>0.97999995946884155</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0</real> | ||
27 | <real>0</real> | ||
28 | <real>0</real> | ||
29 | <real>0</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.19999998807907104</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.69999998807907104</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.070000000298023224</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>2.8600001335144043</real> | ||
55 | <real>17.589999675750732</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.42999997735023499</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00015999999595806003</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2.1000001430511475</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.7699110507965088</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.1100000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>14.000000953674316</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.82999998331069946</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.48999997973442078</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.58778512477874756</real> | ||
116 | <real>0</real> | ||
117 | <real>-0.80901706218719482</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>276</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.1699999570846558</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.29999998211860657</real> | ||
136 | <real>0.29999998211860657</real> | ||
137 | <real>0.29999998211860657</real> | ||
138 | <real>0.099999994039535522</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml new file mode 100644 index 0000000..c36da85 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml | |||
@@ -0,0 +1,141 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>ambient</key> | ||
4 | <array> | ||
5 | <real>0.77999997138977051</real> | ||
6 | <real>0.29999998211860657</real> | ||
7 | <real>0.29999998211860657</real> | ||
8 | <real>0.77999997138977051</real> | ||
9 | </array> | ||
10 | <key>blue_density</key> | ||
11 | <array> | ||
12 | <real>0.65999996662139893</real> | ||
13 | <real>0.58384609222412109</real> | ||
14 | <real>0.58384609222412109</real> | ||
15 | <real>0.32999998331069946</real> | ||
16 | </array> | ||
17 | <key>blue_horizon</key> | ||
18 | <array> | ||
19 | <real>0.37999999523162842</real> | ||
20 | <real>0.34000000357627869</real> | ||
21 | <real>0.35999998450279236</real> | ||
22 | <real>0.37999999523162842</real> | ||
23 | </array> | ||
24 | <key>cloud_color</key> | ||
25 | <array> | ||
26 | <real>0</real> | ||
27 | <real>0</real> | ||
28 | <real>0</real> | ||
29 | <real>0</real> | ||
30 | </array> | ||
31 | <key>cloud_pos_density1</key> | ||
32 | <array> | ||
33 | <real>0.74000000953674316</real> | ||
34 | <real>0.93999999761581421</real> | ||
35 | <real>0.19999998807907104</real> | ||
36 | <real>1</real> | ||
37 | </array> | ||
38 | <key>cloud_pos_density2</key> | ||
39 | <array> | ||
40 | <real>0.65999996662139893</real> | ||
41 | <real>0.69999998807907104</real> | ||
42 | <real>0</real> | ||
43 | <real>1</real> | ||
44 | </array> | ||
45 | <key>cloud_scale</key> | ||
46 | <array> | ||
47 | <real>0.070000000298023224</real> | ||
48 | <real>0</real> | ||
49 | <real>0</real> | ||
50 | <real>1</real> | ||
51 | </array> | ||
52 | <key>cloud_scroll_rate</key> | ||
53 | <array> | ||
54 | <real>2.8600001335144043</real> | ||
55 | <real>17.589999675750732</real> | ||
56 | </array> | ||
57 | <key>cloud_shadow</key> | ||
58 | <array> | ||
59 | <real>0.42999997735023499</real> | ||
60 | <real>0</real> | ||
61 | <real>0</real> | ||
62 | <real>1</real> | ||
63 | </array> | ||
64 | <key>density_multiplier</key> | ||
65 | <array> | ||
66 | <real>0.00015999999595806003</real> | ||
67 | <real>0</real> | ||
68 | <real>0</real> | ||
69 | <real>1</real> | ||
70 | </array> | ||
71 | <key>distance_multiplier</key> | ||
72 | <array> | ||
73 | <real>2.1000001430511475</real> | ||
74 | <real>0</real> | ||
75 | <real>0</real> | ||
76 | <real>1</real> | ||
77 | </array> | ||
78 | <key>east_angle</key> | ||
79 | <real>3.7699110507965088</real> | ||
80 | <key>enable_cloud_scroll</key> | ||
81 | <array> | ||
82 | <boolean>1</boolean> | ||
83 | <boolean>1</boolean> | ||
84 | </array> | ||
85 | <key>gamma</key> | ||
86 | <array> | ||
87 | <real>1.1100000143051147</real> | ||
88 | <real>0</real> | ||
89 | <real>0</real> | ||
90 | <real>1</real> | ||
91 | </array> | ||
92 | <key>glow</key> | ||
93 | <array> | ||
94 | <real>14.000000953674316</real> | ||
95 | <real>0.0010000000474974513</real> | ||
96 | <real>-0.89999997615814209</real> | ||
97 | <real>1</real> | ||
98 | </array> | ||
99 | <key>haze_density</key> | ||
100 | <array> | ||
101 | <real>0.82999998331069946</real> | ||
102 | <real>0</real> | ||
103 | <real>0</real> | ||
104 | <real>1</real> | ||
105 | </array> | ||
106 | <key>haze_horizon</key> | ||
107 | <array> | ||
108 | <real>0.2800000011920929</real> | ||
109 | <real>0.19915600121021271</real> | ||
110 | <real>0.19915600121021271</real> | ||
111 | <real>1</real> | ||
112 | </array> | ||
113 | <key>lightnorm</key> | ||
114 | <array> | ||
115 | <real>0.58778512477874756</real> | ||
116 | <real>0</real> | ||
117 | <real>-0.80901706218719482</real> | ||
118 | <real>0</real> | ||
119 | </array> | ||
120 | <key>max_y</key> | ||
121 | <array> | ||
122 | <real>276</real> | ||
123 | <real>0</real> | ||
124 | <real>0</real> | ||
125 | <real>1</real> | ||
126 | </array> | ||
127 | <key>preset_num</key> | ||
128 | <integer>24</integer> | ||
129 | <key>star_brightness</key> | ||
130 | <real>1.1699999570846558</real> | ||
131 | <key>sun_angle</key> | ||
132 | <real>0</real> | ||
133 | <key>sunlight_color</key> | ||
134 | <array> | ||
135 | <real>0.29999998211860657</real> | ||
136 | <real>0.29999998211860657</real> | ||
137 | <real>0.29999998211860657</real> | ||
138 | <real>0.099999994039535522</real> | ||
139 | </array> | ||
140 | </map> | ||
141 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Arrakissed%20variation.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Arrakissed%20variation.xml new file mode 100644 index 0000000..138b9c3 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Arrakissed%20variation.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.44999998807907104</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.29999998211860657</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>4.2000002861022949</real> | ||
12 | <real>3.2000000476837158</real> | ||
13 | <real>5</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>d0512dd3-2d6f-8970-1d16-3829d8f8299d</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.39999997615814209</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.2800000011920929</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0.98999994993209839</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0</real> | ||
26 | <real>0</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>29.857057571411133</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>1.2199999094009399</real> | ||
35 | <real>-0.22000008821487427</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-2.7200000286102295</real> | ||
40 | <real>-0.67000001668930054</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist%202.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist%202.xml new file mode 100644 index 0000000..c0c422b --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist%202.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.010000000707805157</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.87000000476837158</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.70999997854232788</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0.30000001192092896</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>d727239c-056f-cce0-0681-e190ba7d9e50</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.099999994039535522</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.20000000298023224</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.25</real> | ||
25 | <real>0.5</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>0.57434922456741333</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.10000008344650269</real> | ||
33 | <real>-0.11000008881092072</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.12000008672475815</real> | ||
38 | <real>0.23999990522861481</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist.xml new file mode 100644 index 0000000..49aa4e1 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Atomist.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0020000000949949026</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.87999999523162842</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0.30000001192092896</real> | ||
12 | <real>0.60000002384185791</real> | ||
13 | <real>1.2000000476837158</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.099999994039535522</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.20000000298023224</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.25</real> | ||
25 | <real>0.5</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>0.088388346135616302</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.10000008344650269</real> | ||
33 | <real>-0.11000008881092072</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.12000008672475815</real> | ||
38 | <real>0.23999990522861481</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Bayouette.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Bayouette.xml new file mode 100644 index 0000000..2ab6743 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Bayouette.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.024000000208616257</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.42999997735023499</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.17000000178813934</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>1.8999999761581421</real> | ||
12 | <real>1.1000000238418579</real> | ||
13 | <real>0.69999998807907104</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.15999999642372131</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.79999995231628418</real> | ||
24 | <real>0.40000015497207642</real> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>18.379177093505859</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.58000010251998901</real> | ||
33 | <real>-0.21000008285045624</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.46999990940093994</real> | ||
38 | <real>-0.16000008583068848</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Chivandria%20clair.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Chivandria%20clair.xml new file mode 100644 index 0000000..6f4ac78 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Chivandria%20clair.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.65999996662139893</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.059999998658895493</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>1</real> | ||
12 | <real>1</real> | ||
13 | <real>1</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>1a29d128-f6cb-874f-b39a-bbb68605f950</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>1</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.099999994039535522</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.5</real> | ||
24 | <real>0</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>0.5</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.260000079870224</real> | ||
33 | <real>-0.260000079870224</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.260000079870224</real> | ||
38 | <real>-0.260000079870224</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Claira.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Claira.xml new file mode 100644 index 0000000..d6476dd --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Claira.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.017000000923871994</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.69999998807907104</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.59999996423721313</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>2</real> | ||
12 | <real>1</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.049999997019767761</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.099999994039535522</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0.059999998658895493</real> | ||
26 | <real>0.37999999523162842</real> | ||
27 | <real>0.52999997138977051</real> | ||
28 | <real>0.52999997138977051</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>1</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-1.3300000429153442</real> | ||
35 | <real>-1.8799999952316284</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-1.8100000619888306</real> | ||
40 | <real>-1.3300000429153442</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Coral%20reef.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Coral%20reef.xml new file mode 100644 index 0000000..0da3e52 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Coral%20reef.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0080000003799796104</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>5</real> | ||
13 | <real>2.5</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>2211e97d-e6ed-c592-3bac-c00cad2a86c0</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.039999999105930328</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0.25</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>1</real> | ||
26 | <real>0.5</real> | ||
27 | <real>0</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>0.61557221412658691</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-0.20000007748603821</real> | ||
35 | <real>-0.25000008940696716</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>0.099999904632568359</real> | ||
40 | <real>0.14999990165233612</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Crosshatched%20plans.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Crosshatched%20plans.xml new file mode 100644 index 0000000..cee0a26 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Crosshatched%20plans.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0040000001899898052</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.5899999737739563</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.17999999225139618</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>1.6000000238418579</real> | ||
13 | <real>0.5</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>22229d16-3871-7dee-2042-dbfa25cd8bce</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.049999997019767761</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.14999999105930328</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.39999997615814209</real> | ||
24 | <real>0.39999997615814209</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>4.9245781898498535</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-1.0500000715255737</real> | ||
33 | <real>-1.0500000715255737</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-1.0500000715255737</real> | ||
38 | <real>-0.95000004768371582</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Eyeballin%27.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Eyeballin%27.xml new file mode 100644 index 0000000..d95bd6d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Eyeballin%27.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.87999999523162842</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.64999997615814209</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.0099999997764825821</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.019999999552965164</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>1</real> | ||
24 | <real>1</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>3.2490098476409912</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>0.049999907612800598</real> | ||
33 | <real>0.10999990999698639</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.049999907612800598</real> | ||
38 | <real>0.11999990791082382</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Fantastuck.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Fantastuck.xml new file mode 100644 index 0000000..652efdb --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Fantastuck.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0070000002160668373</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.26999998092651367</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3.1000001430511475</real> | ||
12 | <real>2.6000001430511475</real> | ||
13 | <real>1.3999999761581421</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.049999997019767761</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>1</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-0.010000089183449745</real> | ||
35 | <real>-8.9406967163085938e-008</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-8.9406967163085938e-008</real> | ||
40 | <real>0.009999910369515419</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Featuresque.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Featuresque.xml new file mode 100644 index 0000000..98bec18 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Featuresque.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.79999995231628418</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>4.7000002861022949</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>f9df2fcd-4895-77ec-3fcd-4cb1cef21588</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0.25</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0.79999995231628418</real> | ||
26 | <real>0.40000015497207642</real> | ||
27 | <real>0</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>18.379177093505859</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-0.58000010251998901</real> | ||
35 | <real>-0.21000008285045624</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>0.46999990940093994</real> | ||
40 | <real>-0.16000008583068848</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Freak%2DA%2Ddermia.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Freak%2DA%2Ddermia.xml new file mode 100644 index 0000000..d9c715a --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Freak%2DA%2Ddermia.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>10</real> | ||
13 | <real>10</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>1a29d128-f6cb-874f-b39a-bbb68605f950</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>1</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>1</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>1</real> | ||
24 | <real>0</real> | ||
25 | <real>0.5</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>32</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>3.9999997615814209</real> | ||
33 | <real>3.9999997615814209</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>3.9999997615814209</real> | ||
38 | <real>3.9999997615814209</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Glaznost.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Glaznost.xml new file mode 100644 index 0000000..267f786 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Glaznost.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.082000002264976501</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.66999995708465576</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0.049999997019767761</real> | ||
26 | <real>0.37999999523162842</real> | ||
27 | <real>0.52999997138977051</real> | ||
28 | <real>0.52999997138977051</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>1</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-8.9406967163085938e-008</real> | ||
35 | <real>-8.9406967163085938e-008</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-8.9406967163085938e-008</real> | ||
40 | <real>-8.9406967163085938e-008</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Grantamount.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Grantamount.xml new file mode 100644 index 0000000..4ec8b36 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Grantamount.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.16000001132488251</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>10</real> | ||
13 | <real>10</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.88999998569488525</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>1</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0.31999999284744263</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>1</real> | ||
26 | <real>0</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>1024</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-4</real> | ||
35 | <real>-3.8299999237060547</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-4</real> | ||
40 | <real>-3.8299999237060547</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Hpmod.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Hpmod.xml new file mode 100644 index 0000000..10994dc --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Hpmod.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.014000000432133675</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.65999996662139893</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.070000000298023224</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0.059999998658895493</real> | ||
26 | <real>0.37999999523162842</real> | ||
27 | <real>0.52999997138977051</real> | ||
28 | <real>0.52999997138977051</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>64</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-8.9406967163085938e-008</real> | ||
35 | <real>-8.9406967163085938e-008</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-8.9406967163085938e-008</real> | ||
40 | <real>-8.9406967163085938e-008</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Ice%2Dlike.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Ice%2Dlike.xml new file mode 100644 index 0000000..8489a2e --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Ice%2Dlike.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.040000002831220627</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.25</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.5</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>1</real> | ||
24 | <real>1</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>64</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-8.9406967163085938e-008</real> | ||
33 | <real>-8.9406967163085938e-008</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-8.9406967163085938e-008</real> | ||
38 | <real>-8.9406967163085938e-008</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Impure.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Impure.xml new file mode 100644 index 0000000..b118198 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Impure.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.01100000087171793</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.39999997615814209</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.55000001192092896</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>10</real> | ||
13 | <real>10</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>0db3718c-49e9-ad61-b6c4-4e5b84d9e589</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.15999999642372131</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.34999999403953552</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.5</real> | ||
24 | <real>0.5</real> | ||
25 | <real>0.5</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>16</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.16000008583068848</real> | ||
33 | <real>-0.21000008285045624</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.32000008225440979</real> | ||
38 | <real>-0.32000008225440979</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Linear%20puddles.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Linear%20puddles.xml new file mode 100644 index 0000000..08d82a6 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Linear%20puddles.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.024000000208616257</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.50999999046325684</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.81000000238418579</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>1</real> | ||
13 | <real>2</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>78b6ea66-f557-811f-dec7-b21552cc5c51</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.029999999329447746</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.43750005960464478</real> | ||
25 | <real>0.43749997019767761</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>8.574188232421875</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-1.0500000715255737</real> | ||
33 | <real>-1.0000001192092896</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-1.3200000524520874</real> | ||
38 | <real>-1.4200000762939453</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Listeryne.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Listeryne.xml new file mode 100644 index 0000000..1036fe4 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Listeryne.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.018000001087784767</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.47999998927116394</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.11999999731779099</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>1.6000000238418579</real> | ||
13 | <real>1.7000000476837158</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>2124abf0-8733-8e3e-ff9b-2245f11884f5</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.049999997019767761</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.099999994039535522</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.5</real> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>1.4142136573791504</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>0.8899998664855957</real> | ||
33 | <real>0.52999991178512573</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.47000008821487427</real> | ||
38 | <real>-0.11000008881092072</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Liz%20Taylor.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Liz%20Taylor.xml new file mode 100644 index 0000000..c36dd7f --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Liz%20Taylor.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.029000001028180122</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.37999999523162842</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.23999999463558197</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>1</real> | ||
12 | <real>0.90000003576278687</real> | ||
13 | <real>0.60000002384185791</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>d727239c-056f-cce0-0681-e190ba7d9e50</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.059999998658895493</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.11999999731779099</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.47399908304214478</real> | ||
24 | <real>0.361328125</real> | ||
25 | <real>0.638671875</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>14.928528785705566</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.42000007629394531</real> | ||
33 | <real>-0.050000086426734924</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.050000086426734924</real> | ||
38 | <real>-0.050000086426734924</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Maldives.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Maldives.xml new file mode 100644 index 0000000..6da53e8 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Maldives.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0030000000260770321</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.50999999046325684</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.19999998807907104</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <integer>2</integer> | ||
12 | <integer>2</integer> | ||
13 | <integer>2</integer> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.079999998211860657</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.20000000298023224</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0.25</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0</real> | ||
26 | <real>0</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>21.112127304077148</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>0.5</real> | ||
35 | <real>-0.17000000178813934</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>0.57999998331069946</real> | ||
40 | <real>-0.67000001668930054</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Meridian%20verde.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Meridian%20verde.xml new file mode 100644 index 0000000..6e52b20 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Meridian%20verde.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.01900000125169754</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.38999998569488525</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.62999999523162842</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3.2000000476837158</real> | ||
12 | <real>2.7000000476837158</real> | ||
13 | <real>1.8999999761581421</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>1a5348cb-7164-b03e-8a45-70ad4cabe682</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.19999998807907104</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.19999998807907104</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.25</real> | ||
25 | <real>0.25</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>3.4822025299072266</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-1.0000001192092896</real> | ||
33 | <real>-0.90000009536743164</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.80000007152557373</real> | ||
38 | <real>-0.70000004768371582</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Negative%20ultraspace.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Negative%20ultraspace.xml new file mode 100644 index 0000000..3cb1d07 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Negative%20ultraspace.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0080000003799796104</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>5</real> | ||
13 | <real>2.5</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>2211e97d-e6ed-c592-3bac-c00cad2a86c0</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.039999999105930328</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>1</real> | ||
24 | <real>0.5</real> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>0.61557221412658691</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.20000007748603821</real> | ||
33 | <real>-0.25000008940696716</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.099999904632568359</real> | ||
38 | <real>0.14999990165233612</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Placida%20brite.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Placida%20brite.xml new file mode 100644 index 0000000..b822322 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Placida%20brite.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.01100000087171793</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.65999996662139893</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0</real> | ||
26 | <real>0</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>1</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-0.010000089183449745</real> | ||
35 | <real>-8.9406967163085938e-008</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-8.9406967163085938e-008</real> | ||
40 | <real>0.009999910369515419</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Pretty%20placid.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Pretty%20placid.xml new file mode 100644 index 0000000..4f5a18b --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Pretty%20placid.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.013000000268220901</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.39999997615814209</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.19999998807907104</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0.20000000298023224</real> | ||
13 | <real>0.40000000596046448</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>0db3718c-49e9-ad61-b6c4-4e5b84d9e589</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.049999997019767761</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.10999999940395355</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.19013670086860657</real> | ||
24 | <real>0.2818920910358429</real> | ||
25 | <real>0.39986327290534973</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>4.5947937965393066</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.010000089183449745</real> | ||
33 | <real>-0.020000088959932327</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.24999991059303284</real> | ||
38 | <real>0.39999991655349731</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Raw%20sewage.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Raw%20sewage.xml new file mode 100644 index 0000000..d072409 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Raw%20sewage.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.19999998807907104</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.79999995231628418</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>56b9a89e-6851-0ca6-6200-beddd03e08e0</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.15906250476837158</real> | ||
24 | <real>0.13064941763877869</real> | ||
25 | <real>0.00093749165534973145</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>16</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-8.9406967163085938e-008</real> | ||
33 | <real>-8.9406967163085938e-008</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-8.9406967163085938e-008</real> | ||
38 | <real>-8.9406967163085938e-008</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Showing%20age.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Showing%20age.xml new file mode 100644 index 0000000..deb6638 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Showing%20age.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.02200000174343586</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.099999994039535522</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.91999995708465576</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>56b9a89e-6851-0ca6-6200-beddd03e08e0</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.31999999284744263</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.15999999642372131</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.084000006318092346</real> | ||
24 | <real>0.1586667001247406</real> | ||
25 | <real>0.19599999487400055</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>29.857057571411133</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.32000008225440979</real> | ||
33 | <real>-0.260000079870224</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.260000079870224</real> | ||
38 | <real>-0.32000008225440979</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Soldier%27s%20legacy.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Soldier%27s%20legacy.xml new file mode 100644 index 0000000..9b93f3a --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Soldier%27s%20legacy.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.040000002831220627</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.32999998331069946</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.62999999523162842</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3</real> | ||
12 | <real>3.1000001430511475</real> | ||
13 | <real>3.2000000476837158</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>0297ce61-77f8-581e-b19d-2509881463e8</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.14999999105930328</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.1803436279296875</real> | ||
24 | <real>0.2337188720703125</real> | ||
25 | <real>0.19869136810302734</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>64</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-1.6800000667572021</real> | ||
33 | <real>-1.6800000667572021</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.46999990940093994</real> | ||
38 | <real>0.31999990344047546</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Subtleties.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Subtleties.xml new file mode 100644 index 0000000..e8b730d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Subtleties.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0040000001899898052</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.47999998927116394</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.32999998331069946</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>1.2000000476837158</real> | ||
12 | <real>1.3000000715255737</real> | ||
13 | <real>1.3999999761581421</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.079999998211860657</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.15999999642372131</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.065683603286743164</real> | ||
24 | <real>0.41682437062263489</real> | ||
25 | <real>0.52431637048721313</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>5.6568551063537598</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>0.45999988913536072</real> | ||
33 | <real>-0.18000008165836334</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-0.260000079870224</real> | ||
38 | <real>-0.69000005722045898</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Trandshan.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Trandshan.xml new file mode 100644 index 0000000..d0211b6 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Trandshan.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.069000005722045898</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.59999996423721313</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.41999998688697815</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>2</real> | ||
12 | <real>1</real> | ||
13 | <real>2</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.11999999731779099</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.28999999165534973</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>0.5</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>12.125733375549316</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-0.84000009298324585</real> | ||
33 | <real>-0.95000004768371582</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-2</real> | ||
38 | <real>-1.0500000715255737</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Watermelon%20juice.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Watermelon%20juice.xml new file mode 100644 index 0000000..b6413a9 --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Watermelon%20juice.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0050000003539025784</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.43999999761581421</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.14000000059604645</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3</real> | ||
12 | <real>3</real> | ||
13 | <real>3</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.14000000059604645</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.2800000011920929</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>1</real> | ||
24 | <real>0</real> | ||
25 | <real>0.5</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>21.112127304077148</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>0.43999990820884705</real> | ||
33 | <real>0.43999990820884705</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.43999990820884705</real> | ||
38 | <real>0.43999990820884705</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Waterslides.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Waterslides.xml new file mode 100644 index 0000000..097748d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Waterslides.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.0040000001899898052</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.59999996423721313</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.64999997615814209</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>2</real> | ||
12 | <real>4</real> | ||
13 | <real>8</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.079999998211860657</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0</real> | ||
24 | <real>1</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>2.1435470581054687</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-2</real> | ||
33 | <real>-2</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.99999988079071045</real> | ||
38 | <real>0.99999988079071045</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20What%27s%20on%20TV.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20What%27s%20on%20TV.xml new file mode 100644 index 0000000..beed3cc --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20What%27s%20on%20TV.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.040000002831220627</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>1</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>10</real> | ||
12 | <real>5</real> | ||
13 | <real>2.5</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>22229d16-3871-7dee-2042-dbfa25cd8bce</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.039999999105930328</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.039999999105930328</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.5</real> | ||
24 | <real>0.5</real> | ||
25 | <real>1</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>0.26794338226318359</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>3.9999997615814209</real> | ||
33 | <real>-8.9406967163085938e-008</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>-4</real> | ||
38 | <real>-8.9406967163085938e-008</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Wickedly.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Wickedly.xml new file mode 100644 index 0000000..510614c --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Wickedly.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>1</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>0</real> | ||
12 | <real>0</real> | ||
13 | <real>0</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>cb51029b-360b-81e6-a3e1-5620c44e0b71</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.50999999046325684</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.099999994039535522</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0.5</real> | ||
26 | <real>0</real> | ||
27 | <real>1</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>25.992082595825195</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-2.3900001049041748</real> | ||
35 | <real>-1.8900001049041748</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-1.3300000429153442</real> | ||
40 | <real>-1.0000001192092896</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20You%27re%20in%20luck.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20You%27re%20in%20luck.xml new file mode 100644 index 0000000..72fe40d --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20You%27re%20in%20luck.xml | |||
@@ -0,0 +1,41 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.50999999046325684</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.48999997973442078</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3</real> | ||
12 | <real>2.9000000953674316</real> | ||
13 | <real>2.7999999523162842</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>822ded49-9a6c-f61c-cb89-6df54f42cdf4</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0.099999994039535522</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0.099999994039535522</real> | ||
21 | <key>waterFogColor</key> | ||
22 | <array> | ||
23 | <real>0.63937491178512573</real> | ||
24 | <real>0.65999996662139893</real> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | </array> | ||
28 | <key>waterFogDensity</key> | ||
29 | <real>6.4980192184448242</real> | ||
30 | <key>wave1Dir</key> | ||
31 | <array> | ||
32 | <real>-8.9406967163085938e-008</real> | ||
33 | <real>0.099999904632568359</real> | ||
34 | </array> | ||
35 | <key>wave2Dir</key> | ||
36 | <array> | ||
37 | <real>0.19999989867210388</real> | ||
38 | <real>0.2999998927116394</real> | ||
39 | </array> | ||
40 | </map> | ||
41 | </llsd> | ||
diff --git a/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Yung%20buk.xml b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Yung%20buk.xml new file mode 100644 index 0000000..2067b7c --- /dev/null +++ b/linden/indra/newview/app_settings/windlight/water/%5BTOR%5D%20Yung%20buk.xml | |||
@@ -0,0 +1,43 @@ | |||
1 | <llsd> | ||
2 | <map> | ||
3 | <key>blurMultiplier</key> | ||
4 | <real>0.048000000417232513</real> | ||
5 | <key>fresnelOffset</key> | ||
6 | <real>0.72999995946884155</real> | ||
7 | <key>fresnelScale</key> | ||
8 | <real>0.26999998092651367</real> | ||
9 | <key>normScale</key> | ||
10 | <array> | ||
11 | <real>3.1000001430511475</real> | ||
12 | <real>2.6000001430511475</real> | ||
13 | <real>2.7000000476837158</real> | ||
14 | </array> | ||
15 | <key>normalMap</key> | ||
16 | <uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid> | ||
17 | <key>scaleAbove</key> | ||
18 | <real>0</real> | ||
19 | <key>scaleBelow</key> | ||
20 | <real>0</real> | ||
21 | <key>underWaterFogMod</key> | ||
22 | <real>0</real> | ||
23 | <key>waterFogColor</key> | ||
24 | <array> | ||
25 | <real>0</real> | ||
26 | <real>1</real> | ||
27 | <real>0.5</real> | ||
28 | <real>1</real> | ||
29 | </array> | ||
30 | <key>waterFogDensity</key> | ||
31 | <real>4</real> | ||
32 | <key>wave1Dir</key> | ||
33 | <array> | ||
34 | <real>-0.010000089183449745</real> | ||
35 | <real>-8.9406967163085938e-008</real> | ||
36 | </array> | ||
37 | <key>wave2Dir</key> | ||
38 | <array> | ||
39 | <real>-8.9406967163085938e-008</real> | ||
40 | <real>0.009999910369515419</real> | ||
41 | </array> | ||
42 | </map> | ||
43 | </llsd> | ||
diff --git a/linden/indra/newview/floaterlogin.cpp b/linden/indra/newview/floaterlogin.cpp new file mode 100644 index 0000000..f1afc53 --- /dev/null +++ b/linden/indra/newview/floaterlogin.cpp | |||
@@ -0,0 +1,723 @@ | |||
1 | /* | ||
2 | * floaterlogin.cpp (floatergridmanager.cpp pls) | ||
3 | * This is Meerkats grid manager, and I accidentally finished it with the wrong name :) | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | */ | ||
6 | |||
7 | #include "llviewerprecompiledheaders.h" | ||
8 | |||
9 | #include <boost/algorithm/string.hpp> | ||
10 | #include "llviewercontrol.h" | ||
11 | #include "llviewerbuild.h" | ||
12 | #include "llcombobox.h" | ||
13 | #include "llscrolllistctrl.h" | ||
14 | #include "llmd5.h" | ||
15 | #include "llurlsimstring.h" | ||
16 | #include "lluictrlfactory.h" | ||
17 | #include "floaterlogin.h" | ||
18 | #include "hippoGridManager.h" | ||
19 | #include "llviewernetwork.h" | ||
20 | #include "llpanellogin.h" | ||
21 | |||
22 | #define PASSWORD_FILLER "123456789!123456" | ||
23 | |||
24 | LoginFloater* LoginFloater::sInstance = NULL; | ||
25 | LoginController* LoginFloater::sController = NULL; | ||
26 | bool LoginFloater::sIsInitialLogin; | ||
27 | std::string LoginFloater::sGrid; | ||
28 | |||
29 | LoginFloater::LoginFloater() | ||
30 | : LLFloater("floater_login") | ||
31 | { | ||
32 | |||
33 | mState = NORMAL; | ||
34 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_login.xml"); | ||
35 | |||
36 | |||
37 | llwarns << "LoginFloater called" << llendl; | ||
38 | |||
39 | |||
40 | // configure the floater interface for non-initial login | ||
41 | setCanMinimize(!sIsInitialLogin); | ||
42 | setCanClose(!sIsInitialLogin); | ||
43 | setCanDrag(!sIsInitialLogin); | ||
44 | childSetVisible("server_combo", sIsInitialLogin); | ||
45 | |||
46 | if(!sIsInitialLogin) | ||
47 | { | ||
48 | LLButton* quit_btn = getChild<LLButton>("quit_btn"); | ||
49 | quit_btn->setLabel(std::string("Cancel")); | ||
50 | setTitle(std::string("Grid Manager")); | ||
51 | } | ||
52 | |||
53 | center(); | ||
54 | LLLineEditor* edit = getChild<LLLineEditor>("avatar_password_edit"); | ||
55 | if (edit) edit->setDrawAsterixes(TRUE); | ||
56 | LLComboBox* combo = getChild<LLComboBox>("start_location_combo"); | ||
57 | combo->setAllowTextEntry(TRUE, 128, FALSE); | ||
58 | |||
59 | BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); | ||
60 | std::string sim_string = LLURLSimString::sInstance.mSimString; | ||
61 | if (!sim_string.empty()) | ||
62 | { | ||
63 | // Replace "<Type region name>" with this region name | ||
64 | combo->remove(2); | ||
65 | combo->add( sim_string ); | ||
66 | combo->setTextEntry(sim_string); | ||
67 | combo->setCurrentByIndex( 2 ); | ||
68 | } | ||
69 | else if (login_last) | ||
70 | { | ||
71 | combo->setCurrentByIndex( 1 ); | ||
72 | } | ||
73 | else | ||
74 | { | ||
75 | combo->setCurrentByIndex( 0 ); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | |||
80 | LoginFloater::~LoginFloater() | ||
81 | { | ||
82 | LoginFloater::sController = NULL; | ||
83 | LoginFloater::sInstance = NULL; | ||
84 | } | ||
85 | |||
86 | void LoginFloater::close() | ||
87 | { | ||
88 | if(sInstance) | ||
89 | { | ||
90 | delete sInstance; | ||
91 | sInstance = NULL; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | BOOL LoginFloater::postBuild() | ||
96 | { | ||
97 | requires<LLScrollListCtrl>("grid_selector"); | ||
98 | requires<LLLineEditor>("gridnick"); | ||
99 | requires<LLLineEditor>("gridname"); | ||
100 | requires<LLLineEditor>("loginuri"); | ||
101 | requires<LLLineEditor>("loginpage"); | ||
102 | requires<LLLineEditor>("helperuri"); | ||
103 | requires<LLLineEditor>("website"); | ||
104 | requires<LLLineEditor>("support"); | ||
105 | requires<LLLineEditor>("register"); | ||
106 | requires<LLLineEditor>("password"); | ||
107 | requires<LLLineEditor>("first_name"); | ||
108 | requires<LLLineEditor>("last_name"); | ||
109 | requires<LLLineEditor>("avatar_password"); | ||
110 | //requires<LLLineEditor>("search"); | ||
111 | requires<LLButton>("btn_delete"); | ||
112 | requires<LLButton>("btn_add"); | ||
113 | requires<LLButton>("btn_copy"); | ||
114 | requires<LLButton>("set_default"); | ||
115 | requires<LLButton>("btn_gridinfo"); | ||
116 | requires<LLButton>("btn_help_render_compat"); | ||
117 | if (!checkRequirements()) return false; | ||
118 | LLLineEditor* password_edit = getChild<LLLineEditor>("avatar_password"); | ||
119 | if (password_edit) password_edit->setDrawAsterixes(TRUE); | ||
120 | |||
121 | childSetAction("btn_delete", onClickDelete, this); | ||
122 | childSetAction("btn_add", onClickAdd, this); | ||
123 | childSetAction("btn_copy", onClickCopy, this); | ||
124 | childSetAction("btn_ok", onClickOk, this); | ||
125 | childSetAction("btn_apply", onClickApply, this); | ||
126 | // childSetAction("set_default", onClickDefault, this); | ||
127 | childSetAction("btn_cancel", onClickCancel, this); | ||
128 | childSetAction("btn_gridinfo", onClickGridInfo, this); | ||
129 | // childSetAction("btn_help_render_compat", onClickHelpRenderCompat, this); | ||
130 | |||
131 | childSetCommitCallback("grid_selector", onSelectGrid, this); | ||
132 | //KOW childSetCommitCallback("platform", onSelectPlatform, this); | ||
133 | |||
134 | // !!!### server_choice_combo->setFocusLostCallback(onServerComboLostFocus); | ||
135 | |||
136 | //KOW update(); | ||
137 | return TRUE; | ||
138 | } | ||
139 | |||
140 | void LoginFloater::refresh_grids() | ||
141 | { | ||
142 | const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); | ||
143 | LLScrollListCtrl *grids = sInstance->getChild<LLScrollListCtrl>("grid_selector"); | ||
144 | S32 selectIndex = -1, i = 0; | ||
145 | grids->deleteAllItems(); | ||
146 | if (defaultGrid != "") { | ||
147 | LLSD value; | ||
148 | value["id"] = defaultGrid; | ||
149 | value["columns"][0]["column"] = "grid"; | ||
150 | value["columns"][0]["value"] = defaultGrid; | ||
151 | grids->addElement(value); | ||
152 | selectIndex = i++; | ||
153 | } | ||
154 | |||
155 | HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid(); | ||
156 | for (it = gHippoGridManager->beginGrid(); it != end; ++it) { | ||
157 | const std::string &grid = it->second->getGridNick(); | ||
158 | if (grid != defaultGrid) { | ||
159 | LLSD value; | ||
160 | value["id"] = grid; | ||
161 | value["columns"][0]["column"] = "grid"; | ||
162 | value["columns"][0]["value"] = grid; | ||
163 | grids->addElement(value); | ||
164 | |||
165 | if (grid == sInstance->mCurGrid) selectIndex = i; | ||
166 | i++; | ||
167 | } | ||
168 | } | ||
169 | if ((sInstance->mState == ADD_NEW) || (sInstance->mState == ADD_COPY)) { | ||
170 | grids->addElement("<new>"); | ||
171 | selectIndex = i++; | ||
172 | } | ||
173 | if (selectIndex >= 0) { | ||
174 | //grids->setCurrentByIndex(selectIndex); | ||
175 | } else { | ||
176 | //grids->setLabel(LLStringExplicit("")); // LLComboBox::removeall() does not clear the label | ||
177 | } | ||
178 | |||
179 | // sInstance->childSetTextArg("default_grid", "[DEFAULT]", (defaultGrid != "")? defaultGrid: " "); | ||
180 | |||
181 | sInstance->childSetEnabled("btn_delete", (selectIndex >= 0)); | ||
182 | sInstance->childSetEnabled("btn_copy", (sInstance->mState == NORMAL) && (selectIndex >= 0)); | ||
183 | // sInstance->childSetEnabled("set_default", (sInstance->mState == NORMAL) && (selectIndex > 0)); | ||
184 | sInstance->childSetEnabled("gridnick", (sInstance->mState == ADD_NEW) || (sInstance->mState == ADD_COPY)); | ||
185 | |||
186 | if (sInstance->mState == NORMAL) { | ||
187 | HippoGridInfo *gridInfo = gHippoGridManager->getGrid(sInstance->mCurGrid); | ||
188 | if (gridInfo) { | ||
189 | sInstance->childSetText("gridnick", gridInfo->getGridNick()); | ||
190 | //sInstance->childSetText("grid_name", gridInfo->getGridName()); | ||
191 | sInstance->childSetText("loginuri", gridInfo->getLoginUri()); | ||
192 | sInstance->childSetText("loginpage", gridInfo->getLoginPage()); | ||
193 | sInstance->childSetText("helperuri", gridInfo->getHelperUri()); | ||
194 | sInstance->childSetText("website", gridInfo->getWebSite()); | ||
195 | sInstance->childSetText("support", gridInfo->getSupportUrl()); | ||
196 | sInstance->childSetText("register", gridInfo->getRegisterUrl()); | ||
197 | sInstance->childSetText("password", gridInfo->getPasswordUrl()); | ||
198 | |||
199 | // sInstance->childSetText("first_name", gridInfo->getFirstName()); | ||
200 | // sInstance->childSetText("last_name", gridInfo->getLastName()); | ||
201 | // if(gridInfo->getAvatarPassword().length() == 32) | ||
202 | // sInstance->childSetText("avatar_password", std::string(PASSWORD_FILLER)); | ||
203 | // else if(gridInfo->getPasswordUrl().empty()) | ||
204 | // sInstance->childSetText("avatar_password", std::string("")); | ||
205 | |||
206 | // if (gridInfo->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) { | ||
207 | // //childSetEnabled("search", false); | ||
208 | // //childSetText("search", LLStringExplicit("")); | ||
209 | // childSetEnabled("render_compat", false); | ||
210 | // childSetValue("render_compat", false); | ||
211 | // } else { | ||
212 | // //childSetEnabled("search", true); | ||
213 | // //childSetText("search", gridInfo->getSearchUrl()); | ||
214 | // childSetEnabled("render_compat", true); | ||
215 | // childSetValue("render_compat", gridInfo->isRenderCompat()); | ||
216 | // } | ||
217 | |||
218 | } else { | ||
219 | std::string empty = ""; | ||
220 | sInstance->childSetText("gridnick", empty); | ||
221 | sInstance->childSetText("gridname", empty); | ||
222 | sInstance->childSetText("loginuri", empty); | ||
223 | sInstance->childSetText("loginpage", empty); | ||
224 | sInstance->childSetText("helperuri", empty); | ||
225 | sInstance->childSetText("website", empty); | ||
226 | // sInstance->childSetText("first_name", empty); | ||
227 | // sInstance->childSetText("last_name", empty); | ||
228 | // sInstance->childSetText("avatar_password", empty); | ||
229 | } | ||
230 | } else if (sInstance->mState == ADD_NEW) { | ||
231 | llwarns << "ADD_NEW" << llendl; | ||
232 | std::string required = "<required>"; | ||
233 | std::string empty = ""; | ||
234 | sInstance->childSetText("gridnick", required); | ||
235 | sInstance->childSetText("gridname", empty); | ||
236 | sInstance->childSetText("loginuri", required); | ||
237 | sInstance->childSetText("loginpage", empty); | ||
238 | sInstance->childSetText("helperuri", empty); | ||
239 | sInstance->childSetText("website", empty); | ||
240 | sInstance->childSetText("support", empty); | ||
241 | sInstance->childSetText("register", empty); | ||
242 | sInstance->childSetText("password", empty); | ||
243 | // sInstance->childSetText("first_name", empty); | ||
244 | // sInstance->childSetText("last_name", empty); | ||
245 | // sInstance->childSetText("avatar_password", empty); | ||
246 | //childSetEnabled("search", true); | ||
247 | //childSetText("search", empty); | ||
248 | } else if (sInstance->mState == ADD_COPY) { | ||
249 | llwarns << "ADD_COPY" << llendl; | ||
250 | sInstance->childSetText("gridnick", LLStringExplicit("<required>")); | ||
251 | } else { | ||
252 | llwarns << "Illegal state " << sInstance->mState << '.' << llendl; | ||
253 | } | ||
254 | return; | ||
255 | } | ||
256 | |||
257 | void LoginFloater::update() | ||
258 | { | ||
259 | mState = NORMAL; | ||
260 | mCurGrid = gHippoGridManager->getCurrentGridNick(); | ||
261 | refresh_grids(); | ||
262 | //KOW gHippoLimits->setLimits(); | ||
263 | } | ||
264 | |||
265 | void LoginFloater::applyChanges() | ||
266 | { | ||
267 | HippoGridInfo *gridInfo = gHippoGridManager->getGrid(mCurGrid); | ||
268 | if (gridInfo) | ||
269 | { | ||
270 | if (gridInfo->getGridNick() == childGetValue("gridnick").asString()) | ||
271 | { | ||
272 | gridInfo->setGridName(childGetValue("gridname")); | ||
273 | gridInfo->setLoginUri(childGetValue("loginuri")); | ||
274 | gridInfo->setLoginPage(childGetValue("loginpage")); | ||
275 | gridInfo->setHelperUri(childGetValue("helperuri")); | ||
276 | gridInfo->setWebSite(childGetValue("website")); | ||
277 | gridInfo->setSupportUrl(childGetValue("support")); | ||
278 | gridInfo->setRegisterUrl(childGetValue("register")); | ||
279 | gridInfo->setPasswordUrl(childGetValue("password")); | ||
280 | //gridInfo->setSearchUrl(childGetValue("search")); | ||
281 | gridInfo->setRenderCompat(childGetValue("render_compat")); | ||
282 | |||
283 | // gridInfo->setFirstName(childGetValue("first_name")); | ||
284 | // gridInfo->setLastName(childGetValue("last_name")); | ||
285 | // if(childGetValue("avatar_password").asString().empty()) | ||
286 | // gridInfo->setAvatarPassword(std::string("")); | ||
287 | // else if(childGetValue("avatar_password").asString() != std::string(PASSWORD_FILLER)) | ||
288 | // { | ||
289 | // // store account authentication data | ||
290 | // std::string auth_password = childGetValue("avatar_password"); | ||
291 | // std::string hashed_password; | ||
292 | // hashPassword(auth_password, hashed_password); | ||
293 | // gridInfo->setAvatarPassword(hashed_password); | ||
294 | // } | ||
295 | |||
296 | //this bug was a feature -Patrick Sapinski (Friday, August 21, 2009) | ||
297 | //LLPanelLogin::setFields(gridInfo->getFirstName(), gridInfo->getLastName(), | ||
298 | // gridInfo->getAvatarPassword(), true); | ||
299 | } | ||
300 | else | ||
301 | { | ||
302 | llwarns << "Grid nickname mismatch, ignoring changes." << llendl; | ||
303 | } | ||
304 | } | ||
305 | } | ||
306 | |||
307 | |||
308 | bool LoginFloater::createNewGrid() | ||
309 | { | ||
310 | // check nickname | ||
311 | std::string gridnick = childGetValue("gridnick"); | ||
312 | if (gridnick == "<required>") gridnick = ""; | ||
313 | if (gridnick == "") { | ||
314 | //KOW gViewerWindow->alertXml("GridsNoNick"); | ||
315 | return false; | ||
316 | } | ||
317 | if (gHippoGridManager->getGrid(gridnick)) { | ||
318 | LLStringUtil::format_map_t args; | ||
319 | args["[NAME]"] = gridnick; | ||
320 | //KOW gViewerWindow->alertXml("GridExists", args); | ||
321 | return false; | ||
322 | } | ||
323 | |||
324 | // check login URI | ||
325 | std::string loginuri = childGetValue("loginuri"); | ||
326 | if ((loginuri == "") || (loginuri == "<required>")) { | ||
327 | LLStringUtil::format_map_t args; | ||
328 | args["[NAME]"] = gridnick; | ||
329 | //KOW gViewerWindow->alertXml("GridsNoLoginUri", args); | ||
330 | return false; | ||
331 | } | ||
332 | |||
333 | // create new grid | ||
334 | HippoGridInfo *grid = new HippoGridInfo(gridnick); | ||
335 | grid->setGridName(childGetValue("gridname")); | ||
336 | grid->setLoginUri(loginuri); | ||
337 | grid->setLoginPage(childGetValue("loginpage")); | ||
338 | grid->setHelperUri(childGetValue("helperuri")); | ||
339 | grid->setWebSite(childGetValue("website")); | ||
340 | grid->setSupportUrl(childGetValue("support")); | ||
341 | grid->setRegisterUrl(childGetValue("register")); | ||
342 | grid->setPasswordUrl(childGetValue("password")); | ||
343 | //grid->setSearchUrl(childGetValue("search")); | ||
344 | grid->setRenderCompat(childGetValue("render_compat")); | ||
345 | gHippoGridManager->addGrid(grid); | ||
346 | |||
347 | // grid->setFirstName(childGetValue("first_name")); | ||
348 | // grid->setLastName(childGetValue("last_name")); | ||
349 | // if(childGetValue("avatar_password").asString().empty()) | ||
350 | // grid->setAvatarPassword(std::string("")); | ||
351 | // else | ||
352 | // { | ||
353 | // std::string hashed_password; | ||
354 | // hashPassword(childGetValue("avatar_password"), hashed_password); | ||
355 | // grid->setAvatarPassword(hashed_password); | ||
356 | // } | ||
357 | |||
358 | mCurGrid = gridnick; | ||
359 | return true; | ||
360 | } | ||
361 | |||
362 | void LoginFloater::retrieveGridInfo() | ||
363 | { | ||
364 | std::string loginuri = childGetValue("loginuri"); | ||
365 | if ((loginuri == "") || (loginuri == "<required>")) { | ||
366 | //KOW gViewerWindow->alertXml("GridInfoNoLoginUri"); | ||
367 | return; | ||
368 | } | ||
369 | |||
370 | HippoGridInfo *grid = 0; | ||
371 | bool cleanupGrid = false; | ||
372 | if (mState == NORMAL) { | ||
373 | grid = gHippoGridManager->getGrid(mCurGrid); | ||
374 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
375 | grid = new HippoGridInfo(""); | ||
376 | cleanupGrid = true; | ||
377 | } else { | ||
378 | llerrs << "Illegal state " << mState << '.' << llendl; | ||
379 | return; | ||
380 | } | ||
381 | if (!grid) { | ||
382 | llerrs << "Internal error retrieving grid info." << llendl; | ||
383 | return; | ||
384 | } | ||
385 | |||
386 | grid->setLoginUri(loginuri); | ||
387 | if (grid->retrieveGridInfo()) { | ||
388 | if (grid->getGridNick() != "") childSetText("gridnick", grid->getGridNick()); | ||
389 | if (grid->getGridName() != "") childSetText("gridname", grid->getGridName()); | ||
390 | if (grid->getLoginUri() != "") childSetText("loginuri", grid->getLoginUri()); | ||
391 | if (grid->getLoginPage() != "") childSetText("loginpage", grid->getLoginPage()); | ||
392 | if (grid->getHelperUri() != "") childSetText("helperuri", grid->getHelperUri()); | ||
393 | if (grid->getWebSite() != "") childSetText("website", grid->getWebSite()); | ||
394 | if (grid->getSupportUrl() != "") childSetText("support", grid->getSupportUrl()); | ||
395 | if (grid->getRegisterUrl() != "") childSetText("register", grid->getRegisterUrl()); | ||
396 | if (grid->getPasswordUrl() != "") childSetText("password", grid->getPasswordUrl()); | ||
397 | //if (grid->getSearchUrl() != "") childSetText("search", grid->getSearchUrl()); | ||
398 | } else { | ||
399 | //KOW gViewerWindow->alertXml("GridInfoError"); | ||
400 | } | ||
401 | |||
402 | if (cleanupGrid) delete grid; | ||
403 | } | ||
404 | |||
405 | void LoginFloater::apply() | ||
406 | { | ||
407 | if (mState == NORMAL) { | ||
408 | applyChanges(); | ||
409 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
410 | if (!createNewGrid()) return; | ||
411 | } else { | ||
412 | llwarns << "Illegal state " << mState << '.' << llendl; | ||
413 | return; | ||
414 | } | ||
415 | //gHippoGridManager->setCurrentGrid(mCurGrid); | ||
416 | //gHippoGridManager->setDefaultGrid(mCurGrid); | ||
417 | //LLPanelLogin::refreshLoginPage(); | ||
418 | gHippoGridManager->saveFile(); | ||
419 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
420 | } | ||
421 | |||
422 | void LoginFloater::setDefault() | ||
423 | { | ||
424 | if (mState == NORMAL) { | ||
425 | applyChanges(); | ||
426 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
427 | if (!createNewGrid()) return; | ||
428 | } else { | ||
429 | llwarns << "Illegal state " << mState << '.' << llendl; | ||
430 | return; | ||
431 | } | ||
432 | gHippoGridManager->setCurrentGrid(mCurGrid); | ||
433 | gHippoGridManager->setDefaultGrid(mCurGrid); | ||
434 | gHippoGridManager->saveFile(); | ||
435 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
436 | } | ||
437 | |||
438 | void LoginFloater::cancel() | ||
439 | { | ||
440 | gHippoGridManager->discardAndReload(); | ||
441 | update(); | ||
442 | } | ||
443 | |||
444 | void LoginFloater::onSelectGrid(LLUICtrl* ctrl, void *data) | ||
445 | { | ||
446 | LoginFloater* self = (LoginFloater*)data; | ||
447 | if (self->mState == NORMAL) { | ||
448 | self->applyChanges(); | ||
449 | } else if ((self->mState == ADD_NEW) || (self->mState == ADD_COPY)) { | ||
450 | if (self->createNewGrid()) { | ||
451 | self->mState = NORMAL; | ||
452 | } else { | ||
453 | //LLScrollListCtrl *grids = self->getChild<LLScrollListCtrl>("grid_selector"); | ||
454 | //grids->setCurrentByIndex(grids->getItemCount() - 1); | ||
455 | return; | ||
456 | } | ||
457 | } else { | ||
458 | llwarns << "Illegal state " << self->mState << '.' << llendl; | ||
459 | return; | ||
460 | } | ||
461 | self->mCurGrid = ctrl->getValue().asString(); | ||
462 | self->refresh_grids(); | ||
463 | } | ||
464 | |||
465 | //static | ||
466 | void LoginFloater::onClickDelete(void *data) | ||
467 | { | ||
468 | llwarns << "onclickdelete" << llendl; | ||
469 | LoginFloater* self = (LoginFloater*)data; | ||
470 | if (self->mState == NORMAL) | ||
471 | gHippoGridManager->deleteGrid(self->mCurGrid); | ||
472 | self->update(); | ||
473 | } | ||
474 | |||
475 | //static | ||
476 | void LoginFloater::onClickAdd(void *data) | ||
477 | { | ||
478 | llwarns << "add" << llendl; | ||
479 | LoginFloater* self = (LoginFloater*)data; | ||
480 | self->mState = ADD_NEW; | ||
481 | self->refresh_grids(); | ||
482 | } | ||
483 | |||
484 | |||
485 | //static | ||
486 | void LoginFloater::onClickCopy(void *data) | ||
487 | { | ||
488 | llwarns << "copy" << llendl; | ||
489 | LoginFloater* self = (LoginFloater*)data; | ||
490 | self->mState = ADD_COPY; | ||
491 | self->refresh_grids(); | ||
492 | } | ||
493 | |||
494 | // static | ||
495 | void LoginFloater::onClickOk(void* data) | ||
496 | { | ||
497 | if(NULL==sInstance) | ||
498 | return; | ||
499 | |||
500 | sInstance->apply(); | ||
501 | sInstance->close(); | ||
502 | } | ||
503 | |||
504 | //static | ||
505 | void LoginFloater::onClickApply(void *data) | ||
506 | { | ||
507 | if(NULL==sInstance) | ||
508 | return; | ||
509 | |||
510 | sInstance->apply(); | ||
511 | refresh_grids(); | ||
512 | } | ||
513 | |||
514 | //static | ||
515 | void LoginFloater::onClickDefault(void *data) | ||
516 | { | ||
517 | sInstance->setDefault(); | ||
518 | sInstance->refresh_grids(); | ||
519 | } | ||
520 | |||
521 | //static | ||
522 | void LoginFloater::onClickGridInfo(void *data) | ||
523 | { | ||
524 | //HippoPanelGrids* self = (HippoPanelGrids*)data; | ||
525 | sInstance->retrieveGridInfo(); | ||
526 | } | ||
527 | |||
528 | //static | ||
529 | void LoginFloater::onClickCancel(void *data) | ||
530 | { | ||
531 | sInstance->cancel(); | ||
532 | } | ||
533 | |||
534 | void LoginFloater::setAlwaysRefresh(bool refresh) | ||
535 | { | ||
536 | // wargames 2: dead code, LLPanelLogin compatibility | ||
537 | return; | ||
538 | } | ||
539 | |||
540 | void LoginFloater::refreshLocation( bool force_visible ) | ||
541 | { | ||
542 | |||
543 | llwarns << "refreshLocation called" << llendl; | ||
544 | |||
545 | if (!sInstance) return; | ||
546 | |||
547 | LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); | ||
548 | |||
549 | if (LLURLSimString::parse()) | ||
550 | { | ||
551 | combo->setCurrentByIndex( 3 ); // BUG? Maybe 2? | ||
552 | combo->setTextEntry(LLURLSimString::sInstance.mSimString); | ||
553 | } | ||
554 | else | ||
555 | { | ||
556 | BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); | ||
557 | combo->setCurrentByIndex( login_last ? 1 : 0 ); | ||
558 | } | ||
559 | |||
560 | BOOL show_start = TRUE; | ||
561 | |||
562 | if ( ! force_visible ) | ||
563 | show_start = gSavedSettings.getBOOL("ShowStartLocation"); | ||
564 | |||
565 | sInstance->childSetVisible("start_location_combo", show_start); | ||
566 | sInstance->childSetVisible("start_location_text", show_start); | ||
567 | sInstance->childSetVisible("server_combo", TRUE); | ||
568 | } | ||
569 | |||
570 | void LoginFloater::newShow(const std::string &grid, bool initialLogin) | ||
571 | { | ||
572 | |||
573 | llwarns << "newShow called" << llendl; | ||
574 | if(NULL==sInstance) | ||
575 | { | ||
576 | LoginFloater::sGrid = grid; | ||
577 | LoginFloater::sIsInitialLogin = initialLogin; | ||
578 | sInstance = new LoginFloater(); | ||
579 | |||
580 | llwarns << "sInstance assigned. sInstance=" << sInstance << llendl; | ||
581 | } | ||
582 | |||
583 | llwarns << "newshow called" << llendl; | ||
584 | sInstance->mCurGrid = gHippoGridManager->getCurrentGridNick(); | ||
585 | refresh_grids(); | ||
586 | |||
587 | sInstance->open(); /*Flawfinder: ignore*/ | ||
588 | // we're important | ||
589 | //sInstance->setFrontmost(TRUE); | ||
590 | //sInstance->setFocus(TRUE); | ||
591 | |||
592 | } | ||
593 | |||
594 | void LoginFloater::show(const LLRect &rect, BOOL show_server, | ||
595 | void (*callback)(S32 option, void* user_data), | ||
596 | void* callback_data) | ||
597 | { | ||
598 | // we don't need a grid passed in because this is old-style login | ||
599 | std::string grid = ""; | ||
600 | newShow(grid, TRUE); | ||
601 | } | ||
602 | |||
603 | void LoginFloater::setFocus(BOOL b) | ||
604 | { | ||
605 | if(b != hasFocus()) | ||
606 | { | ||
607 | if(b) | ||
608 | { | ||
609 | LoginFloater::giveFocus(); | ||
610 | } | ||
611 | else | ||
612 | { | ||
613 | LLPanel::setFocus(b); | ||
614 | } | ||
615 | } | ||
616 | } | ||
617 | |||
618 | void LoginFloater::giveFocus() | ||
619 | { | ||
620 | LLScrollListCtrl *combo = NULL; | ||
621 | |||
622 | if(NULL==sInstance) | ||
623 | { | ||
624 | llwarns << "giveFocus has no LoginFloater instance. sInstance=" << sInstance << llendl; | ||
625 | return; | ||
626 | } | ||
627 | |||
628 | // for our combo box approach, selecting the combo box is almost always | ||
629 | // the right thing to do on the floater receiving focus | ||
630 | combo = sInstance->getChild<LLScrollListCtrl>("grid_selector"); | ||
631 | combo->setFocus(TRUE); | ||
632 | } | ||
633 | |||
634 | BOOL LoginFloater::isGridComboDirty() | ||
635 | { | ||
636 | BOOL user_picked = FALSE; | ||
637 | if (!sInstance) | ||
638 | { | ||
639 | llwarns << "Attempted getServer with no login view shown" << llendl; | ||
640 | } | ||
641 | else | ||
642 | { | ||
643 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | ||
644 | user_picked = combo->isDirty(); | ||
645 | } | ||
646 | return user_picked; | ||
647 | } | ||
648 | |||
649 | void LoginFloater::getLocation(std::string &location) | ||
650 | { | ||
651 | if (!sInstance) | ||
652 | { | ||
653 | llwarns << "Attempted getLocation with no login view shown" << llendl; | ||
654 | return; | ||
655 | } | ||
656 | |||
657 | LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); | ||
658 | location = combo->getValue().asString(); | ||
659 | } | ||
660 | |||
661 | std::string& LoginFloater::getPassword() | ||
662 | { | ||
663 | return mMungedPassword; | ||
664 | } | ||
665 | |||
666 | void LoginFloater::setPassword(std::string &password) | ||
667 | { | ||
668 | mMungedPassword = password; | ||
669 | } | ||
670 | |||
671 | bool LoginFloater::isSamePassword(std::string &password) | ||
672 | { | ||
673 | return mMungedPassword == password; | ||
674 | } | ||
675 | |||
676 | void LoginFloater::addServer(const std::string& server, S32 domain_name) | ||
677 | { | ||
678 | if (!sInstance) | ||
679 | { | ||
680 | llwarns << "Attempted addServer with no login view shown" << llendl; | ||
681 | return; | ||
682 | } | ||
683 | |||
684 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | ||
685 | combo->add(server, LLSD(domain_name) ); | ||
686 | combo->setCurrentByIndex(0); | ||
687 | } | ||
688 | |||
689 | void LoginFloater::cancel_old() | ||
690 | { | ||
691 | if(NULL==sInstance) | ||
692 | return; | ||
693 | |||
694 | if(sInstance->sIsInitialLogin) | ||
695 | { | ||
696 | // send a callback that indicates we're quitting or closing | ||
697 | if(sInstance->mCallback) | ||
698 | sInstance->mCallback(LOGIN_OPTION_QUIT, sInstance->mCallbackData); | ||
699 | return; | ||
700 | } | ||
701 | |||
702 | sInstance->close(); | ||
703 | } | ||
704 | |||
705 | void LoginFloater::hashPassword(const std::string& password, std::string& hashedPassword) | ||
706 | { | ||
707 | // Max "actual" password length is 16 characters. | ||
708 | // Hex digests are always 32 characters. | ||
709 | if (password.length() == 32) | ||
710 | { | ||
711 | hashedPassword = password; | ||
712 | } | ||
713 | else | ||
714 | { | ||
715 | // this is a normal text password | ||
716 | LLMD5 pass((unsigned char *)password.c_str()); | ||
717 | char munged_password[MD5HEX_STR_SIZE]; | ||
718 | pass.hex_digest(munged_password); | ||
719 | hashedPassword = munged_password; | ||
720 | } | ||
721 | |||
722 | } | ||
723 | |||
diff --git a/linden/indra/newview/floaterlogin.h b/linden/indra/newview/floaterlogin.h new file mode 100644 index 0000000..cdb60b0 --- /dev/null +++ b/linden/indra/newview/floaterlogin.h | |||
@@ -0,0 +1,90 @@ | |||
1 | /* | ||
2 | * floaterlogin.h (floatergridmanager.h pls) | ||
3 | * This is Meerkats grid manager, and I accidentally finished it with the wrong name :) | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | */ | ||
6 | |||
7 | #ifndef PL_floaterlogin_H | ||
8 | #define PL_floaterlogin_H | ||
9 | |||
10 | #define LOGIN_OPTION_CONNECT 0 | ||
11 | #define LOGIN_OPTION_QUIT 1 | ||
12 | |||
13 | #include "llfloater.h" | ||
14 | |||
15 | class LoginController; | ||
16 | class AuthenticationModel; | ||
17 | |||
18 | class LoginFloater : public LLFloater | ||
19 | { | ||
20 | public: | ||
21 | LoginFloater(); | ||
22 | virtual ~LoginFloater(); | ||
23 | |||
24 | virtual BOOL postBuild(); | ||
25 | |||
26 | static void refresh_grids(); | ||
27 | void apply(); | ||
28 | void setDefault(); | ||
29 | void cancel(); | ||
30 | |||
31 | // new-style login methods | ||
32 | static void newShow(const std::string &grid, bool initialLogin); | ||
33 | virtual std::string& getPassword(); | ||
34 | virtual void setPassword(std::string &password); | ||
35 | virtual bool isSamePassword(std::string &password); | ||
36 | static void getFields(std::string &loginname, std::string &password, | ||
37 | BOOL &remember); | ||
38 | static void setFields(const std::string &loginname, const std::string &password, | ||
39 | BOOL remember); | ||
40 | |||
41 | // LLLoginPanel compatibility | ||
42 | //TODO: Make this not suck | ||
43 | static void show(const LLRect &rect, BOOL show_server, | ||
44 | void (*callback)(S32 option, void *user_data), | ||
45 | void *callback_data); | ||
46 | static void close(); | ||
47 | static void setAlwaysRefresh(bool refresh); | ||
48 | static void refreshLocation(bool force_visible); | ||
49 | virtual void setFocus(BOOL b); | ||
50 | static void giveFocus(); | ||
51 | static void getLocation(std::string &location); | ||
52 | static BOOL isGridComboDirty(); | ||
53 | static void addServer(const std::string& server, S32 domain_name); | ||
54 | static void cancel_old(); | ||
55 | static void hashPassword(const std::string& password, std::string& hashedPassword); | ||
56 | protected: | ||
57 | static bool sIsInitialLogin; | ||
58 | static std::string sGrid; | ||
59 | private: | ||
60 | enum State { NORMAL, ADD_NEW, ADD_COPY }; | ||
61 | State mState; | ||
62 | std::string mCurGrid; | ||
63 | |||
64 | std::string mIncomingPassword; | ||
65 | std::string mMungedPassword; | ||
66 | |||
67 | void applyChanges(); | ||
68 | bool createNewGrid(); | ||
69 | void update(); | ||
70 | void retrieveGridInfo(); | ||
71 | |||
72 | static void onSelectGrid(LLUICtrl *ctrl, void *data); | ||
73 | static void onClickDelete(void *data); | ||
74 | static void onClickAdd(void *data); | ||
75 | static void onClickCopy(void *data); | ||
76 | static void onClickOk(void *data); | ||
77 | static void onClickApply(void *data); | ||
78 | static void onClickDefault(void *data); | ||
79 | static void onClickGridInfo(void *data); | ||
80 | static void onClickCancel(void *data); | ||
81 | |||
82 | static LoginFloater *sInstance; | ||
83 | static LoginController *sController; | ||
84 | static AuthenticationModel *sModel; | ||
85 | |||
86 | void (*mCallback)(S32 option, void *userdata); | ||
87 | void *mCallbackData; | ||
88 | }; | ||
89 | |||
90 | #endif // PL_floaterlogin_H | ||
diff --git a/linden/indra/newview/gpu_table.txt b/linden/indra/newview/gpu_table.txt index 56de9c6..c08e2b5 100644 --- a/linden/indra/newview/gpu_table.txt +++ b/linden/indra/newview/gpu_table.txt | |||
@@ -162,7 +162,11 @@ Intel Montara .*Intel.*Montara.* 0 0 | |||
162 | Intel Springdale .*Intel.*Springdale.* 0 0 | 162 | Intel Springdale .*Intel.*Springdale.* 0 0 |
163 | Matrox .*Matrox.* 0 0 | 163 | Matrox .*Matrox.* 0 0 |
164 | Mesa .*Mesa.* 0 0 | 164 | Mesa .*Mesa.* 0 0 |
165 | NVIDIA GT 120 .*NVIDIA.*GeForce.*GT.*12.* 2 1 | ||
166 | NVIDIA GT 130 .*NVIDIA.*GeForce.*GT.*13.* 3 1 | ||
167 | NVIDIA GTS 250 .*NVIDIA.*GeForce.*GTS.*25.* 3 1 | ||
165 | NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*26.* 3 1 | 168 | NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*26.* 3 1 |
169 | NVIDIA GTX 270 .*NVIDIA.*GeForce.*GTX.*27.* 3 1 | ||
166 | NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*28.* 3 1 | 170 | NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*28.* 3 1 |
167 | NVIDIA GTX 290 .*NVIDIA.*GeForce.*GTX.*29.* 3 1 | 171 | NVIDIA GTX 290 .*NVIDIA.*GeForce.*GTX.*29.* 3 1 |
168 | NVIDIA C51 .*NVIDIA.*C51.* 0 1 | 172 | NVIDIA C51 .*NVIDIA.*C51.* 0 1 |
diff --git a/linden/indra/newview/hippoGridManager.cpp b/linden/indra/newview/hippoGridManager.cpp new file mode 100644 index 0000000..71e3a95 --- /dev/null +++ b/linden/indra/newview/hippoGridManager.cpp | |||
@@ -0,0 +1,819 @@ | |||
1 | |||
2 | |||
3 | #include "llviewerprecompiledheaders.h" | ||
4 | |||
5 | #include "hippoGridManager.h" | ||
6 | |||
7 | #include <cctype> | ||
8 | |||
9 | #include <stdtypes.h> | ||
10 | #include <lldir.h> | ||
11 | #include <lleconomy.h> | ||
12 | #include <llerror.h> | ||
13 | #include <llfile.h> | ||
14 | #include <llhttpclient.h> | ||
15 | #include <llsdserialize.h> | ||
16 | #include "llviewercontrol.h" | ||
17 | #include "llweb.h" | ||
18 | |||
19 | #include "hippoRestRequest.h" | ||
20 | |||
21 | |||
22 | // ******************************************************************** | ||
23 | // Global Variables | ||
24 | |||
25 | HippoGridManager *gHippoGridManager = 0; | ||
26 | |||
27 | HippoGridInfo HippoGridInfo::FALLBACK_GRIDINFO(""); | ||
28 | |||
29 | |||
30 | |||
31 | // ******************************************************************** | ||
32 | // ******************************************************************** | ||
33 | // HippoGridInfo | ||
34 | // ******************************************************************** | ||
35 | // ******************************************************************** | ||
36 | |||
37 | |||
38 | // ******************************************************************** | ||
39 | // Initialize | ||
40 | |||
41 | HippoGridInfo::HippoGridInfo(const std::string &gridNick) : | ||
42 | mPlatform(PLATFORM_OTHER), | ||
43 | mRenderCompat(true), | ||
44 | mCurrencySymbol("OS$"), | ||
45 | mRealCurrencySymbol("US$"), | ||
46 | mDirectoryFee(30) | ||
47 | { | ||
48 | std::string nick = gridNick; | ||
49 | mGridNick = sanitizeGridNick( nick ); | ||
50 | } | ||
51 | |||
52 | |||
53 | // ******************************************************************** | ||
54 | // Getters | ||
55 | |||
56 | HippoGridInfo::Platform HippoGridInfo::getPlatform() | ||
57 | { | ||
58 | return mPlatform; | ||
59 | } | ||
60 | |||
61 | bool HippoGridInfo::isOpenSimulator() const | ||
62 | { | ||
63 | return (mPlatform == HippoGridInfo::PLATFORM_OPENSIM); | ||
64 | } | ||
65 | |||
66 | bool HippoGridInfo::isSecondLife() const | ||
67 | { | ||
68 | return (mPlatform == HippoGridInfo::PLATFORM_SECONDLIFE); | ||
69 | } | ||
70 | |||
71 | const std::string& HippoGridInfo::getGridNick() const | ||
72 | { | ||
73 | return mGridNick; | ||
74 | } | ||
75 | |||
76 | const std::string& HippoGridInfo::getGridName() const | ||
77 | { | ||
78 | return mGridName; | ||
79 | } | ||
80 | |||
81 | const std::string& HippoGridInfo::getLoginUri() const | ||
82 | { | ||
83 | return mLoginUri; | ||
84 | } | ||
85 | |||
86 | const std::string& HippoGridInfo::getLoginPage() const | ||
87 | { | ||
88 | return mLoginPage; | ||
89 | } | ||
90 | |||
91 | const std::string& HippoGridInfo::getHelperUri() const | ||
92 | { | ||
93 | return mHelperUri; | ||
94 | } | ||
95 | |||
96 | const std::string& HippoGridInfo::getWebSite() const | ||
97 | { | ||
98 | return mWebSite; | ||
99 | } | ||
100 | |||
101 | const std::string& HippoGridInfo::getSupportUrl() const | ||
102 | { | ||
103 | return mSupportUrl; | ||
104 | } | ||
105 | |||
106 | const std::string& HippoGridInfo::getRegisterUrl() const | ||
107 | { | ||
108 | return mRegisterUrl; | ||
109 | } | ||
110 | |||
111 | const std::string& HippoGridInfo::getPasswordUrl() const | ||
112 | { | ||
113 | return mPasswordUrl; | ||
114 | } | ||
115 | |||
116 | const std::string& HippoGridInfo::getSearchUrl() const | ||
117 | { | ||
118 | return mSearchUrl; | ||
119 | } | ||
120 | |||
121 | const std::string& HippoGridInfo::getFirstName() const | ||
122 | { | ||
123 | return mFirstName; | ||
124 | } | ||
125 | |||
126 | const std::string& HippoGridInfo::getLastName() const | ||
127 | { | ||
128 | return mLastName; | ||
129 | } | ||
130 | |||
131 | const std::string& HippoGridInfo::getAvatarPassword() const | ||
132 | { | ||
133 | return mAvatarPassword; | ||
134 | } | ||
135 | |||
136 | bool HippoGridInfo::isRenderCompat() const | ||
137 | { | ||
138 | return mRenderCompat; | ||
139 | } | ||
140 | |||
141 | const std::string& HippoGridInfo::getCurrencySymbol() const | ||
142 | { | ||
143 | return mCurrencySymbol; | ||
144 | } | ||
145 | |||
146 | const std::string& HippoGridInfo::getRealCurrencySymbol() const | ||
147 | { | ||
148 | return mRealCurrencySymbol; | ||
149 | } | ||
150 | |||
151 | |||
152 | |||
153 | // ******************************************************************** | ||
154 | // Setters | ||
155 | |||
156 | void HippoGridInfo::setPlatform(Platform platform) | ||
157 | { | ||
158 | mPlatform = platform; | ||
159 | mCurrencySymbol = (mPlatform == PLATFORM_SECONDLIFE)? "L$": "OS$"; | ||
160 | } | ||
161 | |||
162 | |||
163 | void HippoGridInfo::setPlatform(const std::string &platform) | ||
164 | { | ||
165 | std::string tmp = platform; | ||
166 | for (unsigned i=0; i<platform.size(); i++) | ||
167 | tmp[i] = tolower(tmp[i]); | ||
168 | |||
169 | if (tmp == "opensim") { | ||
170 | setPlatform(PLATFORM_OPENSIM); | ||
171 | } else if (tmp == "secondlife") { | ||
172 | setPlatform(PLATFORM_SECONDLIFE); | ||
173 | } else { | ||
174 | setPlatform(PLATFORM_OTHER); | ||
175 | llwarns << "Unknown platform '" << platform << "'." << llendl; | ||
176 | } | ||
177 | } | ||
178 | |||
179 | void HippoGridInfo::setGridName(const std::string &gridName) | ||
180 | { | ||
181 | mGridName = gridName; | ||
182 | } | ||
183 | |||
184 | void HippoGridInfo::setLoginUri(const std::string &loginUri) | ||
185 | { | ||
186 | std::string uri = loginUri; | ||
187 | mLoginUri = sanitizeUri(uri); | ||
188 | } | ||
189 | |||
190 | void HippoGridInfo::setLoginPage(const std::string &loginPage) | ||
191 | { | ||
192 | mLoginPage = loginPage; | ||
193 | } | ||
194 | |||
195 | void HippoGridInfo::setHelperUri(const std::string &helperUri) | ||
196 | { | ||
197 | std::string uri = helperUri; | ||
198 | mHelperUri = sanitizeUri(uri); | ||
199 | } | ||
200 | |||
201 | void HippoGridInfo::setWebSite(const std::string &website) | ||
202 | { | ||
203 | mWebSite = website; | ||
204 | } | ||
205 | |||
206 | void HippoGridInfo::setSupportUrl(const std::string &url) | ||
207 | { | ||
208 | mSupportUrl = url; | ||
209 | } | ||
210 | |||
211 | void HippoGridInfo::setRegisterUrl(const std::string &url) | ||
212 | { | ||
213 | mRegisterUrl = url; | ||
214 | } | ||
215 | |||
216 | void HippoGridInfo::setPasswordUrl(const std::string &url) | ||
217 | { | ||
218 | mPasswordUrl = url; | ||
219 | } | ||
220 | |||
221 | void HippoGridInfo::setSearchUrl(const std::string &url) | ||
222 | { | ||
223 | mSearchUrl = url; | ||
224 | } | ||
225 | |||
226 | void HippoGridInfo::setFirstName(const std::string &firstName) | ||
227 | { | ||
228 | mFirstName = firstName; | ||
229 | } | ||
230 | |||
231 | void HippoGridInfo::setLastName(const std::string &lastName) | ||
232 | { | ||
233 | mLastName = lastName; | ||
234 | } | ||
235 | |||
236 | void HippoGridInfo::setAvatarPassword(const std::string &avatarPassword) | ||
237 | { | ||
238 | mAvatarPassword = avatarPassword; | ||
239 | } | ||
240 | |||
241 | void HippoGridInfo::setRenderCompat(bool compat) | ||
242 | { | ||
243 | mRenderCompat = compat; | ||
244 | } | ||
245 | |||
246 | void HippoGridInfo::setCurrencySymbol(const std::string &sym) | ||
247 | { | ||
248 | mCurrencySymbol = sym.substr(0, 3); | ||
249 | } | ||
250 | |||
251 | void HippoGridInfo::setRealCurrencySymbol(const std::string &sym) | ||
252 | { | ||
253 | mRealCurrencySymbol = sym.substr(0, 3); | ||
254 | } | ||
255 | |||
256 | void HippoGridInfo::setDirectoryFee(int fee) | ||
257 | { | ||
258 | mDirectoryFee = fee; | ||
259 | } | ||
260 | |||
261 | |||
262 | |||
263 | // ******************************************************************** | ||
264 | // Grid Info | ||
265 | |||
266 | std::string HippoGridInfo::getSearchUrl(SearchType ty) const | ||
267 | { | ||
268 | if ((mPlatform == PLATFORM_SECONDLIFE) || mSearchUrl.empty()) { | ||
269 | // Second Life defaults | ||
270 | if (ty == SEARCH_ALL_EMPTY) { | ||
271 | return gSavedSettings.getString("SearchURLDefault"); | ||
272 | } else if (ty == SEARCH_ALL_QUERY) { | ||
273 | return gSavedSettings.getString("SearchURLQuery"); | ||
274 | } else if (ty == SEARCH_ALL_TEMPLATE) { | ||
275 | return gSavedSettings.getString("SearchURLSuffix2"); | ||
276 | } else { | ||
277 | llinfos << "Illegal search URL type " << ty << llendl; | ||
278 | return ""; | ||
279 | } | ||
280 | } else { | ||
281 | // OpenSim and other | ||
282 | if (ty == SEARCH_ALL_EMPTY) { | ||
283 | return (mSearchUrl + "panel=All&"); | ||
284 | } else if (ty == SEARCH_ALL_QUERY) { | ||
285 | return (mSearchUrl + "q=[QUERY]&s=[COLLECTION]&"); | ||
286 | } else if (ty == SEARCH_ALL_TEMPLATE) { | ||
287 | return "lang=[LANG]&m=[MATURE]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]"; | ||
288 | } else { | ||
289 | llinfos << "Illegal search URL type " << ty << llendl; | ||
290 | return ""; | ||
291 | } | ||
292 | } | ||
293 | } | ||
294 | |||
295 | |||
296 | //static | ||
297 | void HippoGridInfo::onXmlElementStart(void *userData, const XML_Char *name, const XML_Char **atts) | ||
298 | { | ||
299 | HippoGridInfo *self = (HippoGridInfo*)userData; | ||
300 | if (strcasecmp(name, "gridnick") == 0) | ||
301 | self->mXmlState = XML_GRIDNICK; | ||
302 | else if (strcasecmp(name, "gridname") == 0) | ||
303 | self->mXmlState = XML_GRIDNAME; | ||
304 | else if (strcasecmp(name, "platform") == 0) | ||
305 | self->mXmlState = XML_PLATFORM; | ||
306 | else if ((strcasecmp(name, "login") == 0) || (strcasecmp(name, "loginuri") == 0)) | ||
307 | self->mXmlState = XML_LOGINURI; | ||
308 | else if ((strcasecmp(name, "welcome") == 0) || (strcasecmp(name, "loginpage") == 0)) | ||
309 | self->mXmlState = XML_LOGINPAGE; | ||
310 | else if ((strcasecmp(name, "economy") == 0) || (strcasecmp(name, "helperuri") == 0)) | ||
311 | self->mXmlState = XML_HELPERURI; | ||
312 | else if ((strcasecmp(name, "about") == 0) || (strcasecmp(name, "website") == 0)) | ||
313 | self->mXmlState = XML_WEBSITE; | ||
314 | else if ((strcasecmp(name, "help") == 0) || (strcasecmp(name, "support") == 0)) | ||
315 | self->mXmlState = XML_SUPPORT; | ||
316 | else if ((strcasecmp(name, "register") == 0) || (strcasecmp(name, "account") == 0)) | ||
317 | self->mXmlState = XML_REGISTER; | ||
318 | else if (strcasecmp(name, "password") == 0) | ||
319 | self->mXmlState = XML_PASSWORD; | ||
320 | //else if (strcasecmp(name, "search") == 0) | ||
321 | //self->mXmlState = XML_SEARCH; | ||
322 | } | ||
323 | |||
324 | //static | ||
325 | void HippoGridInfo::onXmlElementEnd(void *userData, const XML_Char *name) | ||
326 | { | ||
327 | HippoGridInfo *self = (HippoGridInfo*)userData; | ||
328 | self->mXmlState = XML_VOID; | ||
329 | } | ||
330 | |||
331 | //static | ||
332 | void HippoGridInfo::onXmlCharacterData(void *userData, const XML_Char *s, int len) | ||
333 | { | ||
334 | HippoGridInfo *self = (HippoGridInfo*)userData; | ||
335 | switch (self->mXmlState) { | ||
336 | |||
337 | case XML_GRIDNICK: { | ||
338 | if (self->mGridNick == "") self->mGridNick.assign(s, len); | ||
339 | self->mGridNick = sanitizeGridNick(self->mGridNick); | ||
340 | break; | ||
341 | } | ||
342 | |||
343 | case XML_PLATFORM: { | ||
344 | std::string platform(s, len); | ||
345 | self->setPlatform(platform); | ||
346 | break; | ||
347 | } | ||
348 | |||
349 | case XML_LOGINURI: { | ||
350 | std::string loginuri(s, len); | ||
351 | self->mLoginUri = sanitizeUri( loginuri ); | ||
352 | break; | ||
353 | } | ||
354 | |||
355 | case XML_HELPERURI: { | ||
356 | std::string helperuri(s, len); | ||
357 | self->mHelperUri = sanitizeUri( helperuri ); | ||
358 | break; | ||
359 | } | ||
360 | |||
361 | case XML_SEARCH: { | ||
362 | //self->mSearchUrl.assign(s, len); | ||
363 | //sanitizeQueryUrl(mSearchUrl); | ||
364 | break; | ||
365 | } | ||
366 | |||
367 | case XML_GRIDNAME: self->mGridName.assign(s, len); break; | ||
368 | case XML_LOGINPAGE: self->mLoginPage.assign(s, len); break; | ||
369 | case XML_WEBSITE: self->mWebSite.assign(s, len); break; | ||
370 | case XML_SUPPORT: self->mSupportUrl.assign(s, len); break; | ||
371 | case XML_REGISTER: self->mRegisterUrl.assign(s, len); break; | ||
372 | case XML_PASSWORD: self->mPasswordUrl.assign(s, len); break; | ||
373 | |||
374 | case XML_VOID: break; | ||
375 | } | ||
376 | } | ||
377 | |||
378 | |||
379 | bool HippoGridInfo::retrieveGridInfo() | ||
380 | { | ||
381 | if (mLoginUri == "") return false; | ||
382 | |||
383 | std::string reply; | ||
384 | int result = HippoRestRequest::getBlocking(mLoginUri + "get_grid_info", &reply); | ||
385 | if (result != 200) return false; | ||
386 | |||
387 | llinfos << "Received: " << reply << llendl; | ||
388 | |||
389 | bool success = true; | ||
390 | XML_Parser parser = XML_ParserCreate(0); | ||
391 | XML_SetUserData(parser, this); | ||
392 | XML_SetElementHandler(parser, onXmlElementStart, onXmlElementEnd); | ||
393 | XML_SetCharacterDataHandler(parser, onXmlCharacterData); | ||
394 | mXmlState = XML_VOID; | ||
395 | if (!XML_Parse(parser, reply.data(), reply.size(), TRUE)) { | ||
396 | llwarns << "XML Parse Error: " << XML_ErrorString(XML_GetErrorCode(parser)) << llendl; | ||
397 | success = false; | ||
398 | } | ||
399 | XML_ParserFree(parser); | ||
400 | |||
401 | return success; | ||
402 | } | ||
403 | |||
404 | |||
405 | std::string HippoGridInfo::getUploadFee() const | ||
406 | { | ||
407 | std::string fee; | ||
408 | formatFee(fee, LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(), true); | ||
409 | return fee; | ||
410 | } | ||
411 | |||
412 | std::string HippoGridInfo::getGroupCreationFee() const | ||
413 | { | ||
414 | std::string fee; | ||
415 | formatFee(fee, LLGlobalEconomy::Singleton::getInstance()->getPriceGroupCreate(), false); | ||
416 | return fee; | ||
417 | } | ||
418 | |||
419 | std::string HippoGridInfo::getDirectoryFee() const | ||
420 | { | ||
421 | std::string fee; | ||
422 | formatFee(fee, mDirectoryFee, true); | ||
423 | if (fee != "free") fee += "/week"; | ||
424 | return fee; | ||
425 | } | ||
426 | |||
427 | void HippoGridInfo::formatFee(std::string &fee, int cost, bool showFree) const | ||
428 | { | ||
429 | if (showFree && (cost == 0)) { | ||
430 | fee = "free"; | ||
431 | } else { | ||
432 | fee = llformat("%s%d", getCurrencySymbol().c_str(), cost); | ||
433 | } | ||
434 | } | ||
435 | |||
436 | |||
437 | // ******************************************************************** | ||
438 | // Static Helpers | ||
439 | |||
440 | // static | ||
441 | const char *HippoGridInfo::getPlatformString(Platform platform) | ||
442 | { | ||
443 | static const char *platformStrings[PLATFORM_LAST] = { | ||
444 | "Other", "OpenSim", "SecondLife" | ||
445 | }; | ||
446 | |||
447 | if ((platform < PLATFORM_OTHER) || (platform >= PLATFORM_LAST)) | ||
448 | platform = PLATFORM_OTHER; | ||
449 | return platformStrings[platform]; | ||
450 | } | ||
451 | |||
452 | |||
453 | // static | ||
454 | std::string HippoGridInfo::sanitizeGridNick(std::string &gridnick) | ||
455 | { | ||
456 | std::string tmp; | ||
457 | int size = gridnick.size(); | ||
458 | for (int i=0; i<size; i++) { | ||
459 | char c = gridnick[i]; | ||
460 | if ((c == '_') || isalnum(c)) { | ||
461 | tmp += tolower(c); | ||
462 | } else if (isspace(c)) { | ||
463 | tmp += "_"; | ||
464 | } | ||
465 | } | ||
466 | return tmp; | ||
467 | } | ||
468 | |||
469 | // static | ||
470 | std::string HippoGridInfo::sanitizeUri(std::string &uri) | ||
471 | { | ||
472 | // if (uri.empty()) { | ||
473 | // return ""; | ||
474 | // } | ||
475 | |||
476 | // // If last character in uri is not "/" | ||
477 | // // NOTE: This wrongly assumes that all URIs should end with "/"! | ||
478 | // if (uri.compare(uri.length()-1, 1, "/") != 0) { | ||
479 | // return uri + '/'; | ||
480 | // } | ||
481 | |||
482 | return uri; | ||
483 | } | ||
484 | |||
485 | |||
486 | void HippoGridInfo::initFallback() | ||
487 | { | ||
488 | FALLBACK_GRIDINFO.mGridNick = "secondlife"; | ||
489 | FALLBACK_GRIDINFO.setPlatform(PLATFORM_SECONDLIFE); | ||
490 | FALLBACK_GRIDINFO.setGridName("Second Life"); | ||
491 | FALLBACK_GRIDINFO.setLoginUri("https://login.agni.lindenlab.com/cgi-bin/login.cgi"); | ||
492 | FALLBACK_GRIDINFO.setLoginPage("http://secondlife.com/app/login/"); | ||
493 | FALLBACK_GRIDINFO.setHelperUri("https://secondlife.com/helpers/"); | ||
494 | FALLBACK_GRIDINFO.setWebSite("http://secondlife.com/"); | ||
495 | } | ||
496 | |||
497 | |||
498 | |||
499 | // ******************************************************************** | ||
500 | // ******************************************************************** | ||
501 | // HippoGridManager | ||
502 | // ******************************************************************** | ||
503 | // ******************************************************************** | ||
504 | |||
505 | |||
506 | // ******************************************************************** | ||
507 | // Initialize | ||
508 | |||
509 | HippoGridManager::HippoGridManager() : | ||
510 | mConnectedGrid(0), | ||
511 | mDefaultGridsVersion(0) | ||
512 | { | ||
513 | } | ||
514 | |||
515 | HippoGridManager::~HippoGridManager() | ||
516 | { | ||
517 | cleanup(); | ||
518 | } | ||
519 | |||
520 | |||
521 | void HippoGridManager::cleanup() | ||
522 | { | ||
523 | std::map<std::string, HippoGridInfo*>::iterator it, end = mGridInfo.end(); | ||
524 | for (it=mGridInfo.begin(); it != end; ++it) { | ||
525 | delete it->second; | ||
526 | } | ||
527 | mGridInfo.clear(); | ||
528 | } | ||
529 | |||
530 | |||
531 | void HippoGridManager::init() | ||
532 | { | ||
533 | HippoGridInfo::initFallback(); | ||
534 | loadFromFile(); | ||
535 | |||
536 | // !!!### gSavedSettings.getControl("CmdLineLoginURI"); | ||
537 | // !!!### gSavedSettings.getString("CmdLineLoginPage"); | ||
538 | // !!!### gSavedSettings.getString("CmdLineHelperURI"); | ||
539 | // !!!### LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str())) | ||
540 | } | ||
541 | |||
542 | |||
543 | void HippoGridManager::discardAndReload() | ||
544 | { | ||
545 | cleanup(); | ||
546 | loadFromFile(); | ||
547 | } | ||
548 | |||
549 | |||
550 | // ******************************************************************** | ||
551 | // Public Access | ||
552 | |||
553 | HippoGridInfo* HippoGridManager::getGrid(const std::string &grid) const | ||
554 | { | ||
555 | std::map<std::string, HippoGridInfo*>::const_iterator it; | ||
556 | it = mGridInfo.find(grid); | ||
557 | if (it != mGridInfo.end()) { | ||
558 | return it->second; | ||
559 | } else { | ||
560 | return 0; | ||
561 | } | ||
562 | } | ||
563 | |||
564 | |||
565 | HippoGridInfo* HippoGridManager::getConnectedGrid() const | ||
566 | { | ||
567 | return (mConnectedGrid)? mConnectedGrid: getCurrentGrid(); | ||
568 | } | ||
569 | |||
570 | |||
571 | HippoGridInfo* HippoGridManager::getCurrentGrid() const | ||
572 | { | ||
573 | HippoGridInfo *grid = getGrid(mCurrentGrid); | ||
574 | if (grid) { | ||
575 | return grid; | ||
576 | } else { | ||
577 | return &HippoGridInfo::FALLBACK_GRIDINFO; | ||
578 | } | ||
579 | } | ||
580 | |||
581 | const std::string& HippoGridManager::getDefaultGridNick() const | ||
582 | { | ||
583 | return mDefaultGrid; | ||
584 | } | ||
585 | |||
586 | const std::string& HippoGridManager::getCurrentGridNick() const | ||
587 | { | ||
588 | return mCurrentGrid; | ||
589 | } | ||
590 | |||
591 | void HippoGridManager::setCurrentGridAsConnected() | ||
592 | { | ||
593 | mConnectedGrid = getCurrentGrid(); | ||
594 | } | ||
595 | |||
596 | |||
597 | void HippoGridManager::addGrid(HippoGridInfo *grid) | ||
598 | { | ||
599 | if (!grid) return; | ||
600 | const std::string &nick = grid->getGridNick(); | ||
601 | if (nick == "") { | ||
602 | llwarns << "Ignoring to try adding grid with empty nick." << llendl; | ||
603 | delete grid; | ||
604 | return; | ||
605 | } | ||
606 | if (mGridInfo.find(nick) != mGridInfo.end()) { | ||
607 | llwarns << "Ignoring to try adding existing grid " << nick << '.' << llendl; | ||
608 | delete grid; | ||
609 | return; | ||
610 | } | ||
611 | mGridInfo[nick] = grid; | ||
612 | } | ||
613 | |||
614 | |||
615 | void HippoGridManager::deleteGrid(const std::string &grid) | ||
616 | { | ||
617 | GridIterator it = mGridInfo.find(grid); | ||
618 | if (it == mGridInfo.end()) { | ||
619 | llwarns << "Trying to delete non-existing grid " << grid << '.' << llendl; | ||
620 | return; | ||
621 | } | ||
622 | mGridInfo.erase(it); | ||
623 | llinfos << "Number of grids now: " << mGridInfo.size() << llendl; | ||
624 | if (mGridInfo.empty()) llinfos << "Grid info map is empty." << llendl; | ||
625 | if (grid == mDefaultGrid) | ||
626 | setDefaultGrid(""); // sets first grid, if map not empty | ||
627 | if (grid == mCurrentGrid) | ||
628 | mCurrentGrid = mDefaultGrid; | ||
629 | } | ||
630 | |||
631 | |||
632 | void HippoGridManager::setDefaultGrid(const std::string &grid) | ||
633 | { | ||
634 | GridIterator it = mGridInfo.find(grid); | ||
635 | if (it != mGridInfo.end()) { | ||
636 | mDefaultGrid = grid; | ||
637 | } else if (mGridInfo.find("secondlife") != mGridInfo.end()) { | ||
638 | mDefaultGrid = "secondlife"; | ||
639 | } else if (!mGridInfo.empty()) { | ||
640 | mDefaultGrid = mGridInfo.begin()->first; | ||
641 | } else { | ||
642 | mDefaultGrid = ""; | ||
643 | } | ||
644 | } | ||
645 | |||
646 | |||
647 | void HippoGridManager::setCurrentGrid(const std::string &grid) | ||
648 | { | ||
649 | GridIterator it = mGridInfo.find(grid); | ||
650 | if (it != mGridInfo.end()) { | ||
651 | mCurrentGrid = grid; | ||
652 | } else if (!mGridInfo.empty()) { | ||
653 | llwarns << "Unknown grid '" << grid << "'. Setting to default grid." << llendl; | ||
654 | mCurrentGrid = mDefaultGrid; | ||
655 | } | ||
656 | } | ||
657 | |||
658 | |||
659 | // ******************************************************************** | ||
660 | // Persistent Store | ||
661 | |||
662 | void HippoGridManager::loadFromFile() | ||
663 | { | ||
664 | mDefaultGridsVersion = 0; | ||
665 | // load user grid info | ||
666 | parseFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grid_info.xml"), false); | ||
667 | // merge default grid info, if newer. Force load, if list of grids is empty. | ||
668 | parseFile(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "default_grids.xml"), !mGridInfo.empty()); | ||
669 | // merge grid info from web site, if newer. Force load, if list of grids is empty. | ||
670 | if (gSavedSettings.getBOOL("CheckForGridUpdates")) | ||
671 | parseUrl("http://imprudenceviewer.org/app/grids/", !mGridInfo.empty()); | ||
672 | |||
673 | setDefaultGrid(gSavedSettings.getString("DefaultGrid")); | ||
674 | setCurrentGrid(gSavedSettings.getString("DefaultGrid")); | ||
675 | } | ||
676 | |||
677 | |||
678 | void HippoGridManager::parseUrl(const char *url, bool mergeIfNewer) | ||
679 | { | ||
680 | llinfos << "Loading grid info from '" << url << "'." << llendl; | ||
681 | |||
682 | // query update server | ||
683 | std::string escaped_url = LLWeb::escapeURL(url); | ||
684 | LLSD response = LLHTTPClient::blockingGet(url); | ||
685 | |||
686 | // check response, return on error | ||
687 | S32 status = response["status"].asInteger(); | ||
688 | if ((status != 200) || !response["body"].isArray()) { | ||
689 | llinfos << "GridInfo Update failed (" << status << "): " | ||
690 | << (response["body"].isString()? response["body"].asString(): "<unknown error>") | ||
691 | << llendl; | ||
692 | return; | ||
693 | } | ||
694 | |||
695 | LLSD gridInfo = response["body"]; | ||
696 | parseData(gridInfo, mergeIfNewer); | ||
697 | } | ||
698 | |||
699 | void HippoGridManager::parseFile(const std::string &fileName, bool mergeIfNewer) | ||
700 | { | ||
701 | llifstream infile; | ||
702 | infile.open(fileName.c_str()); | ||
703 | if(!infile.is_open()) { | ||
704 | llwarns << "Cannot find grid info file " << fileName << " to load." << llendl; | ||
705 | return; | ||
706 | } | ||
707 | |||
708 | LLSD gridInfo; | ||
709 | if (LLSDSerialize::fromXML(gridInfo, infile) <= 0) { | ||
710 | llwarns << "Unable to parse grid info file " << fileName << '.' << llendl; | ||
711 | return; | ||
712 | } | ||
713 | |||
714 | llinfos << "Loading grid info file " << fileName << '.' << llendl; | ||
715 | parseData(gridInfo, mergeIfNewer); | ||
716 | } | ||
717 | |||
718 | |||
719 | void HippoGridManager::parseData(LLSD &gridInfo, bool mergeIfNewer) | ||
720 | { | ||
721 | if (mergeIfNewer) { | ||
722 | LLSD::array_const_iterator it, end = gridInfo.endArray(); | ||
723 | for (it = gridInfo.beginArray(); it != end; ++it) { | ||
724 | LLSD gridMap = *it; | ||
725 | if (gridMap.has("default_grids_version")) { | ||
726 | int version = gridMap["default_grids_version"]; | ||
727 | if (version <= mDefaultGridsVersion) return; | ||
728 | else break; | ||
729 | } | ||
730 | } | ||
731 | if (it == end) { | ||
732 | llwarns << "Grid data has no version number." << llendl; | ||
733 | return; | ||
734 | } | ||
735 | } | ||
736 | |||
737 | llinfos << "Loading grid data." << llendl; | ||
738 | |||
739 | LLSD::array_const_iterator it, end = gridInfo.endArray(); | ||
740 | for (it = gridInfo.beginArray(); it != end; ++it) { | ||
741 | LLSD gridMap = *it; | ||
742 | if (gridMap.has("default_grids_version")) { | ||
743 | mDefaultGridsVersion = gridMap["default_grids_version"]; | ||
744 | } else if (gridMap.has("gridnick") && gridMap.has("loginuri")) { | ||
745 | std::string gridnick = gridMap["gridnick"]; | ||
746 | HippoGridInfo *grid; | ||
747 | GridIterator it = mGridInfo.find(gridnick); | ||
748 | bool newGrid = (it == mGridInfo.end()); | ||
749 | if (newGrid) { | ||
750 | // create new grid info | ||
751 | grid = new HippoGridInfo(gridnick); | ||
752 | } else { | ||
753 | // update existing grid info | ||
754 | grid = it->second; | ||
755 | } | ||
756 | grid->setLoginUri(gridMap["loginuri"]); | ||
757 | if (gridMap.has("platform")) grid->setPlatform(gridMap["platform"]); | ||
758 | if (gridMap.has("gridname")) grid->setGridName(gridMap["gridname"]); | ||
759 | if (gridMap.has("loginpage")) grid->setLoginPage(gridMap["loginpage"]); | ||
760 | if (gridMap.has("helperuri")) grid->setHelperUri(gridMap["helperuri"]); | ||
761 | if (gridMap.has("website")) grid->setWebSite(gridMap["website"]); | ||
762 | if (gridMap.has("support")) grid->setSupportUrl(gridMap["support"]); | ||
763 | if (gridMap.has("register")) grid->setRegisterUrl(gridMap["register"]); | ||
764 | if (gridMap.has("password")) grid->setPasswordUrl(gridMap["password"]); | ||
765 | //if (gridMap.has("search")) grid->setSearchUrl(gridMap["search"]); | ||
766 | if (gridMap.has("render_compat")) grid->setRenderCompat(gridMap["render_compat"]); | ||
767 | // if (gridMap.has("firstname")) grid->setFirstName(gridMap["firstname"]); | ||
768 | // if (gridMap.has("lastname")) grid->setLastName(gridMap["lastname"]); | ||
769 | // if (gridMap.has("avatarpassword")) grid->setAvatarPassword(gridMap["avatarpassword"]); | ||
770 | if (newGrid) addGrid(grid); | ||
771 | } | ||
772 | } | ||
773 | } | ||
774 | |||
775 | |||
776 | void HippoGridManager::saveFile() | ||
777 | { | ||
778 | // save default grid to client settings | ||
779 | gSavedSettings.setString("DefaultGrid", mDefaultGrid); | ||
780 | |||
781 | // build LLSD | ||
782 | LLSD gridInfo; | ||
783 | gridInfo[0]["default_grids_version"] = mDefaultGridsVersion; | ||
784 | |||
785 | // add grids | ||
786 | S32 i = 1; | ||
787 | GridIterator it, end = mGridInfo.end(); | ||
788 | for (it = mGridInfo.begin(); it != end; ++it, i++) { | ||
789 | HippoGridInfo *grid = it->second; | ||
790 | gridInfo[i]["gridnick"] = grid->getGridNick(); | ||
791 | gridInfo[i]["platform"] = HippoGridInfo::getPlatformString(grid->getPlatform()); | ||
792 | gridInfo[i]["gridname"] = grid->getGridName(); | ||
793 | gridInfo[i]["loginuri"] = grid->getLoginUri(); | ||
794 | gridInfo[i]["loginpage"] = grid->getLoginPage(); | ||
795 | gridInfo[i]["helperuri"] = grid->getHelperUri(); | ||
796 | gridInfo[i]["website"] = grid->getWebSite(); | ||
797 | gridInfo[i]["support"] = grid->getSupportUrl(); | ||
798 | gridInfo[i]["register"] = grid->getRegisterUrl(); | ||
799 | gridInfo[i]["password"] = grid->getPasswordUrl(); | ||
800 | // gridInfo[i]["firstname"] = grid->getFirstName(); | ||
801 | // gridInfo[i]["lastname"] = grid->getLastName(); | ||
802 | // gridInfo[i]["avatarpassword"] = grid->getAvatarPassword(); | ||
803 | |||
804 | //gridInfo[i]["search"] = grid->getSearchUrl(); | ||
805 | gridInfo[i]["render_compat"] = grid->isRenderCompat(); | ||
806 | } | ||
807 | |||
808 | // write client grid info file | ||
809 | std::string fileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grid_info.xml"); | ||
810 | llofstream file; | ||
811 | file.open(fileName.c_str()); | ||
812 | if (file.is_open()) { | ||
813 | LLSDSerialize::toPrettyXML(gridInfo, file); | ||
814 | file.close(); | ||
815 | llinfos << "Saved grids to " << fileName << llendl; | ||
816 | } else { | ||
817 | llerrs << "Unable to open grid info file: " << fileName << llendl; | ||
818 | } | ||
819 | } | ||
diff --git a/linden/indra/newview/hippoGridManager.h b/linden/indra/newview/hippoGridManager.h new file mode 100644 index 0000000..ef351d9 --- /dev/null +++ b/linden/indra/newview/hippoGridManager.h | |||
@@ -0,0 +1,174 @@ | |||
1 | #ifndef __HIPPO_GRID_MANAGER_H__ | ||
2 | #define __HIPPO_GRID_MANAGER_H__ | ||
3 | |||
4 | |||
5 | #include <map> | ||
6 | #include <string> | ||
7 | |||
8 | #ifndef XML_STATIC | ||
9 | #define XML_STATIC | ||
10 | #endif | ||
11 | |||
12 | #ifdef LL_STANDALONE | ||
13 | #include <expat.h> | ||
14 | #else | ||
15 | #include "expat/expat.h" | ||
16 | #endif | ||
17 | |||
18 | class LLSD; | ||
19 | |||
20 | |||
21 | class HippoGridInfo | ||
22 | { | ||
23 | public: | ||
24 | enum Platform { | ||
25 | PLATFORM_OTHER = 0, | ||
26 | PLATFORM_OPENSIM, | ||
27 | PLATFORM_SECONDLIFE, | ||
28 | PLATFORM_LAST | ||
29 | }; | ||
30 | enum SearchType { | ||
31 | SEARCH_ALL_EMPTY, | ||
32 | SEARCH_ALL_QUERY, | ||
33 | SEARCH_ALL_TEMPLATE | ||
34 | }; | ||
35 | |||
36 | explicit HippoGridInfo(const std::string &gridNick); | ||
37 | |||
38 | Platform getPlatform(); | ||
39 | bool isOpenSimulator() const; | ||
40 | bool isSecondLife() const; | ||
41 | const std::string& getGridNick() const; | ||
42 | const std::string& getGridName() const; | ||
43 | const std::string& getLoginUri() const; | ||
44 | const std::string& getLoginPage() const; | ||
45 | const std::string& getHelperUri() const; | ||
46 | const std::string& getWebSite() const; | ||
47 | const std::string& getSupportUrl() const; | ||
48 | const std::string& getRegisterUrl() const; | ||
49 | const std::string& getPasswordUrl() const; | ||
50 | const std::string& getSearchUrl() const; | ||
51 | const std::string& getFirstName() const; | ||
52 | const std::string& getLastName() const; | ||
53 | const std::string& getAvatarPassword() const; | ||
54 | std::string getSearchUrl(SearchType ty) const; | ||
55 | bool isRenderCompat() const; | ||
56 | |||
57 | const std::string& getCurrencySymbol() const; | ||
58 | const std::string& getRealCurrencySymbol() const; | ||
59 | std::string getUploadFee() const; | ||
60 | std::string getGroupCreationFee() const; | ||
61 | std::string getDirectoryFee() const; | ||
62 | |||
63 | void setPlatform (const std::string &platform); | ||
64 | void setPlatform (Platform platform); | ||
65 | void setGridName (const std::string &gridName); | ||
66 | void setLoginUri (const std::string &loginUri); | ||
67 | void setLoginPage(const std::string &loginPage); | ||
68 | void setHelperUri(const std::string &helperUri); | ||
69 | void setWebSite (const std::string &website); | ||
70 | void setSupportUrl(const std::string &url); | ||
71 | void setRegisterUrl(const std::string &url); | ||
72 | void setPasswordUrl(const std::string &url); | ||
73 | void setSearchUrl(const std::string &url); | ||
74 | void setRenderCompat(bool compat); | ||
75 | void setFirstName(const std::string &firstName); | ||
76 | void setLastName(const std::string &lastName); | ||
77 | void setAvatarPassword(const std::string &avatarPassword); | ||
78 | |||
79 | void setCurrencySymbol(const std::string &sym); | ||
80 | void setRealCurrencySymbol(const std::string &sym); | ||
81 | void setDirectoryFee(int fee); | ||
82 | |||
83 | bool retrieveGridInfo(); | ||
84 | |||
85 | static const char *getPlatformString(Platform platform); | ||
86 | static std::string sanitizeGridNick(std::string &gridnick); | ||
87 | |||
88 | static HippoGridInfo FALLBACK_GRIDINFO; | ||
89 | static void initFallback(); | ||
90 | |||
91 | private: | ||
92 | Platform mPlatform; | ||
93 | std::string mGridNick; | ||
94 | std::string mGridName; | ||
95 | std::string mLoginUri; | ||
96 | std::string mLoginPage; | ||
97 | std::string mHelperUri; | ||
98 | std::string mWebSite; | ||
99 | std::string mSupportUrl; | ||
100 | std::string mRegisterUrl; | ||
101 | std::string mPasswordUrl; | ||
102 | std::string mSearchUrl; | ||
103 | std::string mFirstName; | ||
104 | std::string mLastName; | ||
105 | std::string mAvatarPassword; | ||
106 | bool mRenderCompat; | ||
107 | |||
108 | std::string mCurrencySymbol; | ||
109 | std::string mRealCurrencySymbol; | ||
110 | int mDirectoryFee; | ||
111 | |||
112 | // for parsing grid info XML | ||
113 | enum XmlState { | ||
114 | XML_VOID, XML_GRIDNICK, XML_PLATFORM, XML_GRIDNAME, | ||
115 | XML_LOGINURI, XML_LOGINPAGE, XML_HELPERURI, | ||
116 | XML_WEBSITE, XML_SUPPORT, XML_REGISTER, XML_PASSWORD, XML_SEARCH | ||
117 | }; | ||
118 | XmlState mXmlState; | ||
119 | |||
120 | static std::string sanitizeUri(std::string &uri); | ||
121 | void formatFee(std::string &fee, int cost, bool showFree) const; | ||
122 | |||
123 | static void onXmlElementStart(void *userData, const XML_Char *name, const XML_Char **atts); | ||
124 | static void onXmlElementEnd(void *userData, const XML_Char *name); | ||
125 | static void onXmlCharacterData(void *userData, const XML_Char *s, int len); | ||
126 | }; | ||
127 | |||
128 | |||
129 | class HippoGridManager | ||
130 | { | ||
131 | public: | ||
132 | HippoGridManager(); | ||
133 | ~HippoGridManager(); | ||
134 | |||
135 | void init(); | ||
136 | void saveFile(); | ||
137 | void discardAndReload(); | ||
138 | |||
139 | HippoGridInfo* getGrid(const std::string &grid) const; | ||
140 | HippoGridInfo* getConnectedGrid() const; | ||
141 | HippoGridInfo* getCurrentGrid() const; | ||
142 | const std::string& getDefaultGridNick() const; | ||
143 | const std::string& getCurrentGridNick() const; | ||
144 | |||
145 | void setDefaultGrid(const std::string &grid); | ||
146 | void setCurrentGrid(const std::string &grid); | ||
147 | void setCurrentGridAsConnected(); | ||
148 | |||
149 | void addGrid(HippoGridInfo *grid); | ||
150 | void deleteGrid(const std::string &grid); | ||
151 | |||
152 | typedef std::map<std::string, HippoGridInfo*>::iterator GridIterator; | ||
153 | GridIterator beginGrid() { return mGridInfo.begin(); } | ||
154 | GridIterator endGrid() { return mGridInfo.end(); } | ||
155 | |||
156 | private: | ||
157 | std::map<std::string, HippoGridInfo*> mGridInfo; | ||
158 | std::string mDefaultGrid; | ||
159 | std::string mCurrentGrid; | ||
160 | HippoGridInfo *mConnectedGrid; | ||
161 | int mDefaultGridsVersion; | ||
162 | |||
163 | void cleanup(); | ||
164 | void loadFromFile(); | ||
165 | void parseFile(const std::string &fileName, bool mergeIfNewer); | ||
166 | void parseUrl(const char *url, bool mergeIfNewer); | ||
167 | void parseData(LLSD &gridInfo, bool mergeIfNewer); | ||
168 | }; | ||
169 | |||
170 | |||
171 | extern HippoGridManager *gHippoGridManager; | ||
172 | |||
173 | |||
174 | #endif | ||
diff --git a/linden/indra/newview/hippoLimits.cpp b/linden/indra/newview/hippoLimits.cpp new file mode 100644 index 0000000..dae81a6 --- /dev/null +++ b/linden/indra/newview/hippoLimits.cpp | |||
@@ -0,0 +1,56 @@ | |||
1 | |||
2 | |||
3 | #include "llviewerprecompiledheaders.h" | ||
4 | |||
5 | #include "hippoLimits.h" | ||
6 | |||
7 | #include "hippoGridManager.h" | ||
8 | |||
9 | #include <llerror.h> | ||
10 | |||
11 | |||
12 | HippoLimits *gHippoLimits = 0; | ||
13 | |||
14 | |||
15 | HippoLimits::HippoLimits() | ||
16 | { | ||
17 | setLimits(); | ||
18 | } | ||
19 | |||
20 | |||
21 | void HippoLimits::setLimits() | ||
22 | { | ||
23 | if (gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) { | ||
24 | setSecondLifeLimits(); | ||
25 | } else { | ||
26 | setOpenSimLimits(); | ||
27 | } | ||
28 | } | ||
29 | |||
30 | |||
31 | void HippoLimits::setOpenSimLimits() | ||
32 | { | ||
33 | mMaxAgentGroups = 100; | ||
34 | mMaxPrimScale = 256.0f; | ||
35 | mMaxHeight = 10000.0f; | ||
36 | if (gHippoGridManager->getConnectedGrid()->isRenderCompat()) { | ||
37 | llinfos << "Using rendering compatible OpenSim limits." << llendl; | ||
38 | mMinHoleSize = 0.05f; | ||
39 | mMaxHollow = 0.95f; | ||
40 | } else { | ||
41 | llinfos << "Using Hippo OpenSim limits." << llendl; | ||
42 | mMinHoleSize = 0.01f; | ||
43 | mMaxHollow = 0.99f; | ||
44 | } | ||
45 | } | ||
46 | |||
47 | void HippoLimits::setSecondLifeLimits() | ||
48 | { | ||
49 | llinfos << "Using Second Life limits." << llendl; | ||
50 | mMaxAgentGroups = 25; | ||
51 | mMaxPrimScale = 10.0f; | ||
52 | mMaxHeight = 4096.0f; | ||
53 | mMinHoleSize = 0.05f; | ||
54 | mMaxHollow = 0.95f; | ||
55 | } | ||
56 | |||
diff --git a/linden/indra/newview/hippoLimits.h b/linden/indra/newview/hippoLimits.h new file mode 100644 index 0000000..900480b --- /dev/null +++ b/linden/indra/newview/hippoLimits.h | |||
@@ -0,0 +1,33 @@ | |||
1 | #ifndef __HIPPO_LIMITS_H__ | ||
2 | #define __HIPPO_LIMITS_H__ | ||
3 | |||
4 | |||
5 | class HippoLimits | ||
6 | { | ||
7 | public: | ||
8 | HippoLimits(); | ||
9 | |||
10 | int getMaxAgentGroups() const { return mMaxAgentGroups; } | ||
11 | float getMaxHeight() const { return mMaxHeight; } | ||
12 | float getMinHoleSize() const { return mMinHoleSize; } | ||
13 | float getMaxHollow() const { return mMaxHollow; } | ||
14 | float getMaxPrimScale() const { return mMaxPrimScale; } | ||
15 | |||
16 | void setLimits(); | ||
17 | |||
18 | private: | ||
19 | int mMaxAgentGroups; | ||
20 | float mMaxHeight; | ||
21 | float mMinHoleSize; | ||
22 | float mMaxHollow; | ||
23 | float mMaxPrimScale; | ||
24 | |||
25 | void setOpenSimLimits(); | ||
26 | void setSecondLifeLimits(); | ||
27 | }; | ||
28 | |||
29 | |||
30 | extern HippoLimits *gHippoLimits; | ||
31 | |||
32 | |||
33 | #endif | ||
diff --git a/linden/indra/newview/hippoRestRequest.cpp b/linden/indra/newview/hippoRestRequest.cpp new file mode 100644 index 0000000..20e6187 --- /dev/null +++ b/linden/indra/newview/hippoRestRequest.cpp | |||
@@ -0,0 +1,56 @@ | |||
1 | |||
2 | |||
3 | #include "llviewerprecompiledheaders.h" | ||
4 | |||
5 | #include "hippoRestRequest.h" | ||
6 | |||
7 | #ifndef CURL_STATICLIB | ||
8 | #define CURL_STATICLIB 1 | ||
9 | #endif | ||
10 | #include <curl/curl.h> | ||
11 | |||
12 | #include <stdtypes.h> | ||
13 | #include <llerror.h> | ||
14 | |||
15 | |||
16 | static size_t curlWrite(void *ptr, size_t size, size_t nmemb, void *userData) | ||
17 | { | ||
18 | std::string *result = (std::string*)userData; | ||
19 | size_t bytes = (size * nmemb); | ||
20 | result->append((char*)ptr, bytes); | ||
21 | return nmemb; | ||
22 | } | ||
23 | |||
24 | |||
25 | //static | ||
26 | int HippoRestRequest::getBlocking(const std::string &url, std::string *result) | ||
27 | { | ||
28 | llinfos << "Requesting: " << url << llendl; | ||
29 | |||
30 | char curlErrorBuffer[CURL_ERROR_SIZE]; | ||
31 | CURL* curlp = curl_easy_init(); | ||
32 | |||
33 | curl_easy_setopt(curlp, CURLOPT_NOSIGNAL, 1); // don't use SIGALRM for timeouts | ||
34 | curl_easy_setopt(curlp, CURLOPT_TIMEOUT, 5); // seconds | ||
35 | |||
36 | curl_easy_setopt(curlp, CURLOPT_WRITEFUNCTION, curlWrite); | ||
37 | curl_easy_setopt(curlp, CURLOPT_WRITEDATA, result); | ||
38 | curl_easy_setopt(curlp, CURLOPT_URL, url.c_str()); | ||
39 | curl_easy_setopt(curlp, CURLOPT_ERRORBUFFER, curlErrorBuffer); | ||
40 | curl_easy_setopt(curlp, CURLOPT_FAILONERROR, 1); | ||
41 | |||
42 | *result = ""; | ||
43 | S32 curlSuccess = curl_easy_perform(curlp); | ||
44 | S32 httpStatus = 499; | ||
45 | curl_easy_getinfo(curlp, CURLINFO_RESPONSE_CODE, &httpStatus); | ||
46 | |||
47 | if (curlSuccess != 0) { | ||
48 | llwarns << "CURL ERROR (HTTP Status " << httpStatus << "): " << curlErrorBuffer << llendl; | ||
49 | } else if (httpStatus != 200) { | ||
50 | llwarns << "HTTP Error " << httpStatus << ", but no Curl error." << llendl; | ||
51 | } | ||
52 | |||
53 | curl_easy_cleanup(curlp); | ||
54 | return httpStatus; | ||
55 | } | ||
56 | |||
diff --git a/linden/indra/newview/hippoRestRequest.h b/linden/indra/newview/hippoRestRequest.h new file mode 100644 index 0000000..1dcb4a0 --- /dev/null +++ b/linden/indra/newview/hippoRestRequest.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef __HIPPO_REST_REQTUEST_H__ | ||
2 | #define __HIPPO_REST_REQTUEST_H__ | ||
3 | |||
4 | |||
5 | #include <string> | ||
6 | |||
7 | |||
8 | class HippoRestRequest | ||
9 | { | ||
10 | public: | ||
11 | static int getBlocking(const std::string &url, std::string *result); | ||
12 | |||
13 | }; | ||
14 | |||
15 | |||
16 | #endif | ||
diff --git a/linden/indra/newview/hippoUpdate.cpp b/linden/indra/newview/hippoUpdate.cpp new file mode 100644 index 0000000..872ca30 --- /dev/null +++ b/linden/indra/newview/hippoUpdate.cpp | |||
@@ -0,0 +1,92 @@ | |||
1 | |||
2 | #include "hippoUpdate.h" | ||
3 | |||
4 | #include <cstdio> | ||
5 | #include <list> | ||
6 | #include <vector> | ||
7 | |||
8 | #include <stdtypes.h> | ||
9 | #include <llhttpclient.h> | ||
10 | #include <llmemory.h> | ||
11 | #include <llversionviewer.h> | ||
12 | #include "llviewercontrol.h" | ||
13 | #include "llviewernetwork.h" | ||
14 | #include "llweb.h" | ||
15 | #include <llwindow.h> | ||
16 | |||
17 | |||
18 | std::string gHippoChannel; | ||
19 | |||
20 | |||
21 | // static | ||
22 | bool HippoUpdate::checkUpdate() | ||
23 | { | ||
24 | llinfos << "Hippo Update Check..." << llendl; | ||
25 | |||
26 | // get channel name | ||
27 | gHippoChannel = gSavedSettings.getString("ChannelName"); | ||
28 | |||
29 | // get mac address | ||
30 | char macAddress[18]; | ||
31 | sprintf(macAddress, "%02x:%02x:%02x:%02x:%02x:%02x", | ||
32 | gMACAddress[0], gMACAddress[1], gMACAddress[2], gMACAddress[3], gMACAddress[4], gMACAddress[5]); | ||
33 | |||
34 | // build URL for update check | ||
35 | char url[1000]; | ||
36 | snprintf(url, 1000, | ||
37 | /* "http://update.mjm.game-host.org/os/viewer.php?" | ||
38 | "product=%s&channel=%s&" | ||
39 | "version_major=%d&version_minor=%d&version_patch=%d&version_base=%s&" | ||
40 | "platform=%s&mac=%s", | ||
41 | LL_PRODUCT, LL_CHANNEL_CSTR, | ||
42 | LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BASE, | ||
43 | LL_PLATFORM*/"", macAddress); | ||
44 | |||
45 | // query update server | ||
46 | std::string escaped_url = LLWeb::escapeURL(url); | ||
47 | LLSD response = LLHTTPClient::blockingGet(escaped_url.c_str()); | ||
48 | |||
49 | // check response, return on error | ||
50 | S32 status = response["status"].asInteger(); | ||
51 | if ((status != 200) || !response["body"].isMap()) { | ||
52 | llinfos << "Hippo Update failed (" << status << "): " | ||
53 | << (response["body"].isString()? response["body"].asString(): "<unknown error>") | ||
54 | << llendl; | ||
55 | return true; | ||
56 | } | ||
57 | |||
58 | // get data from response | ||
59 | LLSD data = response["body"]; | ||
60 | std::string webpage = (data.has("webpage") && data["webpage"].isString())? data["webpage"].asString(): ""; | ||
61 | std::string message = (data.has("message") && data["message"].isString())? data["message"].asString(): ""; | ||
62 | std::string yourVersion = (data.has("yourVersion") && data["yourVersion"].isString())? data["yourVersion"].asString(): ""; | ||
63 | std::string curVersion = (data.has("curVersion") && data["curVersion"].isString())? data["curVersion"].asString(): ""; | ||
64 | bool update = (data.has("update") && data["update"].isBoolean())? data["update"].asBoolean(): false; | ||
65 | bool mandatory = (data.has("mandatory") && data["mandatory"].isBoolean())? data["mandatory"].asBoolean(): false; | ||
66 | |||
67 | // log and return, if no update available | ||
68 | llinfos << "Your version is " << yourVersion << ", current version is " << curVersion << '.' << llendl; | ||
69 | if (!update) return true; | ||
70 | llinfos << "Update is " << (mandatory? "mandatory.": "optional.") << llendl; | ||
71 | |||
72 | // show update dialog | ||
73 | char msg[1000]; | ||
74 | snprintf(msg, 1000, | ||
75 | "There is a new viewer version available.\n" | ||
76 | "\n" | ||
77 | "Your version: %s\n" | ||
78 | "Current version: %s\n" | ||
79 | "%s\n" | ||
80 | "Do you want to visit the web site?", | ||
81 | yourVersion.c_str(), curVersion.c_str(), | ||
82 | mandatory? "\nThis is a mandatory update.\n": ""); | ||
83 | S32 button = OSMessageBox(msg, "Hippo OpenSim Viewer Update", OSMB_YESNO); | ||
84 | if (button == OSBTN_YES) { | ||
85 | llinfos << "Taking user to " << webpage << llendl; | ||
86 | LLWeb::loadURLExternal(webpage); | ||
87 | // exit the viewer | ||
88 | return false; | ||
89 | } | ||
90 | |||
91 | return !mandatory; | ||
92 | } | ||
diff --git a/linden/indra/newview/hippoUpdate.h b/linden/indra/newview/hippoUpdate.h new file mode 100644 index 0000000..559c8b3 --- /dev/null +++ b/linden/indra/newview/hippoUpdate.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __HIPPO_UPDATE_H__ | ||
2 | #define __HIPPO_UPDATE_H__ | ||
3 | |||
4 | |||
5 | class HippoUpdate | ||
6 | { | ||
7 | public: | ||
8 | static bool checkUpdate(); | ||
9 | }; | ||
10 | |||
11 | |||
12 | #endif | ||
diff --git a/linden/indra/newview/jcfloater_animation_list.cpp b/linden/indra/newview/jcfloater_animation_list.cpp new file mode 100644 index 0000000..368e7d6 --- /dev/null +++ b/linden/indra/newview/jcfloater_animation_list.cpp | |||
@@ -0,0 +1,462 @@ | |||
1 | /* Copyright (c) 2009 | ||
2 | * | ||
3 | * Modular Systems Ltd. All rights reserved. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or | ||
6 | * without modification, are permitted provided that the following | ||
7 | * conditions are met: | ||
8 | * | ||
9 | * 1. Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * 2. Redistributions in binary form must reproduce the above | ||
12 | * copyright notice, this list of conditions and the following | ||
13 | * disclaimer in the documentation and/or other materials provided | ||
14 | * with the distribution. | ||
15 | * 3. Neither the name Modular Systems Ltd nor the names of its contributors | ||
16 | * may be used to endorse or promote products derived from this | ||
17 | * software without specific prior written permission. | ||
18 | * | ||
19 | * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS "AS IS" | ||
20 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||
21 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS | ||
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | ||
29 | * THE POSSIBILITY OF SUCH DAMAGE. | ||
30 | */ | ||
31 | |||
32 | #include "llviewerprecompiledheaders.h" | ||
33 | |||
34 | #include "lluuid.h" | ||
35 | #include "lluictrlfactory.h" | ||
36 | #include "llvoavatar.h" | ||
37 | |||
38 | #include "llagent.h" | ||
39 | |||
40 | #include "llscrolllistctrl.h" | ||
41 | |||
42 | #include "llviewerobjectlist.h" | ||
43 | |||
44 | #include "jcfloater_animation_list.h" | ||
45 | |||
46 | #include "llviewercontrol.h" | ||
47 | |||
48 | #include "llinventorymodel.h" | ||
49 | |||
50 | #include "llcategory.h" | ||
51 | |||
52 | #include "llfloaterchat.h" | ||
53 | |||
54 | #include "llfloateravatarinfo.h" | ||
55 | |||
56 | |||
57 | |||
58 | |||
59 | |||
60 | //std::map<LLUUID, AObjectData> JCFloaterAnimList::mObjectOwners; | ||
61 | |||
62 | JCFloaterAnimList::JCFloaterAnimList(const LLSD& seed) : | ||
63 | LLFloater(std::string("animation list")), | ||
64 | mAnimList(0) | ||
65 | { | ||
66 | BOOL no_open = FALSE; | ||
67 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_animation_list.xml",&getFactoryMap(),no_open); | ||
68 | } | ||
69 | |||
70 | JCFloaterAnimList::~JCFloaterAnimList() | ||
71 | { | ||
72 | } | ||
73 | |||
74 | //static | ||
75 | bool JCFloaterAnimList::visible(LLFloater* instance, const LLSD& key) | ||
76 | { | ||
77 | return VisibilityPolicy<LLFloater>::visible(instance, key); | ||
78 | } | ||
79 | |||
80 | //static | ||
81 | void JCFloaterAnimList::show(LLFloater* instance, const LLSD& key) | ||
82 | { | ||
83 | VisibilityPolicy<LLFloater>::show(instance, key); | ||
84 | } | ||
85 | |||
86 | //static | ||
87 | void JCFloaterAnimList::hide(LLFloater* instance, const LLSD& key) | ||
88 | { | ||
89 | VisibilityPolicy<LLFloater>::hide(instance, key); | ||
90 | } | ||
91 | |||
92 | void JCFloaterAnimList::onVisibilityChange(BOOL new_visibility) | ||
93 | { | ||
94 | if(!new_visibility) { | ||
95 | // *HACK: clean up memory on hiding | ||
96 | mObjectOwners.clear(); | ||
97 | } | ||
98 | } | ||
99 | |||
100 | BOOL JCFloaterAnimList::postBuild() | ||
101 | { | ||
102 | mAnimList = getChild<LLScrollListCtrl>("animation_list"); | ||
103 | mAnimList->setCallbackUserData(this); | ||
104 | mAnimList->setDoubleClickCallback(onDoubleClick); | ||
105 | mAnimList->sortByColumn("animation_uuid", TRUE); | ||
106 | |||
107 | childSetAction("Stop Selected",StopSelected,this); | ||
108 | childSetAction("Revoke Selected",RevokeSelected,this); | ||
109 | childSetAction("Stop+Revoke Selected",StopRevokeSelected,this); | ||
110 | childSetAction("Open Owner Profile",OpenProfile,this); | ||
111 | |||
112 | return 1; | ||
113 | } | ||
114 | |||
115 | void JCFloaterAnimList::StopSelected(void *userdata ) | ||
116 | { | ||
117 | JCFloaterAnimList *self = (JCFloaterAnimList*)userdata; | ||
118 | LLDynamicArray<LLUUID> ids; | ||
119 | std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected(); | ||
120 | for( std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); itr++ ) | ||
121 | { | ||
122 | LLScrollListItem *item = *itr; | ||
123 | const LLUUID &id = item->getColumn(LIST_ANIMATION_UUID)->getValue().asUUID(); | ||
124 | if( ids.find(id) == LLDynamicArray<LLUUID>::FAIL ) | ||
125 | { | ||
126 | ids.put(id); | ||
127 | } | ||
128 | } | ||
129 | gAgent.sendAnimationRequests(ids,ANIM_REQUEST_STOP); | ||
130 | } | ||
131 | |||
132 | void JCFloaterAnimList::RevokeSelected(void *userdata ) | ||
133 | { | ||
134 | JCFloaterAnimList *self = (JCFloaterAnimList*)userdata; | ||
135 | LLDynamicArray<LLUUID> ids; | ||
136 | std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected(); | ||
137 | for( std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); itr++ ) | ||
138 | { | ||
139 | LLScrollListItem *item = *itr; | ||
140 | const LLUUID &id = item->getColumn(LIST_OBJECT_UUID)->getValue().asUUID(); | ||
141 | if( ids.find(id) == LLDynamicArray<LLUUID>::FAIL ) | ||
142 | { | ||
143 | ids.put(id); | ||
144 | } | ||
145 | } | ||
146 | if( !ids.empty() ) | ||
147 | { | ||
148 | for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr) | ||
149 | { | ||
150 | LLUUID id = *itr; | ||
151 | LLMessageSystem* msg = gMessageSystem; | ||
152 | msg->newMessageFast(_PREHASH_RevokePermissions); | ||
153 | msg->nextBlockFast(_PREHASH_AgentData); | ||
154 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
155 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
156 | msg->nextBlockFast(_PREHASH_Data); | ||
157 | msg->addUUIDFast(_PREHASH_ObjectID, id); | ||
158 | msg->addU32Fast(_PREHASH_ObjectPermissions, U32_MAX); | ||
159 | gAgent.sendReliableMessage(); | ||
160 | } | ||
161 | } | ||
162 | } | ||
163 | |||
164 | void JCFloaterAnimList::StopRevokeSelected(void *userdata ) | ||
165 | { | ||
166 | StopSelected(userdata); | ||
167 | RevokeSelected(userdata); | ||
168 | } | ||
169 | |||
170 | void JCFloaterAnimList::OpenProfile(void *userdata ) | ||
171 | { | ||
172 | JCFloaterAnimList *self = (JCFloaterAnimList*)userdata; | ||
173 | std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected(); | ||
174 | if(!items.empty()) | ||
175 | { | ||
176 | //LLVOAvatar* avatarp = gAgent.getAvatarObject(); | ||
177 | for(std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); ++itr) | ||
178 | { | ||
179 | LLScrollListItem *item = *itr; | ||
180 | const LLUUID &object_id = item->getColumn(LIST_OBJECT_UUID)->getValue().asUUID(); | ||
181 | LLFloaterAvatarInfo::showFromDirectory(self->mObjectOwners[object_id].owner_id); | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | |||
186 | /*void JCFloaterAnimList::ReturnSelected(void *userdata ) | ||
187 | { | ||
188 | JCFloaterAnimList *self = (JCFloaterAnimList*)userdata; | ||
189 | LLDynamicArray<LLUUID> ids = self->mAnimList->getSelectedIDs(); | ||
190 | if(ids.size() > 0) | ||
191 | { | ||
192 | LLVOAvatar* avatarp = gAgent.getAvatarObject(); | ||
193 | for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr) | ||
194 | { | ||
195 | LLUUID id = *itr; | ||
196 | |||
197 | } | ||
198 | } | ||
199 | }*/ | ||
200 | |||
201 | void JCFloaterAnimList::draw() | ||
202 | { | ||
203 | refresh(); | ||
204 | LLFloater::draw(); | ||
205 | } | ||
206 | //LLScrollListCtrl::getSelectedIDs(); | ||
207 | void JCFloaterAnimList::refresh() | ||
208 | { | ||
209 | LLDynamicArray<LLUUID> selected = mAnimList->getSelectedIDs(); | ||
210 | S32 scrollpos = mAnimList->getScrollPos(); | ||
211 | mAnimList->deleteAllItems(); | ||
212 | LLVOAvatar* avatarp = gAgent.getAvatarObject(); | ||
213 | if (avatarp) | ||
214 | { | ||
215 | LLVOAvatar::AnimSourceIterator ai; | ||
216 | |||
217 | for(ai = avatarp->mAnimationSources.begin(); ai != avatarp->mAnimationSources.end(); ++ai) | ||
218 | { | ||
219 | LLSD element; | ||
220 | const LLUUID &aifirst = ai->first; | ||
221 | LLViewerInventoryItem* item = gInventory.getItem(findItemID(ai->second,0)); | ||
222 | |||
223 | // *NOTE: conceal id to prevent bugs, use | ||
224 | // item->getColumn(LIST_ANIMATION_UUID)->getValue().asUUID() | ||
225 | // instead | ||
226 | element["id"] = LLUUID::null.combine(ai->second); | ||
227 | element["columns"][LIST_ANIMATION_NAME]["column"] = "Anim Name"; | ||
228 | element["columns"][LIST_ANIMATION_NAME]["type"] = "text"; | ||
229 | element["columns"][LIST_ANIMATION_NAME]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
230 | if(item) | ||
231 | { | ||
232 | element["columns"][LIST_ANIMATION_NAME]["value"] = item->getName();//ai->second//"avatar_icon"; | ||
233 | }else | ||
234 | { | ||
235 | element["columns"][LIST_ANIMATION_NAME]["value"] = "Not in Inventory"; | ||
236 | } | ||
237 | element["columns"][LIST_ANIMATION_UUID]["column"] = "Animation UUID"; | ||
238 | element["columns"][LIST_ANIMATION_UUID]["type"] = "text"; | ||
239 | element["columns"][LIST_ANIMATION_UUID]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
240 | element["columns"][LIST_ANIMATION_UUID]["value"] = ai->second; | ||
241 | element["columns"][LIST_OBJECT_UUID]["column"] = "Source Object UUID"; | ||
242 | element["columns"][LIST_OBJECT_UUID]["type"] = "text"; | ||
243 | element["columns"][LIST_OBJECT_UUID]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
244 | element["columns"][LIST_OBJECT_UUID]["value"] = aifirst; | ||
245 | element["columns"][LIST_OBJECT_OWNER]["column"] = "Source Owner"; | ||
246 | element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; | ||
247 | element["columns"][LIST_OBJECT_OWNER]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
248 | std::string name("?"); | ||
249 | LLViewerObject *object = gObjectList.findObject(aifirst); | ||
250 | bool is_first = ( mObjectOwners.count( aifirst ) == 0 ); | ||
251 | bool just_shown = false; | ||
252 | LLUUID owner_id(LLUUID::null); | ||
253 | |||
254 | if( !is_first ) | ||
255 | { | ||
256 | name = mObjectOwners[aifirst].owner_name; | ||
257 | owner_id = mObjectOwners[aifirst].owner_id; | ||
258 | } | ||
259 | |||
260 | if( object ) | ||
261 | { | ||
262 | if( object->permYouOwner() ) | ||
263 | { | ||
264 | owner_id = gAgent.getID(); | ||
265 | gAgent.getName(name); | ||
266 | } | ||
267 | else | ||
268 | { | ||
269 | object = (LLViewerObject *) object->getRoot(); | ||
270 | if( object->isAvatar() ) | ||
271 | { | ||
272 | owner_id = object->getID(); | ||
273 | name = ((LLVOAvatar *)object)->getFullname(); | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | |||
278 | { | ||
279 | AObjectData &data = mObjectOwners[aifirst]; | ||
280 | if( object ) | ||
281 | { | ||
282 | if( !data.in_object_list ) | ||
283 | { | ||
284 | just_shown = true; | ||
285 | data.in_object_list = true; | ||
286 | } | ||
287 | data.root_id = ( (LLViewerObject*)object->getRoot() )->getID(); | ||
288 | } | ||
289 | data.owner_name = name; | ||
290 | data.owner_id = owner_id; | ||
291 | } | ||
292 | |||
293 | if( is_first || just_shown ) { | ||
294 | if( name == "?" && !aifirst.isNull()) { | ||
295 | LLMessageSystem* msg = gMessageSystem; | ||
296 | msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily); | ||
297 | msg->nextBlockFast(_PREHASH_AgentData); | ||
298 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
299 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
300 | msg->nextBlockFast(_PREHASH_ObjectData); | ||
301 | msg->addU32Fast(_PREHASH_RequestFlags, 0 ); | ||
302 | if( object ) | ||
303 | { | ||
304 | LL_INFOS("Avatar List") << "Sending RequestObjectPropertiesFamily packet for id( " << aifirst.asString() << " ) on object( " << object->getID().asString() << " )" << LL_ENDL; | ||
305 | msg->addUUIDFast(_PREHASH_ObjectID, object->getID()); | ||
306 | } | ||
307 | else | ||
308 | { | ||
309 | LL_INFOS("Avatar List") << "Sending RequestObjectPropertiesFamily packet for id( " << aifirst.asString() << " )" << LL_ENDL; | ||
310 | msg->addUUIDFast(_PREHASH_ObjectID, aifirst); | ||
311 | } | ||
312 | gAgent.sendReliableMessage(); | ||
313 | } | ||
314 | } | ||
315 | element["columns"][LIST_OBJECT_OWNER]["value"] = name; | ||
316 | mAnimList->addElement(element, ADD_BOTTOM); | ||
317 | //LLViewerObject* objectp = gObjectList.findObject(ai->first); | ||
318 | //if(objectp) | ||
319 | //{ | ||
320 | // //objectp-> | ||
321 | //} | ||
322 | |||
323 | //object_ids.insert(ai->first); | ||
324 | //animation_ids.insert(ai->second); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | mAnimList->sortItems(); | ||
329 | mAnimList->selectMultiple(selected); | ||
330 | mAnimList->setScrollPos(scrollpos); | ||
331 | } | ||
332 | |||
333 | void JCFloaterAnimList::callbackLoadOwnerName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data) | ||
334 | { | ||
335 | LLUUID *oid = (LLUUID*)data; | ||
336 | JCFloaterAnimList *self = JCFloaterAnimList::getInstance(LLSD()); | ||
337 | if(self->mObjectOwners.count( *oid ) > 0) | ||
338 | { | ||
339 | self->mObjectOwners[*oid].owner_name = first + " " + last; | ||
340 | } | ||
341 | delete oid; | ||
342 | } | ||
343 | |||
344 | void JCFloaterAnimList::processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data) | ||
345 | { | ||
346 | if(!JCFloaterAnimList::instanceVisible(LLSD())) return; | ||
347 | JCFloaterAnimList *self = JCFloaterAnimList::getInstance(LLSD()); | ||
348 | LLUUID object_id; | ||
349 | U32 request_flags; | ||
350 | LLUUID creator_id; | ||
351 | LLUUID owner_id; | ||
352 | LLUUID group_id; | ||
353 | LLUUID extra_id; | ||
354 | U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask; | ||
355 | LLSaleInfo sale_info; | ||
356 | LLCategory category; | ||
357 | msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_RequestFlags, request_flags ); | ||
358 | msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, object_id ); | ||
359 | msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id ); | ||
360 | msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id ); | ||
361 | msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask ); | ||
362 | msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask ); | ||
363 | msg->getU32Fast(_PREHASH_ObjectData,_PREHASH_GroupMask, group_mask ); | ||
364 | msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask ); | ||
365 | msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask); | ||
366 | sale_info.unpackMessage(msg, _PREHASH_ObjectData); | ||
367 | category.unpackMessage(msg, _PREHASH_ObjectData); | ||
368 | LLUUID last_owner_id; | ||
369 | msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id ); | ||
370 | std::string name; | ||
371 | msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name); | ||
372 | std::string desc; | ||
373 | msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc); | ||
374 | |||
375 | for( std::map<LLUUID, AObjectData>::iterator di = self->mObjectOwners.begin(); di != self->mObjectOwners.end(); di++ ) | ||
376 | { | ||
377 | const LLUUID &id = di->first; | ||
378 | const AObjectData &data = di->second; | ||
379 | |||
380 | if(data.root_id == object_id || data.owner_id == object_id) | ||
381 | { | ||
382 | LLUUID* ref = new LLUUID(id); | ||
383 | self->mObjectOwners[id].owner_id = owner_id; | ||
384 | gCacheName->get(owner_id, FALSE, callbackLoadOwnerName, (void*)ref); | ||
385 | } | ||
386 | } | ||
387 | } | ||
388 | |||
389 | const LLUUID& JCFloaterAnimList::findItemID(const LLUUID& asset_id, BOOL copyable_only) | ||
390 | { | ||
391 | LLViewerInventoryCategory::cat_array_t cats; | ||
392 | LLViewerInventoryItem::item_array_t items; | ||
393 | LLAssetIDMatches asset_id_matches(asset_id); | ||
394 | gInventory.collectDescendentsIf(LLUUID::null, | ||
395 | cats, | ||
396 | items, | ||
397 | LLInventoryModel::INCLUDE_TRASH, | ||
398 | asset_id_matches); | ||
399 | |||
400 | if (items.count()) | ||
401 | { | ||
402 | // search for copyable version first | ||
403 | for (S32 i = 0; i < items.count(); i++) | ||
404 | { | ||
405 | LLInventoryItem* itemp = items[i]; | ||
406 | LLPermissions item_permissions = itemp->getPermissions(); | ||
407 | if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID())) | ||
408 | { | ||
409 | return itemp->getUUID(); | ||
410 | } | ||
411 | } | ||
412 | // otherwise just return first instance, unless copyable requested | ||
413 | if (copyable_only) | ||
414 | { | ||
415 | return LLUUID::null; | ||
416 | } | ||
417 | else | ||
418 | { | ||
419 | return items[0]->getUUID(); | ||
420 | } | ||
421 | } | ||
422 | |||
423 | return LLUUID::null; | ||
424 | } | ||
425 | |||
426 | /*void JCFloaterAnimList::onClickCopyAnimationUUID(void *userdata) | ||
427 | { | ||
428 | LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata; | ||
429 | LLScrollListItem *item = self->mAvatarList->getFirstSelected(); | ||
430 | |||
431 | if ( NULL == item ) return; | ||
432 | |||
433 | LLUUID agent_id = item->getUUID(); | ||
434 | |||
435 | char buffer[UUID_STR_LENGTH]; | ||
436 | agent_id.toString(buffer); | ||
437 | |||
438 | gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer)); | ||
439 | }*/ | ||
440 | |||
441 | void JCFloaterAnimList::onDoubleClick(void *userdata) | ||
442 | { | ||
443 | //JCFloaterAnimList *self = (JCFloaterAnimList*)userdata; | ||
444 | //LLScrollListItem *item = self->mAnimList->getFirstSelected(); | ||
445 | //if(!item)return; | ||
446 | //LLUUID agent_id = item->getUUID(); | ||
447 | |||
448 | //gAgent.setFocusObject(gObjectList.findObject(agent_id)); | ||
449 | //gAgent.setFocusOnAvatar(FALSE, TRUE); | ||
450 | } | ||
451 | |||
452 | void JCFloaterAnimList::close(bool app) | ||
453 | { | ||
454 | //sInstance->setVisible(0); | ||
455 | //#ifdef RECONSTRUCT_ON_TOGGLE | ||
456 | // sInstance = NULL; | ||
457 | LLFloater::close(app); | ||
458 | //#else | ||
459 | // sInstance->setVisible(!(sInstance->getVisible())); | ||
460 | //#endif | ||
461 | } | ||
462 | |||
diff --git a/linden/indra/newview/jcfloater_animation_list.h b/linden/indra/newview/jcfloater_animation_list.h new file mode 100644 index 0000000..61bf635 --- /dev/null +++ b/linden/indra/newview/jcfloater_animation_list.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* Copyright (c) 2009 | ||
2 | * | ||
3 | * Modular Systems Ltd. All rights reserved. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or | ||
6 | * without modification, are permitted provided that the following | ||
7 | * conditions are met: | ||
8 | * | ||
9 | * 1. Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * 2. Redistributions in binary form must reproduce the above | ||
12 | * copyright notice, this list of conditions and the following | ||
13 | * disclaimer in the documentation and/or other materials provided | ||
14 | * with the distribution. | ||
15 | * 3. Neither the name Modular Systems Ltd nor the names of its contributors | ||
16 | * may be used to endorse or promote products derived from this | ||
17 | * software without specific prior written permission. | ||
18 | * | ||
19 | * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS "AS IS" | ||
20 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||
21 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS | ||
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | ||
29 | * THE POSSIBILITY OF SUCH DAMAGE. | ||
30 | */ | ||
31 | |||
32 | #include "llfloater.h" | ||
33 | #include "lluuid.h" | ||
34 | #include "llstring.h" | ||
35 | |||
36 | struct AObjectData | ||
37 | { | ||
38 | std::string owner_name; | ||
39 | LLUUID owner_id; | ||
40 | LLUUID root_id; | ||
41 | bool in_object_list; | ||
42 | }; | ||
43 | |||
44 | class JCFloaterAnimList : public LLFloater, public LLUISingleton<JCFloaterAnimList, JCFloaterAnimList> | ||
45 | { | ||
46 | public: | ||
47 | JCFloaterAnimList(const LLSD& seed); | ||
48 | virtual ~JCFloaterAnimList(); | ||
49 | |||
50 | /*virtual*/ BOOL postBuild(); | ||
51 | /*virtual*/ void draw(); | ||
52 | /*virtual*/ void onVisibilityChange(BOOL new_visibility); | ||
53 | |||
54 | /*virtual*/ void close(bool app = 0); | ||
55 | void refresh(); | ||
56 | |||
57 | const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only); | ||
58 | |||
59 | static void callbackLoadOwnerName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data); | ||
60 | |||
61 | static void processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data); | ||
62 | |||
63 | static bool visible(LLFloater* instance, const LLSD& key); | ||
64 | static void show(LLFloater* instance, const LLSD& key); | ||
65 | static void hide(LLFloater* instance, const LLSD& key); | ||
66 | |||
67 | private: | ||
68 | |||
69 | enum ANIMATION_COLUMN_ORDER | ||
70 | { | ||
71 | LIST_ANIMATION_NAME, | ||
72 | LIST_ANIMATION_UUID, | ||
73 | LIST_OBJECT_UUID, | ||
74 | LIST_OBJECT_OWNER | ||
75 | }; | ||
76 | |||
77 | LLScrollListCtrl* mAnimList; | ||
78 | |||
79 | std::map<LLUUID, AObjectData> mObjectOwners; | ||
80 | |||
81 | static void StopSelected(void *userdata ); | ||
82 | static void RevokeSelected(void *userdata ); | ||
83 | static void StopRevokeSelected(void *userdata ); | ||
84 | static void OpenProfile(void *userdata ); | ||
85 | static void onDoubleClick(void *userdata); | ||
86 | |||
87 | }; | ||
88 | |||
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index 1193d22..b3321fc 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp | |||
@@ -192,6 +192,8 @@ const F32 OBJECT_MIN_ZOOM = 0.02f; | |||
192 | const F32 APPEARANCE_MIN_ZOOM = 0.39f; | 192 | const F32 APPEARANCE_MIN_ZOOM = 0.39f; |
193 | const F32 APPEARANCE_MAX_ZOOM = 8.f; | 193 | const F32 APPEARANCE_MAX_ZOOM = 8.f; |
194 | 194 | ||
195 | const F32 DIST_FUDGE = 16.f; // meters | ||
196 | |||
195 | // fidget constants | 197 | // fidget constants |
196 | const F32 MIN_FIDGET_TIME = 8.f; // seconds | 198 | const F32 MIN_FIDGET_TIME = 8.f; // seconds |
197 | const F32 MAX_FIDGET_TIME = 20.f; // seconds | 199 | const F32 MAX_FIDGET_TIME = 20.f; // seconds |
@@ -216,6 +218,7 @@ LLAgent gAgent; | |||
216 | // | 218 | // |
217 | // Statics | 219 | // Statics |
218 | // | 220 | // |
221 | BOOL LLAgent::sPhantom = FALSE; | ||
219 | 222 | ||
220 | const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; | 223 | const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; |
221 | 224 | ||
@@ -452,6 +455,10 @@ void LLAgent::init() | |||
452 | //----------------------------------------------------------------------------- | 455 | //----------------------------------------------------------------------------- |
453 | void LLAgent::cleanup() | 456 | void LLAgent::cleanup() |
454 | { | 457 | { |
458 | mInitialized = FALSE; | ||
459 | mWearablesLoaded = FALSE; | ||
460 | mShowAvatar = TRUE; | ||
461 | |||
455 | setSitCamera(LLUUID::null); | 462 | setSitCamera(LLUUID::null); |
456 | mAvatarObject = NULL; | 463 | mAvatarObject = NULL; |
457 | if(mLookAt) | 464 | if(mLookAt) |
@@ -751,6 +758,9 @@ void LLAgent::movePitch(S32 direction) | |||
751 | // Does this parcel allow you to fly? | 758 | // Does this parcel allow you to fly? |
752 | BOOL LLAgent::canFly() | 759 | BOOL LLAgent::canFly() |
753 | { | 760 | { |
761 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
762 | if (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) return FALSE; | ||
763 | // [/RLVa:KB] | ||
754 | if (isGodlike()) return TRUE; | 764 | if (isGodlike()) return TRUE; |
755 | 765 | ||
756 | LLViewerRegion* regionp = getRegion(); | 766 | LLViewerRegion* regionp = getRegion(); |
@@ -790,6 +800,13 @@ void LLAgent::setFlying(BOOL fly) | |||
790 | 800 | ||
791 | if (fly) | 801 | if (fly) |
792 | { | 802 | { |
803 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
804 | if (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) | ||
805 | { | ||
806 | return; | ||
807 | } | ||
808 | // [/RLVa:KB] | ||
809 | |||
793 | BOOL was_flying = getFlying(); | 810 | BOOL was_flying = getFlying(); |
794 | if (!canFly() && !was_flying) | 811 | if (!canFly() && !was_flying) |
795 | { | 812 | { |
@@ -829,6 +846,35 @@ void LLAgent::toggleFlying() | |||
829 | 846 | ||
830 | 847 | ||
831 | //----------------------------------------------------------------------------- | 848 | //----------------------------------------------------------------------------- |
849 | // togglePhantom() | ||
850 | //----------------------------------------------------------------------------- | ||
851 | void LLAgent::togglePhantom() | ||
852 | { | ||
853 | BOOL phan = !(sPhantom); | ||
854 | |||
855 | setPhantom( phan ); | ||
856 | } | ||
857 | |||
858 | |||
859 | //----------------------------------------------------------------------------- | ||
860 | // setPhantom() lgg | ||
861 | //----------------------------------------------------------------------------- | ||
862 | void LLAgent::setPhantom(BOOL phantom) | ||
863 | { | ||
864 | sPhantom = phantom; | ||
865 | } | ||
866 | |||
867 | |||
868 | //----------------------------------------------------------------------------- | ||
869 | // getPhantom() lgg | ||
870 | //----------------------------------------------------------------------------- | ||
871 | BOOL LLAgent::getPhantom() | ||
872 | { | ||
873 | return sPhantom; | ||
874 | } | ||
875 | |||
876 | |||
877 | //----------------------------------------------------------------------------- | ||
832 | // setRegion() | 878 | // setRegion() |
833 | //----------------------------------------------------------------------------- | 879 | //----------------------------------------------------------------------------- |
834 | void LLAgent::setRegion(LLViewerRegion *regionp) | 880 | void LLAgent::setRegion(LLViewerRegion *regionp) |
@@ -1670,6 +1716,10 @@ F32 LLAgent::getCameraZoomFraction() | |||
1670 | // already [0,1] | 1716 | // already [0,1] |
1671 | return mHUDTargetZoom; | 1717 | return mHUDTargetZoom; |
1672 | } | 1718 | } |
1719 | else if (gSavedSettings.getBOOL("DisableCameraConstraints")) | ||
1720 | { | ||
1721 | return mCameraZoomFraction; | ||
1722 | } | ||
1673 | else if (mFocusOnAvatar && cameraThirdPerson()) | 1723 | else if (mFocusOnAvatar && cameraThirdPerson()) |
1674 | { | 1724 | { |
1675 | return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f); | 1725 | return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f); |
@@ -1682,7 +1732,6 @@ F32 LLAgent::getCameraZoomFraction() | |||
1682 | else | 1732 | else |
1683 | { | 1733 | { |
1684 | F32 min_zoom; | 1734 | F32 min_zoom; |
1685 | const F32 DIST_FUDGE = 16.f; // meters | ||
1686 | F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, | 1735 | F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, |
1687 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, | 1736 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, |
1688 | MAX_CAMERA_DISTANCE_FROM_AGENT); | 1737 | MAX_CAMERA_DISTANCE_FROM_AGENT); |
@@ -1731,10 +1780,9 @@ void LLAgent::setCameraZoomFraction(F32 fraction) | |||
1731 | else | 1780 | else |
1732 | { | 1781 | { |
1733 | F32 min_zoom = LAND_MIN_ZOOM; | 1782 | F32 min_zoom = LAND_MIN_ZOOM; |
1734 | const F32 DIST_FUDGE = 16.f; // meters | ||
1735 | F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, | 1783 | F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, |
1736 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, | 1784 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, |
1737 | MAX_CAMERA_DISTANCE_FROM_AGENT); | 1785 | MAX_CAMERA_DISTANCE_FROM_AGENT); |
1738 | 1786 | ||
1739 | if (mFocusObject.notNull()) | 1787 | if (mFocusObject.notNull()) |
1740 | { | 1788 | { |
@@ -1753,7 +1801,14 @@ void LLAgent::setCameraZoomFraction(F32 fraction) | |||
1753 | 1801 | ||
1754 | LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; | 1802 | LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; |
1755 | camera_offset_dir.normalize(); | 1803 | camera_offset_dir.normalize(); |
1756 | mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom); | 1804 | if (gSavedSettings.getBOOL("DisableCameraConstraints")) |
1805 | { | ||
1806 | mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 262140.f, 1.f, min_zoom); | ||
1807 | } | ||
1808 | else | ||
1809 | { | ||
1810 | mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom); | ||
1811 | } | ||
1757 | } | 1812 | } |
1758 | startCameraAnimation(); | 1813 | startCameraAnimation(); |
1759 | } | 1814 | } |
@@ -1852,29 +1907,32 @@ void LLAgent::cameraZoomIn(const F32 fraction) | |||
1852 | } | 1907 | } |
1853 | } | 1908 | } |
1854 | 1909 | ||
1855 | new_distance = llmax(new_distance, min_zoom); | ||
1856 | |||
1857 | // Don't zoom too far back | 1910 | // Don't zoom too far back |
1858 | const F32 DIST_FUDGE = 16.f; // meters | 1911 | // Actually, let's when disable camera constraints is active -- McCabe |
1859 | F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, | 1912 | if (!gSavedSettings.getBOOL("DisableCameraConstraints")) |
1860 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); | ||
1861 | |||
1862 | if (new_distance > max_distance) | ||
1863 | { | 1913 | { |
1864 | new_distance = max_distance; | 1914 | new_distance = llmax(new_distance, min_zoom); |
1865 | 1915 | ||
1866 | /* | 1916 | F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, |
1867 | // Unless camera is unlocked | 1917 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); |
1868 | if (!LLViewerCamera::sDisableCameraConstraints) | 1918 | |
1919 | if (new_distance > max_distance) | ||
1869 | { | 1920 | { |
1870 | return; | 1921 | new_distance = max_distance; |
1922 | |||
1923 | /* | ||
1924 | // Unless camera is unlocked | ||
1925 | if (!LLViewerCamera::sDisableCameraConstraints) | ||
1926 | { | ||
1927 | return; | ||
1928 | } | ||
1929 | */ | ||
1871 | } | 1930 | } |
1872 | */ | ||
1873 | } | ||
1874 | 1931 | ||
1875 | if( cameraCustomizeAvatar() ) | 1932 | if( cameraCustomizeAvatar() ) |
1876 | { | 1933 | { |
1877 | new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); | 1934 | new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); |
1935 | } | ||
1878 | } | 1936 | } |
1879 | 1937 | ||
1880 | mCameraFocusOffsetTarget = new_distance * camera_offset_unit; | 1938 | mCameraFocusOffsetTarget = new_distance * camera_offset_unit; |
@@ -1905,40 +1963,41 @@ void LLAgent::cameraOrbitIn(const F32 meters) | |||
1905 | LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); | 1963 | LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); |
1906 | F32 current_distance = (F32)camera_offset_unit.normalize(); | 1964 | F32 current_distance = (F32)camera_offset_unit.normalize(); |
1907 | F32 new_distance = current_distance - meters; | 1965 | F32 new_distance = current_distance - meters; |
1908 | F32 min_zoom = LAND_MIN_ZOOM; | 1966 | |
1909 | 1967 | // Don't zoom too far back | |
1910 | // Don't move through focus point | 1968 | // Actually, let's when disable camera constraints is active -- McCabe |
1911 | if (mFocusObject.notNull()) | 1969 | if (!gSavedSettings.getBOOL("DisableCameraConstraints")) |
1912 | { | 1970 | { |
1913 | if (mFocusObject->isAvatar()) | 1971 | F32 min_zoom = LAND_MIN_ZOOM; |
1914 | { | 1972 | F32 max_distance; |
1915 | min_zoom = AVATAR_MIN_ZOOM; | 1973 | |
1916 | } | 1974 | // Don't move through focus point |
1917 | else | 1975 | if (mFocusObject.notNull()) |
1918 | { | 1976 | { |
1919 | min_zoom = OBJECT_MIN_ZOOM; | 1977 | if (mFocusObject->isAvatar()) |
1978 | { | ||
1979 | min_zoom = AVATAR_MIN_ZOOM; | ||
1980 | } | ||
1981 | else | ||
1982 | { | ||
1983 | min_zoom = OBJECT_MIN_ZOOM; | ||
1984 | } | ||
1920 | } | 1985 | } |
1921 | } | ||
1922 | 1986 | ||
1923 | new_distance = llmax(new_distance, min_zoom); | 1987 | new_distance = llmax(new_distance, min_zoom); |
1924 | 1988 | ||
1925 | // Don't zoom too far back | 1989 | max_distance = llmin(mDrawDistance - DIST_FUDGE, |
1926 | const F32 DIST_FUDGE = 16.f; // meters | 1990 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); |
1927 | F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, | ||
1928 | LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); | ||
1929 | 1991 | ||
1930 | if (new_distance > max_distance) | 1992 | if (new_distance > max_distance) |
1931 | { | ||
1932 | // Unless camera is unlocked | ||
1933 | if (!gSavedSettings.getBOOL("DisableCameraConstraints")) | ||
1934 | { | 1993 | { |
1935 | return; | 1994 | return; |
1936 | } | 1995 | } |
1937 | } | ||
1938 | 1996 | ||
1939 | if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) | 1997 | if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) |
1940 | { | 1998 | { |
1941 | new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); | 1999 | new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); |
2000 | } | ||
1942 | } | 2001 | } |
1943 | 2002 | ||
1944 | // Compute new camera offset | 2003 | // Compute new camera offset |
@@ -4214,6 +4273,13 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_ani | |||
4214 | return; | 4273 | return; |
4215 | } | 4274 | } |
4216 | 4275 | ||
4276 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
4277 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (mAvatarObject.notNull()) && (mAvatarObject->mIsSitting) ) | ||
4278 | { | ||
4279 | return; | ||
4280 | } | ||
4281 | // [/RLVa:KB] | ||
4282 | |||
4217 | setControlFlags(AGENT_CONTROL_STAND_UP); // force stand up | 4283 | setControlFlags(AGENT_CONTROL_STAND_UP); // force stand up |
4218 | gViewerWindow->getWindow()->resetBusyCount(); | 4284 | gViewerWindow->getWindow()->resetBusyCount(); |
4219 | 4285 | ||
@@ -5142,6 +5208,14 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO | |||
5142 | // utility to build a location string | 5208 | // utility to build a location string |
5143 | void LLAgent::buildLocationString(std::string& str) | 5209 | void LLAgent::buildLocationString(std::string& str) |
5144 | { | 5210 | { |
5211 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
5212 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
5213 | { | ||
5214 | str = rlv_handler_t::cstrHidden; | ||
5215 | return; | ||
5216 | } | ||
5217 | // [/RLVa:KB] | ||
5218 | |||
5145 | const LLVector3& agent_pos_region = getPositionAgent(); | 5219 | const LLVector3& agent_pos_region = getPositionAgent(); |
5146 | S32 pos_x = S32(agent_pos_region.mV[VX]); | 5220 | S32 pos_x = S32(agent_pos_region.mV[VX]); |
5147 | S32 pos_y = S32(agent_pos_region.mV[VY]); | 5221 | S32 pos_y = S32(agent_pos_region.mV[VY]); |
@@ -6035,6 +6109,15 @@ void LLAgent::teleportRequest( | |||
6035 | // Landmark ID = LLUUID::null means teleport home | 6109 | // Landmark ID = LLUUID::null means teleport home |
6036 | void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id) | 6110 | void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id) |
6037 | { | 6111 | { |
6112 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
6113 | if ( (rlv_handler_t::isEnabled()) && | ||
6114 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_TPLM)) || | ||
6115 | ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (mAvatarObject.notNull()) && (mAvatarObject->mIsSitting)) )) | ||
6116 | { | ||
6117 | return; | ||
6118 | } | ||
6119 | // [/RLVa:KB] | ||
6120 | |||
6038 | LLViewerRegion *regionp = getRegion(); | 6121 | LLViewerRegion *regionp = getRegion(); |
6039 | if(regionp && teleportCore()) | 6122 | if(regionp && teleportCore()) |
6040 | { | 6123 | { |
@@ -6099,6 +6182,17 @@ void LLAgent::teleportCancel() | |||
6099 | 6182 | ||
6100 | void LLAgent::teleportViaLocation(const LLVector3d& pos_global) | 6183 | void LLAgent::teleportViaLocation(const LLVector3d& pos_global) |
6101 | { | 6184 | { |
6185 | // [RLVa:KB] - Alternate: Snowglobe-1.0 | Checked: 2009-07-07 (RLVa-1.0.0d) | ||
6186 | // If we're getting teleported due to @tpto we should disregard any @tploc=n or @unsit=n restrictions from the same object | ||
6187 | if ( (rlv_handler_t::isEnabled()) && | ||
6188 | ( (gRlvHandler.hasBehaviourExcept(RLV_BHVR_TPLOC, gRlvHandler.getCurrentObject())) || | ||
6189 | ( (mAvatarObject.notNull()) && (mAvatarObject->mIsSitting) && | ||
6190 | (gRlvHandler.hasBehaviourExcept(RLV_BHVR_UNSIT, gRlvHandler.getCurrentObject()))) ) ) | ||
6191 | { | ||
6192 | return; | ||
6193 | } | ||
6194 | // [/RLVa:KB] | ||
6195 | |||
6102 | LLViewerRegion* regionp = getRegion(); | 6196 | LLViewerRegion* regionp = getRegion(); |
6103 | LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); | 6197 | LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); |
6104 | if(regionp && info) | 6198 | if(regionp && info) |
@@ -6175,6 +6269,13 @@ void LLAgent::setTeleportState(ETeleportState state) | |||
6175 | // We're outa here. Save "back" slurl. | 6269 | // We're outa here. Save "back" slurl. |
6176 | mTeleportSourceSLURL = getSLURL(); | 6270 | mTeleportSourceSLURL = getSLURL(); |
6177 | } | 6271 | } |
6272 | |||
6273 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b | ||
6274 | if ( (rlv_handler_t::isEnabled()) && (TELEPORT_NONE == mTeleportState) ) | ||
6275 | { | ||
6276 | gRlvHandler.setCanCancelTp(true); | ||
6277 | } | ||
6278 | // [/RLVa:KB] | ||
6178 | } | 6279 | } |
6179 | 6280 | ||
6180 | void LLAgent::stopCurrentAnimations() | 6281 | void LLAgent::stopCurrentAnimations() |
@@ -6742,11 +6843,19 @@ BOOL LLAgent::isWearingItem( const LLUUID& item_id ) | |||
6742 | // static | 6843 | // static |
6743 | void LLAgent::processAgentInitialWearablesUpdate( LLMessageSystem* mesgsys, void** user_data ) | 6844 | void LLAgent::processAgentInitialWearablesUpdate( LLMessageSystem* mesgsys, void** user_data ) |
6744 | { | 6845 | { |
6846 | if (gNoRender) | ||
6847 | { | ||
6848 | return; | ||
6849 | } | ||
6850 | |||
6745 | // We should only receive this message a single time. Ignore subsequent AgentWearablesUpdates | 6851 | // We should only receive this message a single time. Ignore subsequent AgentWearablesUpdates |
6746 | // that may result from AgentWearablesRequest having been sent more than once. | 6852 | // that may result from AgentWearablesRequest having been sent more than once. |
6853 | // If we do this, then relogging won't work. - Gigs | ||
6854 | /* | ||
6747 | static bool first = true; | 6855 | static bool first = true; |
6748 | if (!first) return; | 6856 | if (!first) return; |
6749 | first = false; | 6857 | first = false; |
6858 | */ | ||
6750 | 6859 | ||
6751 | LLUUID agent_id; | 6860 | LLUUID agent_id; |
6752 | gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); | 6861 | gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); |
@@ -6804,10 +6913,17 @@ void LLAgent::processAgentInitialWearablesUpdate( LLMessageSystem* mesgsys, void | |||
6804 | } | 6913 | } |
6805 | 6914 | ||
6806 | // now that we have the asset ids...request the wearable assets | 6915 | // now that we have the asset ids...request the wearable assets |
6916 | // [RLVa:KB] - Checked: 2009-08-08 (RLVa-1.0.1g) | Added: RLVa-1.0.1g | ||
6917 | LLInventoryFetchObserver::item_ref_t rlvItems; | ||
6918 | // [/RLVa:KB] | ||
6807 | for( i = 0; i < WT_COUNT; i++ ) | 6919 | for( i = 0; i < WT_COUNT; i++ ) |
6808 | { | 6920 | { |
6809 | if( !gAgent.mWearableEntry[i].mItemID.isNull() ) | 6921 | if( !gAgent.mWearableEntry[i].mItemID.isNull() ) |
6810 | { | 6922 | { |
6923 | // [RLVa:KB] - Checked: 2009-08-08 (RLVa-1.0.1g) | Added: RLVa-1.0.1g | ||
6924 | if (rlv_handler_t::isEnabled()) | ||
6925 | rlvItems.push_back(gAgent.mWearableEntry[i].mItemID); | ||
6926 | // [/RLVa:KB] | ||
6811 | gWearableList.getAsset( | 6927 | gWearableList.getAsset( |
6812 | asset_id_array[i], | 6928 | asset_id_array[i], |
6813 | LLStringUtil::null, | 6929 | LLStringUtil::null, |
@@ -6815,6 +6931,15 @@ void LLAgent::processAgentInitialWearablesUpdate( LLMessageSystem* mesgsys, void | |||
6815 | LLAgent::onInitialWearableAssetArrived, (void*)(intptr_t)i ); | 6931 | LLAgent::onInitialWearableAssetArrived, (void*)(intptr_t)i ); |
6816 | } | 6932 | } |
6817 | } | 6933 | } |
6934 | |||
6935 | // [RLVa:KB] - Checked: 2009-08-08 (RLVa-1.0.1g) | Added: RLVa-1.0.1g | ||
6936 | // TODO-RLVa: checking that we're in STATE_STARTED is probably not needed, but leave it until we can be absolutely sure | ||
6937 | if ( (rlv_handler_t::isEnabled()) && (LLStartUp::getStartupState() == STATE_STARTED) ) | ||
6938 | { | ||
6939 | RlvCurrentlyWorn f; | ||
6940 | f.fetchItems(rlvItems); | ||
6941 | } | ||
6942 | // [/RLVa:KB] | ||
6818 | } | 6943 | } |
6819 | } | 6944 | } |
6820 | 6945 | ||
@@ -7314,6 +7439,13 @@ void LLAgent::removeWearable( EWearableType type ) | |||
7314 | return; | 7439 | return; |
7315 | } | 7440 | } |
7316 | 7441 | ||
7442 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-07 (RLVa-1.0.0d) | ||
7443 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isRemovable(type)) ) | ||
7444 | { | ||
7445 | return; | ||
7446 | } | ||
7447 | // [/RLVa:KB] | ||
7448 | |||
7317 | if( old_wearable ) | 7449 | if( old_wearable ) |
7318 | { | 7450 | { |
7319 | if( old_wearable->isDirty() ) | 7451 | if( old_wearable->isDirty() ) |
@@ -7440,15 +7572,17 @@ void LLAgent::setWearableOutfit( | |||
7440 | wearables_to_remove[WT_SKIN] = FALSE; | 7572 | wearables_to_remove[WT_SKIN] = FALSE; |
7441 | wearables_to_remove[WT_HAIR] = FALSE; | 7573 | wearables_to_remove[WT_HAIR] = FALSE; |
7442 | wearables_to_remove[WT_EYES] = FALSE; | 7574 | wearables_to_remove[WT_EYES] = FALSE; |
7443 | wearables_to_remove[WT_SHIRT] = remove; | 7575 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a |
7444 | wearables_to_remove[WT_PANTS] = remove; | 7576 | wearables_to_remove[WT_SHIRT] = remove && gRlvHandler.isRemovable(WT_SHIRT); |
7445 | wearables_to_remove[WT_SHOES] = remove; | 7577 | wearables_to_remove[WT_PANTS] = remove && gRlvHandler.isRemovable(WT_PANTS); |
7446 | wearables_to_remove[WT_SOCKS] = remove; | 7578 | wearables_to_remove[WT_SHOES] = remove && gRlvHandler.isRemovable(WT_SHOES); |
7447 | wearables_to_remove[WT_JACKET] = remove; | 7579 | wearables_to_remove[WT_SOCKS] = remove && gRlvHandler.isRemovable(WT_SOCKS); |
7448 | wearables_to_remove[WT_GLOVES] = remove; | 7580 | wearables_to_remove[WT_JACKET] = remove && gRlvHandler.isRemovable(WT_JACKET); |
7449 | wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) & remove; | 7581 | wearables_to_remove[WT_GLOVES] = remove && gRlvHandler.isRemovable(WT_GLOVES); |
7450 | wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) & remove; | 7582 | wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) && remove && gRlvHandler.isRemovable(WT_UNDERSHIRT); |
7451 | wearables_to_remove[WT_SKIRT] = remove; | 7583 | wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) && remove && gRlvHandler.isRemovable(WT_UNDERPANTS); |
7584 | wearables_to_remove[WT_SKIRT] = remove && gRlvHandler.isRemovable(WT_SKIRT); | ||
7585 | // [/RLVa:KB] | ||
7452 | 7586 | ||
7453 | S32 count = wearables.count(); | 7587 | S32 count = wearables.count(); |
7454 | llassert( items.count() == count ); | 7588 | llassert( items.count() == count ); |
@@ -7538,6 +7672,15 @@ void LLAgent::setWearable( LLInventoryItem* new_item, LLWearable* new_wearable ) | |||
7538 | EWearableType type = new_wearable->getType(); | 7672 | EWearableType type = new_wearable->getType(); |
7539 | 7673 | ||
7540 | LLWearable* old_wearable = mWearableEntry[ type ].mWearable; | 7674 | LLWearable* old_wearable = mWearableEntry[ type ].mWearable; |
7675 | |||
7676 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
7677 | // Block if: we can't wear on that layer; or we're already wearing something there we can't take off | ||
7678 | if ( (rlv_handler_t::isEnabled()) && ((!gRlvHandler.isWearable(type)) || ((old_wearable) && (!gRlvHandler.isRemovable(type)))) ) | ||
7679 | { | ||
7680 | return; | ||
7681 | } | ||
7682 | // [/RLVa:KB] | ||
7683 | |||
7541 | if( old_wearable ) | 7684 | if( old_wearable ) |
7542 | { | 7685 | { |
7543 | const LLUUID& old_item_id = mWearableEntry[ type ].mItemID; | 7686 | const LLUUID& old_item_id = mWearableEntry[ type ].mItemID; |
@@ -7750,10 +7893,13 @@ void LLAgent::userRemoveAllAttachments( void* userdata ) | |||
7750 | return; | 7893 | return; |
7751 | } | 7894 | } |
7752 | 7895 | ||
7753 | gMessageSystem->newMessage("ObjectDetach"); | 7896 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.0c |
7754 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | 7897 | // NOTE-RLVa: This function is called from inside RlvHandler as well, hence the rather heavy modifications |
7755 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); | 7898 | std::list<U32> rlvAttachments; |
7756 | gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | 7899 | // TODO-RLVa: Once we have the improved "removeWearable" logic implemented we can just get rid of the whole "rlvCompFolders" hassle |
7900 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
7901 | std::list<LLUUID> rlvCompFolders; | ||
7902 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
7757 | 7903 | ||
7758 | for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); | 7904 | for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); |
7759 | iter != avatarp->mAttachmentPoints.end(); ) | 7905 | iter != avatarp->mAttachmentPoints.end(); ) |
@@ -7763,11 +7909,78 @@ void LLAgent::userRemoveAllAttachments( void* userdata ) | |||
7763 | LLViewerObject* objectp = attachment->getObject(); | 7909 | LLViewerObject* objectp = attachment->getObject(); |
7764 | if (objectp) | 7910 | if (objectp) |
7765 | { | 7911 | { |
7912 | if (rlv_handler_t::isEnabled()) | ||
7913 | { | ||
7914 | if (!gRlvHandler.isDetachable(curiter->first)) | ||
7915 | continue; | ||
7916 | |||
7917 | // Check if we're being called in response to an RLV command (that would be @detach=force) | ||
7918 | if ( (gRlvHandler.getCurrentCommand()) && (attachment->getItemID().notNull()) ) | ||
7919 | { | ||
7920 | if (!gRlvHandler.isStrippable(attachment->getItemID())) // "nostrip" can be taken off by the user but not @detach | ||
7921 | continue; | ||
7922 | |||
7923 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
7924 | LLViewerInventoryCategory* pFolder; | ||
7925 | if (gRlvHandler.getCompositeInfo(attachment->getItemID(), NULL, &pFolder)) | ||
7926 | { | ||
7927 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
7928 | if (!gRlvHandler.canTakeOffComposite(pFolder)) | ||
7929 | continue; | ||
7930 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
7931 | |||
7932 | // The attachment belongs to a composite folder so there may be additional things we need to take off | ||
7933 | if (std::find(rlvCompFolders.begin(), rlvCompFolders.end(), pFolder->getUUID()) != rlvCompFolders.end()) | ||
7934 | rlvCompFolders.push_back(pFolder->getUUID()); | ||
7935 | } | ||
7936 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
7937 | } | ||
7938 | } | ||
7939 | rlvAttachments.push_back(objectp->getLocalID()); | ||
7940 | } | ||
7941 | } | ||
7942 | |||
7943 | // Only send the message if we actually have something to detach | ||
7944 | if (rlvAttachments.size() > 0) | ||
7945 | { | ||
7946 | gMessageSystem->newMessage("ObjectDetach"); | ||
7947 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | ||
7948 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); | ||
7949 | gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
7950 | |||
7951 | for (std::list<U32>::const_iterator itAttach = rlvAttachments.begin(); itAttach != rlvAttachments.end(); ++itAttach) | ||
7952 | { | ||
7766 | gMessageSystem->nextBlockFast(_PREHASH_ObjectData); | 7953 | gMessageSystem->nextBlockFast(_PREHASH_ObjectData); |
7767 | gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, objectp->getLocalID()); | 7954 | gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, *itAttach); |
7768 | } | 7955 | } |
7956 | |||
7957 | gMessageSystem->sendReliable( gAgent.getRegionHost() ); | ||
7769 | } | 7958 | } |
7770 | gMessageSystem->sendReliable( gAgent.getRegionHost() ); | 7959 | |
7960 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
7961 | if (rlv_handler_t::isEnabled) | ||
7962 | { | ||
7963 | // If we encountered any composite folders then we need to @detach all of them | ||
7964 | for (std::list<LLUUID>::const_iterator itFolder = rlvCompFolders.begin(); itFolder != rlvCompFolders.end(); ++itFolder) | ||
7965 | { | ||
7966 | std::string strFolder = gRlvHandler.getSharedPath(*itFolder); | ||
7967 | |||
7968 | // It shouldn't happen but make absolutely sure that we don't issue @detach:=force and reenter this function | ||
7969 | if (!strFolder.empty()) | ||
7970 | { | ||
7971 | std::string strCmd = "detach:" + strFolder + "=force"; | ||
7972 | #ifdef RLV_DEBUG | ||
7973 | RLV_INFOS << "\t- detaching composite folder: @" << strCmd << LL_ENDL; | ||
7974 | #endif // RLV_DEBUG | ||
7975 | |||
7976 | // HACK-RLV: executing a command while another command is currently executing isn't the best thing to do, however | ||
7977 | // in this specific case it is safe (and still better than making processForceCommand public) | ||
7978 | gRlvHandler.processCommand(gRlvHandler.getCurrentObject(), strCmd); | ||
7979 | } | ||
7980 | } | ||
7981 | } | ||
7982 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
7983 | // [/RLVa:KB] | ||
7771 | } | 7984 | } |
7772 | 7985 | ||
7773 | void LLAgent::observeFriends() | 7986 | void LLAgent::observeFriends() |
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h index 5e771e4..a6f1d74 100644 --- a/linden/indra/newview/llagent.h +++ b/linden/indra/newview/llagent.h | |||
@@ -69,6 +69,10 @@ | |||
69 | #include "llfollowcam.h" | 69 | #include "llfollowcam.h" |
70 | // end Ventrella | 70 | // end Ventrella |
71 | 71 | ||
72 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
73 | #include "rlvhandler.h" | ||
74 | // [/RLVa:KB] | ||
75 | |||
72 | const U8 AGENT_STATE_TYPING = 0x04; // Typing indication | 76 | const U8 AGENT_STATE_TYPING = 0x04; // Typing indication |
73 | const U8 AGENT_STATE_EDITING = 0x10; // Set when agent has objects selected | 77 | const U8 AGENT_STATE_EDITING = 0x10; // Set when agent has objects selected |
74 | 78 | ||
@@ -396,6 +400,11 @@ public: | |||
396 | // Does this parcel allow you to fly? | 400 | // Does this parcel allow you to fly? |
397 | BOOL canFly(); | 401 | BOOL canFly(); |
398 | 402 | ||
403 | //lgg crap | ||
404 | static BOOL getPhantom();// const { return emeraldPhantom; } | ||
405 | static void setPhantom(BOOL phantom); | ||
406 | static void togglePhantom(); | ||
407 | |||
399 | // Animation functions | 408 | // Animation functions |
400 | void stopCurrentAnimations(); | 409 | void stopCurrentAnimations(); |
401 | void requestStopMotion( LLMotion* motion ); | 410 | void requestStopMotion( LLMotion* motion ); |
@@ -824,6 +833,8 @@ private: | |||
824 | LLVector3d mCameraSmoothingLastPositionGlobal; | 833 | LLVector3d mCameraSmoothingLastPositionGlobal; |
825 | LLVector3d mCameraSmoothingLastPositionAgent; | 834 | LLVector3d mCameraSmoothingLastPositionAgent; |
826 | BOOL mCameraSmoothingStop; | 835 | BOOL mCameraSmoothingStop; |
836 | |||
837 | static BOOL sPhantom; | ||
827 | 838 | ||
828 | LLVector3 mCameraUpVector; // camera's up direction in world coordinates (determines the 'roll' of the view) | 839 | LLVector3 mCameraUpVector; // camera's up direction in world coordinates (determines the 'roll' of the view) |
829 | 840 | ||
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 58c1c2b..74fb563 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp | |||
@@ -127,6 +127,7 @@ | |||
127 | #include "llvectorperfoptions.h" | 127 | #include "llvectorperfoptions.h" |
128 | #include "llurlsimstring.h" | 128 | #include "llurlsimstring.h" |
129 | #include "llwatchdog.h" | 129 | #include "llwatchdog.h" |
130 | #include "llcallingcard.h" | ||
130 | 131 | ||
131 | // Included so that constants/settings might be initialized | 132 | // Included so that constants/settings might be initialized |
132 | // in save_settings_to_globals() | 133 | // in save_settings_to_globals() |
@@ -166,6 +167,10 @@ | |||
166 | 167 | ||
167 | #include "llcommandlineparser.h" | 168 | #include "llcommandlineparser.h" |
168 | 169 | ||
170 | #include "hippoGridManager.h" | ||
171 | #include "hippoLimits.h" | ||
172 | #include "hippoUpdate.h" | ||
173 | |||
169 | // *FIX: These extern globals should be cleaned up. | 174 | // *FIX: These extern globals should be cleaned up. |
170 | // The globals either represent state/config/resource-storage of either | 175 | // The globals either represent state/config/resource-storage of either |
171 | // this app, or another 'component' of the viewer. App globals should be | 176 | // this app, or another 'component' of the viewer. App globals should be |
@@ -187,22 +192,35 @@ | |||
187 | 192 | ||
188 | //---------------------------------------------------------------------------- | 193 | //---------------------------------------------------------------------------- |
189 | // viewer.cpp - these are only used in viewer, should be easily moved. | 194 | // viewer.cpp - these are only used in viewer, should be easily moved. |
195 | extern void disable_win_error_reporting(); | ||
190 | 196 | ||
191 | #if LL_DARWIN | 197 | #if LL_DARWIN |
198 | #include <Carbon/Carbon.h> | ||
192 | extern void init_apple_menu(const char* product); | 199 | extern void init_apple_menu(const char* product); |
200 | extern OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn); | ||
201 | extern OSErr AEQuitHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn); | ||
202 | extern OSStatus simpleDialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata); | ||
203 | #include <boost/tokenizer.hpp> | ||
193 | #endif // LL_DARWIN | 204 | #endif // LL_DARWIN |
194 | 205 | ||
206 | |||
195 | extern BOOL gRandomizeFramerate; | 207 | extern BOOL gRandomizeFramerate; |
196 | extern BOOL gPeriodicSlowFrame; | 208 | extern BOOL gPeriodicSlowFrame; |
197 | extern BOOL gDebugGL; | 209 | extern BOOL gDebugGL; |
198 | 210 | ||
199 | //////////////////////////////////////////////////////////// | 211 | //////////////////////////////////////////////////////////// |
200 | // All from the last globals push... | 212 | // All from the last globals push... |
213 | |||
214 | |||
201 | const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard | 215 | const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard |
202 | 216 | ||
203 | F32 gSimLastTime; // Used in LLAppViewer::init and send_stats() | 217 | F32 gSimLastTime; // Used in LLAppViewer::init and send_stats() |
204 | F32 gSimFrames; | 218 | F32 gSimFrames; |
205 | 219 | ||
220 | std::string gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle_startup | ||
221 | |||
222 | BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally | ||
223 | |||
206 | BOOL gAllowIdleAFK = TRUE; | 224 | BOOL gAllowIdleAFK = TRUE; |
207 | BOOL gAllowTapTapHoldRun = TRUE; | 225 | BOOL gAllowTapTapHoldRun = TRUE; |
208 | BOOL gShowObjectUpdates = FALSE; | 226 | BOOL gShowObjectUpdates = FALSE; |
@@ -228,7 +246,7 @@ F32 gFPSClamped = 10.f; // Pretend we start at target rate. | |||
228 | F32 gFrameDTClamped = 0.f; // Time between adjacent checks to network for packets | 246 | F32 gFrameDTClamped = 0.f; // Time between adjacent checks to network for packets |
229 | U64 gStartTime = 0; // gStartTime is "private", used only to calculate gFrameTimeSeconds | 247 | U64 gStartTime = 0; // gStartTime is "private", used only to calculate gFrameTimeSeconds |
230 | U32 gFrameStalls = 0; | 248 | U32 gFrameStalls = 0; |
231 | const F64 FRAME_STALL_THRESHOLD = 1.0; | 249 | const F64 FRAME_STALL_THRESHOLD = 5.0; |
232 | 250 | ||
233 | LLTimer gRenderStartTime; | 251 | LLTimer gRenderStartTime; |
234 | LLFrameTimer gForegroundTime; | 252 | LLFrameTimer gForegroundTime; |
@@ -297,7 +315,8 @@ std::string gLoginPage; | |||
297 | std::vector<std::string> gLoginURIs; | 315 | std::vector<std::string> gLoginURIs; |
298 | static std::string gHelperURI; | 316 | static std::string gHelperURI; |
299 | 317 | ||
300 | LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ; | 318 | //FIXME |
319 | //LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ; | ||
301 | 320 | ||
302 | void idle_afk_check() | 321 | void idle_afk_check() |
303 | { | 322 | { |
@@ -448,7 +467,7 @@ static void settings_modify() | |||
448 | gSavedSettings.setBOOL("VectorizeSkin", FALSE); | 467 | gSavedSettings.setBOOL("VectorizeSkin", FALSE); |
449 | #endif | 468 | #endif |
450 | } | 469 | } |
451 | 470 | /* | |
452 | void LLAppViewer::initGridChoice() | 471 | void LLAppViewer::initGridChoice() |
453 | { | 472 | { |
454 | // Load up the initial grid choice from: | 473 | // Load up the initial grid choice from: |
@@ -465,7 +484,7 @@ void LLAppViewer::initGridChoice() | |||
465 | if(grid_choice.empty()) | 484 | if(grid_choice.empty()) |
466 | { | 485 | { |
467 | S32 server = gSavedSettings.getS32("ServerChoice"); | 486 | S32 server = gSavedSettings.getS32("ServerChoice"); |
468 | server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); | 487 | //server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); |
469 | if(server == GRID_INFO_OTHER) | 488 | if(server == GRID_INFO_OTHER) |
470 | { | 489 | { |
471 | std::string custom_server = gSavedSettings.getString("CustomServer"); | 490 | std::string custom_server = gSavedSettings.getString("CustomServer"); |
@@ -473,11 +492,12 @@ void LLAppViewer::initGridChoice() | |||
473 | } | 492 | } |
474 | else if(server != (S32)GRID_INFO_NONE) | 493 | else if(server != (S32)GRID_INFO_NONE) |
475 | { | 494 | { |
476 | LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server); | 495 | llwarns << "setgridchoice = " << server << llendl; |
496 | LLViewerLogin::getInstance()->setGridChoice(server); | ||
477 | } | 497 | } |
478 | } | 498 | } |
479 | } | 499 | } |
480 | 500 | */ | |
481 | //virtual | 501 | //virtual |
482 | bool LLAppViewer::initSLURLHandler() | 502 | bool LLAppViewer::initSLURLHandler() |
483 | { | 503 | { |
@@ -516,6 +536,7 @@ LLAppViewer::LLAppViewer() : | |||
516 | mSecondInstance(false), | 536 | mSecondInstance(false), |
517 | mSavedFinalSnapshot(false), | 537 | mSavedFinalSnapshot(false), |
518 | mQuitRequested(false), | 538 | mQuitRequested(false), |
539 | mLogoutRequested(false), | ||
519 | mLogoutRequestSent(false), | 540 | mLogoutRequestSent(false), |
520 | mYieldTime(-1), | 541 | mYieldTime(-1), |
521 | mMainloopTimeout(NULL), | 542 | mMainloopTimeout(NULL), |
@@ -639,7 +660,6 @@ bool LLAppViewer::init() | |||
639 | ui_audio_callback, | 660 | ui_audio_callback, |
640 | &LLUI::sGLScaleFactor); | 661 | &LLUI::sGLScaleFactor); |
641 | LLWeb::initClass(); // do this after LLUI | 662 | LLWeb::initClass(); // do this after LLUI |
642 | |||
643 | LLTextEditor::setURLCallbacks(&LLWeb::loadURL, | 663 | LLTextEditor::setURLCallbacks(&LLWeb::loadURL, |
644 | &LLURLDispatcher::dispatchFromTextEditor, | 664 | &LLURLDispatcher::dispatchFromTextEditor, |
645 | &LLURLDispatcher::dispatchFromTextEditor); | 665 | &LLURLDispatcher::dispatchFromTextEditor); |
@@ -660,6 +680,7 @@ bool LLAppViewer::init() | |||
660 | // load MIME type -> media impl mappings | 680 | // load MIME type -> media impl mappings |
661 | LLMIMETypes::parseMIMETypes( std::string("mime_types.xml") ); | 681 | LLMIMETypes::parseMIMETypes( std::string("mime_types.xml") ); |
662 | 682 | ||
683 | |||
663 | // Copy settings to globals. *TODO: Remove or move to appropriage class initializers | 684 | // Copy settings to globals. *TODO: Remove or move to appropriage class initializers |
664 | settings_to_globals(); | 685 | settings_to_globals(); |
665 | // Setup settings listeners | 686 | // Setup settings listeners |
@@ -1112,12 +1133,21 @@ bool LLAppViewer::cleanup() | |||
1112 | // to ensure shutdown order | 1133 | // to ensure shutdown order |
1113 | LLMortician::setZealous(TRUE); | 1134 | LLMortician::setZealous(TRUE); |
1114 | 1135 | ||
1136 | if (mQuitRequested) | ||
1115 | LLVoiceClient::terminate(); | 1137 | LLVoiceClient::terminate(); |
1116 | 1138 | ||
1117 | disconnectViewer(); | 1139 | disconnectViewer(); |
1118 | 1140 | ||
1119 | llinfos << "Viewer disconnected" << llendflush; | 1141 | llinfos << "Viewer disconnected" << llendflush; |
1120 | 1142 | ||
1143 | |||
1144 | |||
1145 | |||
1146 | |||
1147 | //this deletes all your buddies | ||
1148 | LLAvatarTracker::instance().reset(); | ||
1149 | |||
1150 | if (mQuitRequested) | ||
1121 | display_cleanup(); | 1151 | display_cleanup(); |
1122 | 1152 | ||
1123 | release_start_screen(); // just in case | 1153 | release_start_screen(); // just in case |
@@ -1135,6 +1165,13 @@ bool LLAppViewer::cleanup() | |||
1135 | 1165 | ||
1136 | LLKeyframeDataCache::clear(); | 1166 | LLKeyframeDataCache::clear(); |
1137 | 1167 | ||
1168 | //clear all the chat off the screen | ||
1169 | gConsole->clear(); | ||
1170 | |||
1171 | if (!mQuitRequested) //if we are doing a soft cleanup, bail here | ||
1172 | { | ||
1173 | return true; | ||
1174 | } | ||
1138 | // End TransferManager before deleting systems it depends on (Audio, VFS, AssetStorage) | 1175 | // End TransferManager before deleting systems it depends on (Audio, VFS, AssetStorage) |
1139 | #if 0 // this seems to get us stuck in an infinite loop... | 1176 | #if 0 // this seems to get us stuck in an infinite loop... |
1140 | gTransferManager.cleanup(); | 1177 | gTransferManager.cleanup(); |
@@ -1238,6 +1275,9 @@ bool LLAppViewer::cleanup() | |||
1238 | // viewer UI relies on keyboard so keep it aound until viewer UI isa gone | 1275 | // viewer UI relies on keyboard so keep it aound until viewer UI isa gone |
1239 | delete gKeyboard; | 1276 | delete gKeyboard; |
1240 | gKeyboard = NULL; | 1277 | gKeyboard = NULL; |
1278 | // Clean up selection managers after UI is destroyed, as UI | ||
1279 | // may be observing them. | ||
1280 | LLSelectMgr::cleanupGlobals(); | ||
1241 | 1281 | ||
1242 | LLViewerObject::cleanupVOClasses(); | 1282 | LLViewerObject::cleanupVOClasses(); |
1243 | 1283 | ||
@@ -1247,6 +1287,7 @@ bool LLAppViewer::cleanup() | |||
1247 | 1287 | ||
1248 | LLTracker::cleanupInstance(); | 1288 | LLTracker::cleanupInstance(); |
1249 | 1289 | ||
1290 | |||
1250 | // *FIX: This is handled in LLAppViewerWin32::cleanup(). | 1291 | // *FIX: This is handled in LLAppViewerWin32::cleanup(). |
1251 | // I'm keeping the comment to remember its order in cleanup, | 1292 | // I'm keeping the comment to remember its order in cleanup, |
1252 | // in case of unforseen dependency. | 1293 | // in case of unforseen dependency. |
@@ -1322,6 +1363,7 @@ bool LLAppViewer::cleanup() | |||
1322 | // save mute list. gMuteList used to also be deleted here too. | 1363 | // save mute list. gMuteList used to also be deleted here too. |
1323 | LLMuteList::getInstance()->cache(gAgent.getID()); | 1364 | LLMuteList::getInstance()->cache(gAgent.getID()); |
1324 | 1365 | ||
1366 | |||
1325 | if (mPurgeOnExit) | 1367 | if (mPurgeOnExit) |
1326 | { | 1368 | { |
1327 | llinfos << "Purging all cache files on exit" << llendflush; | 1369 | llinfos << "Purging all cache files on exit" << llendflush; |
@@ -1831,7 +1873,14 @@ bool LLAppViewer::initConfiguration() | |||
1831 | } | 1873 | } |
1832 | } | 1874 | } |
1833 | 1875 | ||
1834 | initGridChoice(); | 1876 | //init Hippo grid manager |
1877 | if (!gHippoGridManager) { | ||
1878 | gHippoGridManager = new HippoGridManager(); | ||
1879 | gHippoGridManager->init(); | ||
1880 | } | ||
1881 | |||
1882 | |||
1883 | //initGridChoice(); | ||
1835 | 1884 | ||
1836 | // If we have specified crash on startup, set the global so we'll trigger the crash at the right time | 1885 | // If we have specified crash on startup, set the global so we'll trigger the crash at the right time |
1837 | if(clp.hasOption("crashonstartup")) | 1886 | if(clp.hasOption("crashonstartup")) |
@@ -1848,7 +1897,6 @@ bool LLAppViewer::initConfiguration() | |||
1848 | // achieve this. For now... | 1897 | // achieve this. For now... |
1849 | 1898 | ||
1850 | // *NOTE:Mani The command line parser parses tokens and is | 1899 | // *NOTE:Mani The command line parser parses tokens and is |
1851 | // setup to bail after parsing the '--url' option or the | ||
1852 | // first option specified without a '--option' flag (or | 1900 | // first option specified without a '--option' flag (or |
1853 | // any other option that uses the 'last_option' setting - | 1901 | // any other option that uses the 'last_option' setting - |
1854 | // see LLControlGroupCLP::configure()) | 1902 | // see LLControlGroupCLP::configure()) |
@@ -1906,6 +1954,22 @@ bool LLAppViewer::initConfiguration() | |||
1906 | // llerrs << "Failed to parse skin definition." << llendl; | 1954 | // llerrs << "Failed to parse skin definition." << llendl; |
1907 | // } | 1955 | // } |
1908 | 1956 | ||
1957 | // LLXmlTreeNode* rootp = skin_def_tree.getRoot(); | ||
1958 | // LLXmlTreeNode* disabled_message_node = rootp->getChildByName("disabled_message"); | ||
1959 | // if (disabled_message_node) | ||
1960 | // { | ||
1961 | // gDisabledMessage = disabled_message_node->getContents(); | ||
1962 | // } | ||
1963 | |||
1964 | // static LLStdStringHandle hide_links_string = LLXmlTree::addAttributeString("hide_links"); | ||
1965 | // rootp->getFastAttributeBOOL(hide_links_string, gHideLinks); | ||
1966 | |||
1967 | // // Legacy string. This flag really meant we didn't want to expose references to "Second Life". | ||
1968 | // // Just set gHideLinks instead. | ||
1969 | // static LLStdStringHandle silent_string = LLXmlTree::addAttributeString("silent_update"); | ||
1970 | // BOOL silent_update; | ||
1971 | // rootp->getFastAttributeBOOL(silent_string, silent_update); | ||
1972 | // gHideLinks = (gHideLinks || silent_update); | ||
1909 | //} | 1973 | //} |
1910 | 1974 | ||
1911 | #if LL_DARWIN | 1975 | #if LL_DARWIN |
@@ -2365,7 +2429,7 @@ void LLAppViewer::handleViewerCrash() | |||
2365 | gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName(); | 2429 | gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName(); |
2366 | gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath(); | 2430 | gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath(); |
2367 | gDebugInfo["SessionLength"] = F32(LLFrameTimer::getElapsedSeconds()); | 2431 | gDebugInfo["SessionLength"] = F32(LLFrameTimer::getElapsedSeconds()); |
2368 | gDebugInfo["StartupState"] = LLStartUp::getStartupStateString(); | 2432 | //FIXME gDebugInfo["StartupState"] = LLStartUp::getStartupStateString(); |
2369 | gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer) getCurrentRSS() >> 10; | 2433 | gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer) getCurrentRSS() >> 10; |
2370 | gDebugInfo["FirstLogin"] = (LLSD::Boolean) gAgent.isFirstLogin(); | 2434 | gDebugInfo["FirstLogin"] = (LLSD::Boolean) gAgent.isFirstLogin(); |
2371 | gDebugInfo["FirstRunThisInstall"] = gSavedSettings.getBOOL("FirstRunThisInstall"); | 2435 | gDebugInfo["FirstRunThisInstall"] = gSavedSettings.getBOOL("FirstRunThisInstall"); |
@@ -2594,29 +2658,56 @@ void LLAppViewer::removeMarkerFile(bool leave_logout_marker) | |||
2594 | } | 2658 | } |
2595 | } | 2659 | } |
2596 | 2660 | ||
2661 | |||
2662 | //this gets called after we get a packet back from the | ||
2663 | //server saying we are logged out, or if the packet times | ||
2664 | //out | ||
2597 | void LLAppViewer::forceQuit() | 2665 | void LLAppViewer::forceQuit() |
2598 | { | 2666 | { |
2667 | |||
2668 | LL_INFOS("forceQuit") << "Destroying the entire world" << LL_ENDL; | ||
2669 | if (mQuitRequested) | ||
2599 | LLApp::setQuitting(); | 2670 | LLApp::setQuitting(); |
2671 | else | ||
2672 | { | ||
2673 | if (mLogoutRequested) //we just finished a logout request | ||
2674 | { | ||
2675 | //LLStartUp::setStartupState( STATE_LOGIN_SHOW ); | ||
2676 | LLStartUp::resetLogin(); | ||
2677 | cleanup(); | ||
2678 | mLogoutRequested=false; | ||
2679 | mLogoutRequestSent=false; | ||
2680 | } | ||
2681 | } | ||
2600 | } | 2682 | } |
2601 | 2683 | ||
2602 | void LLAppViewer::requestQuit() | 2684 | void LLAppViewer::requestLogout(bool quit_after) |
2603 | { | 2685 | { |
2604 | llinfos << "requestQuit" << llendl; | 2686 | |
2687 | mLogoutRequested=true; | ||
2688 | if(quit_after) | ||
2689 | mQuitRequested=true; | ||
2690 | else | ||
2691 | mQuitRequested=false; | ||
2692 | |||
2693 | llinfos << "requestLogout" << llendl; | ||
2605 | 2694 | ||
2606 | LLViewerRegion* region = gAgent.getRegion(); | 2695 | LLViewerRegion* region = gAgent.getRegion(); |
2607 | 2696 | ||
2608 | if( (LLStartUp::getStartupState() < STATE_STARTED) || !region ) | 2697 | if( (LLStartUp::getStartupState() >= STATE_STARTED) && region ) |
2609 | { | 2698 | { |
2610 | // Quit immediately | ||
2611 | forceQuit(); | ||
2612 | return; | ||
2613 | } | ||
2614 | |||
2615 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); | 2699 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); |
2616 | effectp->setPositionGlobal(gAgent.getPositionGlobal()); | 2700 | effectp->setPositionGlobal(gAgent.getPositionGlobal()); |
2617 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); | 2701 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); |
2618 | LLHUDManager::getInstance()->sendEffects(); | 2702 | LLHUDManager::getInstance()->sendEffects(); |
2619 | effectp->markDead() ;//remove it. | 2703 | effectp->markDead() ;//remove it. |
2704 | send_stats(); | ||
2705 | } | ||
2706 | else | ||
2707 | { | ||
2708 | mQuitRequested=true; | ||
2709 | LLAppViewer::instance()->forceQuit(); | ||
2710 | } | ||
2620 | 2711 | ||
2621 | // Attempt to close all floaters that might be | 2712 | // Attempt to close all floaters that might be |
2622 | // editing things. | 2713 | // editing things. |
@@ -2626,10 +2717,7 @@ void LLAppViewer::requestQuit() | |||
2626 | gFloaterView->closeAllChildren(true); | 2717 | gFloaterView->closeAllChildren(true); |
2627 | } | 2718 | } |
2628 | 2719 | ||
2629 | send_stats(); | ||
2630 | |||
2631 | gLogoutTimer.reset(); | 2720 | gLogoutTimer.reset(); |
2632 | mQuitRequested = true; | ||
2633 | } | 2721 | } |
2634 | 2722 | ||
2635 | static bool finish_quit(const LLSD& notification, const LLSD& response) | 2723 | static bool finish_quit(const LLSD& notification, const LLSD& response) |
@@ -2638,7 +2726,7 @@ static bool finish_quit(const LLSD& notification, const LLSD& response) | |||
2638 | 2726 | ||
2639 | if (option == 0) | 2727 | if (option == 0) |
2640 | { | 2728 | { |
2641 | LLAppViewer::instance()->requestQuit(); | 2729 | LLAppViewer::instance()->requestLogout(true); |
2642 | } | 2730 | } |
2643 | return false; | 2731 | return false; |
2644 | } | 2732 | } |
@@ -2649,6 +2737,12 @@ void LLAppViewer::userQuit() | |||
2649 | LLNotifications::instance().add("ConfirmQuit"); | 2737 | LLNotifications::instance().add("ConfirmQuit"); |
2650 | } | 2738 | } |
2651 | 2739 | ||
2740 | //static | ||
2741 | void LLAppViewer::userLogout(void *userdata) | ||
2742 | { | ||
2743 | LLAppViewer::instance()->requestLogout(false); | ||
2744 | } | ||
2745 | |||
2652 | static bool finish_early_exit(const LLSD& notification, const LLSD& response) | 2746 | static bool finish_early_exit(const LLSD& notification, const LLSD& response) |
2653 | { | 2747 | { |
2654 | LLAppViewer::instance()->forceQuit(); | 2748 | LLAppViewer::instance()->forceQuit(); |
@@ -2674,6 +2768,7 @@ void LLAppViewer::abortQuit() | |||
2674 | { | 2768 | { |
2675 | llinfos << "abortQuit()" << llendl; | 2769 | llinfos << "abortQuit()" << llendl; |
2676 | mQuitRequested = false; | 2770 | mQuitRequested = false; |
2771 | mLogoutRequested = false; | ||
2677 | } | 2772 | } |
2678 | 2773 | ||
2679 | void LLAppViewer::migrateCacheDirectory() | 2774 | void LLAppViewer::migrateCacheDirectory() |
@@ -2994,7 +3089,7 @@ bool finish_forced_disconnect(const LLSD& notification, const LLSD& response) | |||
2994 | 3089 | ||
2995 | void LLAppViewer::forceDisconnect(const std::string& mesg) | 3090 | void LLAppViewer::forceDisconnect(const std::string& mesg) |
2996 | { | 3091 | { |
2997 | if (gDoDisconnect) | 3092 | if (gDoDisconnect||mQuitRequested||mLogoutRequested) |
2998 | { | 3093 | { |
2999 | // Already popped up one of these dialogs, don't | 3094 | // Already popped up one of these dialogs, don't |
3000 | // do this again. | 3095 | // do this again. |
@@ -3225,7 +3320,12 @@ void LLAppViewer::idle() | |||
3225 | { | 3320 | { |
3226 | // Send avatar and camera info | 3321 | // Send avatar and camera info |
3227 | last_control_flags = gAgent.getControlFlags(); | 3322 | last_control_flags = gAgent.getControlFlags(); |
3228 | send_agent_update(TRUE); | 3323 | |
3324 | if(!gAgent.getPhantom()) | ||
3325 | { | ||
3326 | send_agent_update(TRUE); | ||
3327 | } | ||
3328 | |||
3229 | agent_update_timer.reset(); | 3329 | agent_update_timer.reset(); |
3230 | } | 3330 | } |
3231 | } | 3331 | } |
@@ -3298,9 +3398,12 @@ void LLAppViewer::idle() | |||
3298 | // Check for away from keyboard, kick idle agents. | 3398 | // Check for away from keyboard, kick idle agents. |
3299 | idle_afk_check(); | 3399 | idle_afk_check(); |
3300 | 3400 | ||
3401 | if (!gDisconnected) //check again | ||
3402 | { | ||
3301 | // Update statistics for this frame | 3403 | // Update statistics for this frame |
3302 | update_statistics(gFrameCount); | 3404 | update_statistics(gFrameCount); |
3303 | } | 3405 | } |
3406 | } | ||
3304 | 3407 | ||
3305 | //////////////////////////////////////// | 3408 | //////////////////////////////////////// |
3306 | // | 3409 | // |
@@ -3501,7 +3604,7 @@ void LLAppViewer::idle() | |||
3501 | // Handle shutdown process, for example, | 3604 | // Handle shutdown process, for example, |
3502 | // wait for floaters to close, send quit message, | 3605 | // wait for floaters to close, send quit message, |
3503 | // forcibly quit if it has taken too long | 3606 | // forcibly quit if it has taken too long |
3504 | if (mQuitRequested) | 3607 | if (mQuitRequested || mLogoutRequested) |
3505 | { | 3608 | { |
3506 | idleShutdown(); | 3609 | idleShutdown(); |
3507 | } | 3610 | } |
@@ -3604,12 +3707,12 @@ void LLAppViewer::sendLogoutRequest() | |||
3604 | if (mLogoutMarkerFile) | 3707 | if (mLogoutMarkerFile) |
3605 | { | 3708 | { |
3606 | llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl; | 3709 | llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl; |
3607 | apr_file_close(mLogoutMarkerFile); | ||
3608 | } | 3710 | } |
3609 | else | 3711 | else |
3610 | { | 3712 | { |
3611 | llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl; | 3713 | llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl; |
3612 | } | 3714 | } |
3715 | apr_file_close(mLogoutMarkerFile); | ||
3613 | } | 3716 | } |
3614 | } | 3717 | } |
3615 | 3718 | ||
@@ -3626,6 +3729,9 @@ static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME; | |||
3626 | 3729 | ||
3627 | void LLAppViewer::idleNetwork() | 3730 | void LLAppViewer::idleNetwork() |
3628 | { | 3731 | { |
3732 | if (gDisconnected) | ||
3733 | return; | ||
3734 | |||
3629 | pingMainloopTimeout("idleNetwork"); | 3735 | pingMainloopTimeout("idleNetwork"); |
3630 | LLError::LLCallStacks::clear() ; | 3736 | LLError::LLCallStacks::clear() ; |
3631 | llpushcallstacks ; | 3737 | llpushcallstacks ; |
@@ -3714,7 +3820,11 @@ void LLAppViewer::idleNetwork() | |||
3714 | llpushcallstacks ; | 3820 | llpushcallstacks ; |
3715 | gObjectList.mNumNewObjectsStat.addValue(gObjectList.mNumNewObjects); | 3821 | gObjectList.mNumNewObjectsStat.addValue(gObjectList.mNumNewObjects); |
3716 | 3822 | ||
3823 | if (gDisconnected) | ||
3824 | return; | ||
3825 | |||
3717 | // Retransmit unacknowledged packets. | 3826 | // Retransmit unacknowledged packets. |
3827 | if (gXferManager) | ||
3718 | gXferManager->retransmitUnackedPackets(); | 3828 | gXferManager->retransmitUnackedPackets(); |
3719 | gAssetStorage->checkForTimeouts(); | 3829 | gAssetStorage->checkForTimeouts(); |
3720 | llpushcallstacks ; | 3830 | llpushcallstacks ; |
@@ -3724,7 +3834,7 @@ void LLAppViewer::idleNetwork() | |||
3724 | // Check that the circuit between the viewer and the agent's current | 3834 | // Check that the circuit between the viewer and the agent's current |
3725 | // region is still alive | 3835 | // region is still alive |
3726 | LLViewerRegion *agent_region = gAgent.getRegion(); | 3836 | LLViewerRegion *agent_region = gAgent.getRegion(); |
3727 | if (agent_region) | 3837 | if ((agent_region)&&(LLStartUp::getStartupState() == STATE_STARTED)) |
3728 | { | 3838 | { |
3729 | LLUUID this_region_id = agent_region->getRegionID(); | 3839 | LLUUID this_region_id = agent_region->getRegionID(); |
3730 | bool this_region_alive = agent_region->isAlive(); | 3840 | bool this_region_alive = agent_region->isAlive(); |
@@ -3745,6 +3855,9 @@ void LLAppViewer::disconnectViewer() | |||
3745 | { | 3855 | { |
3746 | return; | 3856 | return; |
3747 | } | 3857 | } |
3858 | |||
3859 | //set this true now, to prevent things from trying to access the network we are destroying | ||
3860 | gDisconnected = TRUE; | ||
3748 | // | 3861 | // |
3749 | // Cleanup after quitting. | 3862 | // Cleanup after quitting. |
3750 | // | 3863 | // |
@@ -3828,6 +3941,8 @@ void LLAppViewer::disconnectViewer() | |||
3828 | 3941 | ||
3829 | cleanup_xfer_manager(); | 3942 | cleanup_xfer_manager(); |
3830 | gDisconnected = TRUE; | 3943 | gDisconnected = TRUE; |
3944 | if (mQuitRequested) | ||
3945 | cleanup_xfer_manager(); | ||
3831 | } | 3946 | } |
3832 | 3947 | ||
3833 | void LLAppViewer::forceErrorLLError() | 3948 | void LLAppViewer::forceErrorLLError() |
@@ -3940,31 +4055,31 @@ void LLAppViewer::handleLoginComplete() | |||
3940 | gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; | 4055 | gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; |
3941 | gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; | 4056 | gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; |
3942 | gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; | 4057 | gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; |
3943 | |||
3944 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); | ||
3945 | if ( parcel && parcel->getMusicURL()[0]) | ||
3946 | { | ||
3947 | gDebugInfo["ParcelMusicURL"] = parcel->getMusicURL(); | ||
3948 | } | ||
3949 | if ( parcel && parcel->getMediaURL()[0]) | ||
3950 | { | ||
3951 | gDebugInfo["ParcelMediaURL"] = parcel->getMediaURL(); | ||
3952 | } | ||
3953 | |||
3954 | gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile"); | 4058 | gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile"); |
3955 | gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); | 4059 | gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); |
3956 | gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName(); | 4060 | gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName(); |
3957 | gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath(); | 4061 | gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath(); |
3958 | 4062 | ||
3959 | if(gAgent.getRegion()) | ||
3960 | { | ||
3961 | gDebugInfo["CurrentSimHost"] = gAgent.getRegionHost().getHostName(); | ||
3962 | gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName(); | ||
3963 | } | ||
3964 | |||
3965 | if(LLAppViewer::instance()->mMainloopTimeout) | 4063 | if(LLAppViewer::instance()->mMainloopTimeout) |
3966 | { | 4064 | { |
3967 | gDebugInfo["MainloopTimeoutState"] = LLAppViewer::instance()->mMainloopTimeout->getState(); | 4065 | gDebugInfo["MainloopTimeoutState"] = LLAppViewer::instance()->mMainloopTimeout->getState(); |
3968 | } | 4066 | } |
3969 | writeDebugInfo(); | 4067 | writeDebugInfo(); |
4068 | |||
4069 | // [RLVa:KB] - Alternate: Snowglobe-1.0 | Checked: 2009-08-05 (RLVa-1.0.1e) | Modified: RLVa-1.0.1e | ||
4070 | // TODO-RLVa: find some way to initialize the lookup table when we need them *and* support toggling RLVa at runtime | ||
4071 | gRlvHandler.initLookupTables(); | ||
4072 | |||
4073 | if (rlv_handler_t::isEnabled()) | ||
4074 | { | ||
4075 | RlvCurrentlyWorn::fetchWorn(); | ||
4076 | rlv_handler_t::fetchSharedInventory(); | ||
4077 | |||
4078 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
4079 | RlvSettings::updateLoginLastLocation(); | ||
4080 | #endif // RLV_EXTENSION_STARTLOCATION | ||
4081 | |||
4082 | gRlvHandler.processRetainedCommands(); | ||
4083 | } | ||
4084 | // [/RLVa:KB] | ||
3970 | } | 4085 | } |
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h index 797f5dd..ada5557 100644 --- a/linden/indra/newview/llappviewer.h +++ b/linden/indra/newview/llappviewer.h | |||
@@ -62,14 +62,16 @@ public: | |||
62 | 62 | ||
63 | // Application control | 63 | // Application control |
64 | void forceQuit(); // Puts the viewer into 'shutting down without error' mode. | 64 | void forceQuit(); // Puts the viewer into 'shutting down without error' mode. |
65 | void requestQuit(); // Request a quit. A kinder, gentler quit. | 65 | void requestLogout(bool quit_after); // Request a logout, optionally quitting after |
66 | void userQuit(); // The users asks to quit. Confirm, then requestQuit() | 66 | void userQuit(); // The users asks to quit. Confirm, then requestQuit() |
67 | void earlyExit(const std::string& name, | 67 | void earlyExit(const std::string& name, |
68 | const LLSD& substitutions = LLSD()); // Display an error dialog and forcibly quit. | 68 | const LLSD& substitutions = LLSD()); // Display an error dialog and forcibly quit. |
69 | static void userLogout(void *userdata); //graceful logout without quit | ||
69 | void forceExit(S32 arg); // exit() immediately (after some cleanup). | 70 | void forceExit(S32 arg); // exit() immediately (after some cleanup). |
70 | void abortQuit(); // Called to abort a quit request. | 71 | void abortQuit(); // Called to abort a quit request. |
71 | 72 | ||
72 | bool quitRequested() { return mQuitRequested; } | 73 | bool quitRequested() { return mQuitRequested; } |
74 | bool logoutRequested() { return mLogoutRequested; } | ||
73 | bool logoutRequestSent() { return mLogoutRequestSent; } | 75 | bool logoutRequestSent() { return mLogoutRequestSent; } |
74 | 76 | ||
75 | void writeDebugInfo(); | 77 | void writeDebugInfo(); |
@@ -164,11 +166,12 @@ protected: | |||
164 | 166 | ||
165 | virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this. | 167 | virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this. |
166 | 168 | ||
169 | |||
167 | private: | 170 | private: |
168 | 171 | ||
169 | bool initThreads(); // Initialize viewer threads, return false on failure. | 172 | bool initThreads(); // Initialize viewer threads, return false on failure. |
170 | bool initConfiguration(); // Initialize settings from the command line/config file. | 173 | bool initConfiguration(); // Initialize settings from the command line/config file. |
171 | void initGridChoice(); | 174 | //void initGridChoice(); |
172 | 175 | ||
173 | bool initCache(); // Initialize local client cache. | 176 | bool initCache(); // Initialize local client cache. |
174 | void purgeCache(); // Clear the local cache. | 177 | void purgeCache(); // Clear the local cache. |
@@ -222,6 +225,7 @@ private: | |||
222 | bool mSavedFinalSnapshot; | 225 | bool mSavedFinalSnapshot; |
223 | 226 | ||
224 | bool mQuitRequested; // User wants to quit, may have modified documents open. | 227 | bool mQuitRequested; // User wants to quit, may have modified documents open. |
228 | bool mLogoutRequested; // User wants to log out, but not quit | ||
225 | bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. | 229 | bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. |
226 | S32 mYieldTime; | 230 | S32 mYieldTime; |
227 | LLSD mSettingsLocationList; | 231 | LLSD mSettingsLocationList; |
@@ -232,14 +236,14 @@ private: | |||
232 | bool mAgentRegionLastAlive; | 236 | bool mAgentRegionLastAlive; |
233 | LLUUID mAgentRegionLastID; | 237 | LLUUID mAgentRegionLastID; |
234 | 238 | ||
235 | public: | 239 | //public: |
236 | //some information for updater | 240 | // //some information for updater |
237 | typedef struct | 241 | // typedef struct |
238 | { | 242 | // { |
239 | std::string mUpdateExePath; | 243 | // std::string mUpdateExePath; |
240 | std::ostringstream mParams; | 244 | // std::ostringstream mParams; |
241 | }LLUpdaterInfo ; | 245 | // }LLUpdaterInfo ; |
242 | static LLUpdaterInfo *sUpdaterInfo ; | 246 | // static LLUpdaterInfo *sUpdaterInfo ; |
243 | }; | 247 | }; |
244 | 248 | ||
245 | // consts from viewer.h | 249 | // consts from viewer.h |
@@ -250,6 +254,9 @@ const S32 AGENT_UPDATES_PER_SECOND = 10; | |||
250 | // | 254 | // |
251 | // "// llstartup" indicates that llstartup is the only client for this global. | 255 | // "// llstartup" indicates that llstartup is the only client for this global. |
252 | 256 | ||
257 | |||
258 | extern std::string gDisabledMessage; // llstartup | ||
259 | extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup | ||
253 | extern LLSD gDebugInfo; | 260 | extern LLSD gDebugInfo; |
254 | 261 | ||
255 | extern BOOL gAllowIdleAFK; | 262 | extern BOOL gAllowIdleAFK; |
diff --git a/linden/indra/newview/llappviewerlinux.h b/linden/indra/newview/llappviewerlinux.h index 365fcfe..d757639 100644 --- a/linden/indra/newview/llappviewerlinux.h +++ b/linden/indra/newview/llappviewerlinux.h | |||
@@ -62,9 +62,10 @@ public: | |||
62 | 62 | ||
63 | protected: | 63 | protected: |
64 | virtual bool beingDebugged(); | 64 | virtual bool beingDebugged(); |
65 | 65 | ||
66 | virtual bool restoreErrorTrap(); | 66 | virtual bool restoreErrorTrap(); |
67 | virtual void handleCrashReporting(bool reportFreeze); | 67 | virtual void handleCrashReporting(bool reportFreeze); |
68 | |||
68 | virtual void handleSyncCrashTrace(); | 69 | virtual void handleSyncCrashTrace(); |
69 | 70 | ||
70 | virtual bool initLogging(); | 71 | virtual bool initLogging(); |
diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp index 7a8d486..e1c9471 100644 --- a/linden/indra/newview/llappviewerwin32.cpp +++ b/linden/indra/newview/llappviewerwin32.cpp | |||
@@ -263,13 +263,13 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, | |||
263 | viewer_app_ptr = NULL; | 263 | viewer_app_ptr = NULL; |
264 | 264 | ||
265 | //start updater | 265 | //start updater |
266 | if(LLAppViewer::sUpdaterInfo) | 266 | /*if(LLAppViewer::sUpdaterInfo) |
267 | { | 267 | { |
268 | _spawnl(_P_NOWAIT, LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), LLAppViewer::sUpdaterInfo->mParams.str().c_str(), NULL); | 268 | _spawnl(_P_NOWAIT, LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), LLAppViewer::sUpdaterInfo->mParams.str().c_str(), NULL); |
269 | 269 | ||
270 | delete LLAppViewer::sUpdaterInfo ; | 270 | delete LLAppViewer::sUpdaterInfo ; |
271 | LLAppViewer::sUpdaterInfo = NULL ; | 271 | LLAppViewer::sUpdaterInfo = NULL ; |
272 | } | 272 | }*/ |
273 | 273 | ||
274 | return 0; | 274 | return 0; |
275 | } | 275 | } |
diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp index 4fca9b1..dfd7403 100644 --- a/linden/indra/newview/llassetuploadresponders.cpp +++ b/linden/indra/newview/llassetuploadresponders.cpp | |||
@@ -524,7 +524,6 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) | |||
524 | { | 524 | { |
525 | case LLAssetType::AT_NOTECARD: | 525 | case LLAssetType::AT_NOTECARD: |
526 | { | 526 | { |
527 | |||
528 | // Update the UI with the new asset. | 527 | // Update the UI with the new asset. |
529 | LLPreviewNotecard* nc; | 528 | LLPreviewNotecard* nc; |
530 | nc = (LLPreviewNotecard*)LLPreview::find(item_id); | 529 | nc = (LLPreviewNotecard*)LLPreview::find(item_id); |
@@ -543,6 +542,7 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) | |||
543 | LLAssetType::AT_NOTECARD); | 542 | LLAssetType::AT_NOTECARD); |
544 | } | 543 | } |
545 | 544 | ||
545 | nc->setAssetId(content["new_asset"].asUUID()); | ||
546 | nc->refreshFromInventory(); | 546 | nc->refreshFromInventory(); |
547 | } | 547 | } |
548 | } | 548 | } |
diff --git a/linden/indra/newview/llcallingcard.cpp b/linden/indra/newview/llcallingcard.cpp index db28c7a..d5211d7 100644 --- a/linden/indra/newview/llcallingcard.cpp +++ b/linden/indra/newview/llcallingcard.cpp | |||
@@ -137,8 +137,20 @@ LLAvatarTracker::~LLAvatarTracker() | |||
137 | deleteTrackingData(); | 137 | deleteTrackingData(); |
138 | std::for_each(mObservers.begin(), mObservers.end(), DeletePointer()); | 138 | std::for_each(mObservers.begin(), mObservers.end(), DeletePointer()); |
139 | std::for_each(mBuddyInfo.begin(), mBuddyInfo.end(), DeletePairedPointer()); | 139 | std::for_each(mBuddyInfo.begin(), mBuddyInfo.end(), DeletePairedPointer()); |
140 | mObservers.erase(mObservers.begin(), mObservers.end()); | ||
141 | mBuddyInfo.erase(mBuddyInfo.begin(), mBuddyInfo.end()); | ||
140 | } | 142 | } |
141 | 143 | ||
144 | |||
145 | void LLAvatarTracker::reset() | ||
146 | { | ||
147 | std::for_each(mBuddyInfo.begin(), mBuddyInfo.end(), DeletePairedPointer()); | ||
148 | mBuddyInfo.erase(mBuddyInfo.begin(), mBuddyInfo.end()); | ||
149 | mModifyMask |= LLFriendObserver::REMOVE; | ||
150 | notifyObservers(); | ||
151 | } | ||
152 | |||
153 | |||
142 | void LLAvatarTracker::track(const LLUUID& avatar_id, const std::string& name) | 154 | void LLAvatarTracker::track(const LLUUID& avatar_id, const std::string& name) |
143 | { | 155 | { |
144 | deleteTrackingData(); | 156 | deleteTrackingData(); |
diff --git a/linden/indra/newview/llcallingcard.h b/linden/indra/newview/llcallingcard.h index 85a1ab6..aad7cec 100644 --- a/linden/indra/newview/llcallingcard.h +++ b/linden/indra/newview/llcallingcard.h | |||
@@ -86,7 +86,7 @@ class LLAvatarTracker | |||
86 | { | 86 | { |
87 | public: | 87 | public: |
88 | static LLAvatarTracker& instance() { return sInstance; } | 88 | static LLAvatarTracker& instance() { return sInstance; } |
89 | 89 | void reset(); | |
90 | void track(const LLUUID& avatar_id, const std::string& name); | 90 | void track(const LLUUID& avatar_id, const std::string& name); |
91 | void untrack(const LLUUID& avatar_id); | 91 | void untrack(const LLUUID& avatar_id); |
92 | bool isTrackedAgentValid() { return mTrackedAgentValid; } | 92 | bool isTrackedAgentValid() { return mTrackedAgentValid; } |
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp index 41d2e08..44d1ad1 100644 --- a/linden/indra/newview/llchatbar.cpp +++ b/linden/indra/newview/llchatbar.cpp | |||
@@ -54,6 +54,7 @@ | |||
54 | #include "llkeyboard.h" | 54 | #include "llkeyboard.h" |
55 | #include "lllineeditor.h" | 55 | #include "lllineeditor.h" |
56 | #include "llstatusbar.h" | 56 | #include "llstatusbar.h" |
57 | #include "llspinctrl.h" | ||
57 | #include "lltextbox.h" | 58 | #include "lltextbox.h" |
58 | #include "lluiconstants.h" | 59 | #include "lluiconstants.h" |
59 | #include "llviewergesture.h" // for triggering gestures | 60 | #include "llviewergesture.h" // for triggering gestures |
@@ -79,7 +80,10 @@ LLChatBar *gChatBar = NULL; | |||
79 | 80 | ||
80 | // legacy calllback glue | 81 | // legacy calllback glue |
81 | void toggleChatHistory(void* user_data); | 82 | void toggleChatHistory(void* user_data); |
82 | void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel); | 83 | //void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel); |
84 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.2a | ||
85 | void send_chat_from_viewer(std::string utf8_out_text, EChatType type, S32 channel); | ||
86 | // [/RLVa:KB] | ||
83 | 87 | ||
84 | 88 | ||
85 | class LLChatBarGestureObserver : public LLGestureManagerObserver | 89 | class LLChatBarGestureObserver : public LLGestureManagerObserver |
@@ -99,6 +103,7 @@ private: | |||
99 | 103 | ||
100 | LLChatBar::LLChatBar() | 104 | LLChatBar::LLChatBar() |
101 | : LLPanel(LLStringUtil::null, LLRect(), BORDER_NO), | 105 | : LLPanel(LLStringUtil::null, LLRect(), BORDER_NO), |
106 | mChanCtrlEnabled(FALSE), | ||
102 | mInputEditor(NULL), | 107 | mInputEditor(NULL), |
103 | mGestureLabelTimer(), | 108 | mGestureLabelTimer(), |
104 | mLastSpecialChatChannel(0), | 109 | mLastSpecialChatChannel(0), |
@@ -153,6 +158,10 @@ BOOL LLChatBar::postBuild() | |||
153 | mInputEditor->setEnableLineHistory(TRUE); | 158 | mInputEditor->setEnableLineHistory(TRUE); |
154 | } | 159 | } |
155 | 160 | ||
161 | mChannelControl = getChild<LLSpinCtrl>("channel_control"); | ||
162 | |||
163 | toggleChannelControl(); | ||
164 | |||
156 | mIsBuilt = TRUE; | 165 | mIsBuilt = TRUE; |
157 | 166 | ||
158 | return TRUE; | 167 | return TRUE; |
@@ -212,6 +221,7 @@ void LLChatBar::refresh() | |||
212 | 221 | ||
213 | childSetValue("History", LLFloaterChat::instanceVisible(LLSD())); | 222 | childSetValue("History", LLFloaterChat::instanceVisible(LLSD())); |
214 | 223 | ||
224 | //childSetValue("channel_control",( 1.f * ((S32)(mChannelControl->get()))) ); | ||
215 | childSetEnabled("Say", mInputEditor->getText().size() > 0); | 225 | childSetEnabled("Say", mInputEditor->getText().size() > 0); |
216 | childSetEnabled("Shout", mInputEditor->getText().size() > 0); | 226 | childSetEnabled("Shout", mInputEditor->getText().size() > 0); |
217 | 227 | ||
@@ -372,8 +382,11 @@ LLWString LLChatBar::stripChannelNumber(const LLWString &mesg, S32* channel) | |||
372 | } | 382 | } |
373 | else | 383 | else |
374 | { | 384 | { |
375 | // This is normal chat. | 385 | if (!mChanCtrlEnabled) |
376 | *channel = 0; | 386 | { |
387 | // This is normal chat. | ||
388 | *channel = 0; | ||
389 | } | ||
377 | return mesg; | 390 | return mesg; |
378 | } | 391 | } |
379 | } | 392 | } |
@@ -389,7 +402,8 @@ void LLChatBar::sendChat( EChatType type ) | |||
389 | // store sent line in history, duplicates will get filtered | 402 | // store sent line in history, duplicates will get filtered |
390 | if (mInputEditor) mInputEditor->updateHistory(); | 403 | if (mInputEditor) mInputEditor->updateHistory(); |
391 | // Check if this is destined for another channel | 404 | // Check if this is destined for another channel |
392 | S32 channel = 0; | 405 | S32 channel = mChanCtrlEnabled ? (S32)(mChannelControl->get()) : 0; |
406 | |||
393 | stripChannelNumber(text, &channel); | 407 | stripChannelNumber(text, &channel); |
394 | 408 | ||
395 | std::string utf8text = wstring_to_utf8str(text); | 409 | std::string utf8text = wstring_to_utf8str(text); |
@@ -427,6 +441,31 @@ void LLChatBar::sendChat( EChatType type ) | |||
427 | } | 441 | } |
428 | } | 442 | } |
429 | 443 | ||
444 | void LLChatBar::toggleChannelControl() | ||
445 | { | ||
446 | LLRect input_rect = mInputEditor->getRect(); | ||
447 | S32 chan_width = mChannelControl->getRect().getWidth(); | ||
448 | BOOL visible = gSavedSettings.getBOOL("ChatChannelSelect"); | ||
449 | BOOL control = mChannelControl->getVisible(); | ||
450 | |||
451 | if (visible && !control) | ||
452 | { | ||
453 | input_rect.setLeftTopAndSize(input_rect.mLeft+chan_width, input_rect.mTop, | ||
454 | input_rect.getWidth()-chan_width, input_rect.getHeight()); | ||
455 | } | ||
456 | else if (!visible && control) | ||
457 | { | ||
458 | input_rect.setLeftTopAndSize(input_rect.mLeft-chan_width, input_rect.mTop, | ||
459 | input_rect.getWidth()+chan_width, input_rect.getHeight()); | ||
460 | |||
461 | } | ||
462 | mInputEditor->setRect(input_rect); | ||
463 | |||
464 | childSetVisible("channel_control", visible); | ||
465 | childSetEnabled("channel_control", visible); | ||
466 | mChanCtrlEnabled = visible; | ||
467 | } | ||
468 | |||
430 | 469 | ||
431 | //----------------------------------------------------------------------- | 470 | //----------------------------------------------------------------------- |
432 | // Static functions | 471 | // Static functions |
@@ -484,7 +523,10 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata ) | |||
484 | 523 | ||
485 | S32 length = raw_text.length(); | 524 | S32 length = raw_text.length(); |
486 | 525 | ||
487 | if( (length > 0) && (raw_text[0] != '/') ) // forward slash is used for escape (eg. emote) sequences | 526 | //if( (length > 0) && (raw_text[0] != '/') ) // forward slash is used for escape (eg. emote) sequences |
527 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
528 | if ( (length > 0) && (raw_text[0] != '/') && (!gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT)) ) | ||
529 | // [/RLVa:KB] | ||
488 | { | 530 | { |
489 | gAgent.startTyping(); | 531 | gAgent.startTyping(); |
490 | } | 532 | } |
@@ -578,7 +620,8 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type, | |||
578 | void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate) | 620 | void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate) |
579 | { | 621 | { |
580 | // Look for "/20 foo" channel chats. | 622 | // Look for "/20 foo" channel chats. |
581 | S32 channel = 0; | 623 | S32 channel = mChanCtrlEnabled ? (S32)(mChannelControl->get()) : 0; |
624 | |||
582 | LLWString out_text = stripChannelNumber(wtext, &channel); | 625 | LLWString out_text = stripChannelNumber(wtext, &channel); |
583 | std::string utf8_out_text = wstring_to_utf8str(out_text); | 626 | std::string utf8_out_text = wstring_to_utf8str(out_text); |
584 | std::string utf8_text = wstring_to_utf8str(wtext); | 627 | std::string utf8_text = wstring_to_utf8str(wtext); |
@@ -589,6 +632,21 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL | |||
589 | utf8_text = utf8str_truncate(utf8_text, MAX_STRING - 1); | 632 | utf8_text = utf8str_truncate(utf8_text, MAX_STRING - 1); |
590 | } | 633 | } |
591 | 634 | ||
635 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.0b | ||
636 | if ( (0 == channel) && (rlv_handler_t::isEnabled()) ) | ||
637 | { | ||
638 | // Adjust the (public) chat "volume" on chat and gestures (also takes care of playing the proper animation) | ||
639 | if ( ((CHAT_TYPE_SHOUT == type) || (CHAT_TYPE_NORMAL == type)) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATNORMAL)) ) | ||
640 | type = CHAT_TYPE_WHISPER; | ||
641 | else if ( (CHAT_TYPE_SHOUT == type) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATSHOUT)) ) | ||
642 | type = CHAT_TYPE_NORMAL; | ||
643 | else if ( (CHAT_TYPE_WHISPER == type) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATWHISPER)) ) | ||
644 | type = CHAT_TYPE_NORMAL; | ||
645 | |||
646 | animate &= !gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT); | ||
647 | } | ||
648 | // [/RLVa:KB] | ||
649 | |||
592 | // Don't animate for chats people can't hear (chat to scripts) | 650 | // Don't animate for chats people can't hear (chat to scripts) |
593 | if (animate && (channel == 0)) | 651 | if (animate && (channel == 0)) |
594 | { | 652 | { |
@@ -624,8 +682,57 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL | |||
624 | send_chat_from_viewer(utf8_out_text, type, channel); | 682 | send_chat_from_viewer(utf8_out_text, type, channel); |
625 | } | 683 | } |
626 | 684 | ||
627 | void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel) | 685 | // void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel) |
686 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.2a | ||
687 | void send_chat_from_viewer(std::string utf8_out_text, EChatType type, S32 channel) | ||
688 | // [/RLVa:KB] | ||
628 | { | 689 | { |
690 | // [RLVa:KB] - Checked: 2009-08-05 (RLVa-1.0.1e) | Modified: RLVa-1.0.1e | ||
691 | // Only process chat messages (ie not CHAT_TYPE_START, CHAT_TYPE_STOP, etc) | ||
692 | if ( (rlv_handler_t::isEnabled()) && ( (CHAT_TYPE_WHISPER == type) || (CHAT_TYPE_NORMAL == type) || (CHAT_TYPE_SHOUT == type) ) ) | ||
693 | { | ||
694 | if (0 == channel) | ||
695 | { | ||
696 | // (We already did this before, but LLChatHandler::handle() calls this directly) | ||
697 | if ( ((CHAT_TYPE_SHOUT == type) || (CHAT_TYPE_NORMAL == type)) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATNORMAL)) ) | ||
698 | type = CHAT_TYPE_WHISPER; | ||
699 | else if ( (CHAT_TYPE_SHOUT == type) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATSHOUT)) ) | ||
700 | type = CHAT_TYPE_NORMAL; | ||
701 | else if ( (CHAT_TYPE_WHISPER == type) && (gRlvHandler.hasBehaviour(RLV_BHVR_CHATWHISPER)) ) | ||
702 | type = CHAT_TYPE_NORMAL; | ||
703 | |||
704 | // Redirect chat if needed | ||
705 | if ( ( (gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT) || (gRlvHandler.hasBehaviour(RLV_BHVR_REDIREMOTE)) ) && | ||
706 | (gRlvHandler.redirectChatOrEmote(utf8_out_text)) ) ) | ||
707 | { | ||
708 | return; | ||
709 | } | ||
710 | |||
711 | // Filter public chat if sendchat restricted (and filter anything that redirchat didn't redirect) | ||
712 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDCHAT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT)) ) | ||
713 | gRlvHandler.filterChat(utf8_out_text, true); | ||
714 | } | ||
715 | else | ||
716 | { | ||
717 | // Don't allow chat on a non-public channel if sendchannel restricted (unless the channel is an exception) | ||
718 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDCHANNEL)) && (!gRlvHandler.isException(RLV_BHVR_SENDCHANNEL, channel)) ) | ||
719 | return; | ||
720 | |||
721 | // Don't allow chat on debug channel if @sendchat, @redirchat or @rediremote restricted (shows as public chat on viewers) | ||
722 | if (channel >= CHAT_CHANNEL_DEBUG) | ||
723 | { | ||
724 | bool fIsEmote = rlvIsEmote(utf8_out_text); | ||
725 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDCHAT)) || | ||
726 | ((!fIsEmote) && (gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT))) || | ||
727 | ((fIsEmote) && (gRlvHandler.hasBehaviour(RLV_BHVR_REDIREMOTE))) ) | ||
728 | { | ||
729 | return; | ||
730 | } | ||
731 | } | ||
732 | } | ||
733 | } | ||
734 | // [/RLVa:KB] | ||
735 | |||
629 | LLMessageSystem* msg = gMessageSystem; | 736 | LLMessageSystem* msg = gMessageSystem; |
630 | msg->newMessageFast(_PREHASH_ChatFromViewer); | 737 | msg->newMessageFast(_PREHASH_ChatFromViewer); |
631 | msg->nextBlockFast(_PREHASH_AgentData); | 738 | msg->nextBlockFast(_PREHASH_AgentData); |
diff --git a/linden/indra/newview/llchatbar.h b/linden/indra/newview/llchatbar.h index 56a98a7..13332c7 100644 --- a/linden/indra/newview/llchatbar.h +++ b/linden/indra/newview/llchatbar.h | |||
@@ -44,6 +44,7 @@ class LLUUID; | |||
44 | class LLFrameTimer; | 44 | class LLFrameTimer; |
45 | class LLChatBarGestureObserver; | 45 | class LLChatBarGestureObserver; |
46 | class LLComboBox; | 46 | class LLComboBox; |
47 | class LLSpinCtrl; | ||
47 | 48 | ||
48 | class LLChatBar | 49 | class LLChatBar |
49 | : public LLPanel | 50 | : public LLPanel |
@@ -94,6 +95,8 @@ public: | |||
94 | static void startChat(const char* line); | 95 | static void startChat(const char* line); |
95 | static void stopChat(); | 96 | static void stopChat(); |
96 | 97 | ||
98 | void toggleChannelControl(); | ||
99 | |||
97 | protected: | 100 | protected: |
98 | void sendChat(EChatType type); | 101 | void sendChat(EChatType type); |
99 | void updateChat(); | 102 | void updateChat(); |
@@ -110,6 +113,10 @@ protected: | |||
110 | LLComboBox* mGestureCombo; | 113 | LLComboBox* mGestureCombo; |
111 | 114 | ||
112 | LLChatBarGestureObserver* mObserver; | 115 | LLChatBarGestureObserver* mObserver; |
116 | |||
117 | private: | ||
118 | BOOL mChanCtrlEnabled; | ||
119 | LLSpinCtrl* mChannelControl; | ||
113 | }; | 120 | }; |
114 | 121 | ||
115 | extern LLChatBar *gChatBar; | 122 | extern LLChatBar *gChatBar; |
diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h index 6e0b6e8..21cc0c5 100644 --- a/linden/indra/newview/lldrawable.h +++ b/linden/indra/newview/lldrawable.h | |||
@@ -50,6 +50,7 @@ | |||
50 | #include "llviewerobject.h" | 50 | #include "llviewerobject.h" |
51 | #include "llrect.h" | 51 | #include "llrect.h" |
52 | #include "llappviewer.h" // for gFrameTimeSeconds | 52 | #include "llappviewer.h" // for gFrameTimeSeconds |
53 | #include "llimagej2c.h" | ||
53 | 54 | ||
54 | class LLCamera; | 55 | class LLCamera; |
55 | class LLDrawPool; | 56 | class LLDrawPool; |
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp index 8f58826..60fa608 100644 --- a/linden/indra/newview/llfilepicker.cpp +++ b/linden/indra/newview/llfilepicker.cpp | |||
@@ -329,6 +329,18 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename) | |||
329 | L"Targa, Bitmap Images (*.tga; *.bmp)\0*.tga;*.bmp\0" \ | 329 | L"Targa, Bitmap Images (*.tga; *.bmp)\0*.tga;*.bmp\0" \ |
330 | L"\0"; | 330 | L"\0"; |
331 | break; | 331 | break; |
332 | case FFSAVE_TEXT: | ||
333 | if (filename.empty()) | ||
334 | { | ||
335 | wcsncpy( mFilesW,L"untitled.txt", FILENAME_BUFFER_SIZE); /*Flawfinder: ignore*/ | ||
336 | } | ||
337 | mOFN.lpstrDefExt = L"txt"; | ||
338 | mOFN.lpstrFilter = | ||
339 | L"Text files (*.txt)\0*.txt\0" | ||
340 | L"RTF Files (*.rtf)\0*.rtf\0" | ||
341 | L"LSL Files (*.lsl)\0*.lsl\0" | ||
342 | L"\0"; | ||
343 | break; | ||
332 | case FFSAVE_WAV: | 344 | case FFSAVE_WAV: |
333 | if (filename.empty()) | 345 | if (filename.empty()) |
334 | { | 346 | { |
@@ -996,6 +1008,12 @@ GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::stri | |||
996 | (GTK_FILE_CHOOSER(win), | 1008 | (GTK_FILE_CHOOSER(win), |
997 | this_path->second.c_str()); | 1009 | this_path->second.c_str()); |
998 | } | 1010 | } |
1011 | else if (getenv("HOME")) | ||
1012 | { | ||
1013 | gtk_file_chooser_set_current_folder | ||
1014 | (GTK_FILE_CHOOSER(win), | ||
1015 | getenv("HOME")); | ||
1016 | } | ||
999 | 1017 | ||
1000 | # if LL_X11 | 1018 | # if LL_X11 |
1001 | // Make GTK tell the window manager to associate this | 1019 | // Make GTK tell the window manager to associate this |
diff --git a/linden/indra/newview/llfilepicker.h b/linden/indra/newview/llfilepicker.h index 104e0df..63699b2 100644 --- a/linden/indra/newview/llfilepicker.h +++ b/linden/indra/newview/llfilepicker.h | |||
@@ -91,6 +91,7 @@ public: | |||
91 | FFLOAD_XML = 6, | 91 | FFLOAD_XML = 6, |
92 | FFLOAD_SLOBJECT = 7, | 92 | FFLOAD_SLOBJECT = 7, |
93 | FFLOAD_RAW = 8, | 93 | FFLOAD_RAW = 8, |
94 | FFLOAD_TEXT = 9, | ||
94 | }; | 95 | }; |
95 | 96 | ||
96 | enum ESaveFilter | 97 | enum ESaveFilter |
@@ -110,6 +111,8 @@ public: | |||
110 | FFSAVE_J2C = 12, | 111 | FFSAVE_J2C = 12, |
111 | FFSAVE_PNG = 13, | 112 | FFSAVE_PNG = 13, |
112 | FFSAVE_JPEG = 14, | 113 | FFSAVE_JPEG = 14, |
114 | FFSAVE_HPA = 15, | ||
115 | FFSAVE_TEXT = 16, | ||
113 | }; | 116 | }; |
114 | 117 | ||
115 | // open the dialog. This is a modal operation | 118 | // open the dialog. This is a modal operation |
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp index 9ee24d6..513cba3 100644 --- a/linden/indra/newview/llfirstuse.cpp +++ b/linden/indra/newview/llfirstuse.cpp | |||
@@ -45,6 +45,10 @@ | |||
45 | #include "llappviewer.h" | 45 | #include "llappviewer.h" |
46 | #include "lltracker.h" | 46 | #include "lltracker.h" |
47 | 47 | ||
48 | // [RLVa:KB] - Version: 1.22.11 | ||
49 | #include "llviewerwindow.h" | ||
50 | // [/RLVa:KB] | ||
51 | |||
48 | // static | 52 | // static |
49 | std::set<std::string> LLFirstUse::sConfigVariables; | 53 | std::set<std::string> LLFirstUse::sConfigVariables; |
50 | 54 | ||
@@ -132,6 +136,17 @@ void LLFirstUse::useMap() | |||
132 | } | 136 | } |
133 | 137 | ||
134 | // static | 138 | // static |
139 | void LLFirstUse::useMiniMap() | ||
140 | { | ||
141 | if (gSavedSettings.getWarning("FirstMiniMap")) | ||
142 | { | ||
143 | gSavedSettings.setWarning("FirstMiniMap", FALSE); | ||
144 | |||
145 | LLNotifyBox::showXml("FirstMiniMap"); | ||
146 | } | ||
147 | } | ||
148 | |||
149 | // static | ||
135 | void LLFirstUse::useGoTo() | 150 | void LLFirstUse::useGoTo() |
136 | { | 151 | { |
137 | // nothing for now JC | 152 | // nothing for now JC |
@@ -277,3 +292,36 @@ void LLFirstUse::useMedia() | |||
277 | LLNotifications::instance().add("FirstMedia"); | 292 | LLNotifications::instance().add("FirstMedia"); |
278 | } | 293 | } |
279 | } | 294 | } |
295 | |||
296 | // [RLVa:KB] - Version: 1.22.11 | Checked: RLVa-1.0.3a (2009-09-10) | Added: RLVa-1.0.3a | ||
297 | |||
298 | // SL-1.22.11 doesn't seem to have a way to check which notifications are currently open :( | ||
299 | bool rlvHasVisibleFirstUseNotification() | ||
300 | { | ||
301 | return false; | ||
302 | } | ||
303 | |||
304 | void LLFirstUse::showRlvFirstUseNotification(const std::string& strName) | ||
305 | { | ||
306 | if ( (gSavedSettings.getWarning(strName)) && (!rlvHasVisibleFirstUseNotification()) ) | ||
307 | { | ||
308 | gSavedSettings.setWarning(strName, FALSE); | ||
309 | LLNotifyBox::showXml(strName); | ||
310 | } | ||
311 | } | ||
312 | |||
313 | void LLFirstUse::warnRlvGiveToRLV() | ||
314 | { | ||
315 | if ( (gSavedSettings.getWarning(RLV_SETTING_FIRSTUSE_GIVETORLV)) && (RlvSettings::getForbidGiveToRLV()) ) | ||
316 | gViewerWindow->alertXml(RLV_SETTING_FIRSTUSE_GIVETORLV, LLStringUtil::format_map_t(), &LLFirstUse::onRlvGiveToRLVConfirmation, NULL); | ||
317 | } | ||
318 | |||
319 | void LLFirstUse::onRlvGiveToRLVConfirmation(S32 idxOption, void* /*pUserParam*/) | ||
320 | { | ||
321 | gSavedSettings.setWarning(RLV_SETTING_FIRSTUSE_GIVETORLV, FALSE); | ||
322 | |||
323 | if ( (0 == idxOption) || (1 == idxOption) ) | ||
324 | gSavedSettings.setBOOL(RLV_SETTING_FORBIDGIVETORLV, (idxOption == 1)); | ||
325 | } | ||
326 | |||
327 | // [/RLVa:KB] | ||
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h index bb64cdd..3305ffe 100644 --- a/linden/indra/newview/llfirstuse.h +++ b/linden/indra/newview/llfirstuse.h | |||
@@ -36,6 +36,10 @@ | |||
36 | #include <vector> | 36 | #include <vector> |
37 | #include "llstring.h" | 37 | #include "llstring.h" |
38 | 38 | ||
39 | // [RLVa:KB] | ||
40 | #include "rlvdefines.h" | ||
41 | // [/RLVa:KB] | ||
42 | |||
39 | /* | 43 | /* |
40 | 1. On first use of 'sit here', explain how to get up and rotate view. | 44 | 1. On first use of 'sit here', explain how to get up and rotate view. |
41 | 45 | ||
@@ -93,6 +97,7 @@ public: | |||
93 | static void useBalanceDecrease(S32 delta); | 97 | static void useBalanceDecrease(S32 delta); |
94 | static void useSit(); | 98 | static void useSit(); |
95 | static void useMap(); | 99 | static void useMap(); |
100 | static void useMiniMap(); | ||
96 | static void useGoTo(); | 101 | static void useGoTo(); |
97 | static void useBuild(); | 102 | static void useBuild(); |
98 | static void useLeftClickNoHit(); | 103 | static void useLeftClickNoHit(); |
@@ -109,6 +114,19 @@ public: | |||
109 | 114 | ||
110 | protected: | 115 | protected: |
111 | static std::set<std::string> sConfigVariables; | 116 | static std::set<std::string> sConfigVariables; |
117 | |||
118 | // [RLVa:KB] - Checked: RLVa-1.0.3a (2009-09-10) | Added: RLVa-1.0.3a | ||
119 | public: | ||
120 | static void showRlvFirstUseNotification(const std::string& strName); | ||
121 | |||
122 | static void useRlvDetach() { showRlvFirstUseNotification(RLV_SETTING_FIRSTUSE_DETACH); } | ||
123 | static void useRlvEnableWear() { showRlvFirstUseNotification(RLV_SETTING_FIRSTUSE_ENABLEWEAR); } | ||
124 | static void useRlvFartouch() { showRlvFirstUseNotification(RLV_SETTING_FIRSTUSE_FARTOUCH); } | ||
125 | |||
126 | static void warnRlvGiveToRLV(); | ||
127 | protected: | ||
128 | static void onRlvGiveToRLVConfirmation(S32 idxOption, void* pUserParam); | ||
129 | // [/RLVa:KB] | ||
112 | }; | 130 | }; |
113 | 131 | ||
114 | #endif | 132 | #endif |
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp index 32b2c18..686353b 100644 --- a/linden/indra/newview/llfloaterabout.cpp +++ b/linden/indra/newview/llfloaterabout.cpp | |||
@@ -139,7 +139,15 @@ LLFloaterAbout::LLFloaterAbout() | |||
139 | 139 | ||
140 | // Position | 140 | // Position |
141 | LLViewerRegion* region = gAgent.getRegion(); | 141 | LLViewerRegion* region = gAgent.getRegion(); |
142 | if (region) | 142 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-04 (RLVa-1.0.0a) |
143 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
144 | { | ||
145 | support.append(rlv_handler_t::cstrHidden); | ||
146 | support.append("\n\n"); | ||
147 | } | ||
148 | else if (region) | ||
149 | // [/RLVa:KB] | ||
150 | // if (region) | ||
143 | { | 151 | { |
144 | LLStyleSP server_link_style(new LLStyle); | 152 | LLStyleSP server_link_style(new LLStyle); |
145 | server_link_style->setVisible(true); | 153 | server_link_style->setVisible(true); |
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp index c19c0c4..51e7b89 100644 --- a/linden/indra/newview/llfloateractivespeakers.cpp +++ b/linden/indra/newview/llfloateractivespeakers.cpp | |||
@@ -100,6 +100,11 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c | |||
100 | if (speaker_ptr) | 100 | if (speaker_ptr) |
101 | { | 101 | { |
102 | speaker_ptr->mDisplayName = first + " " + last; | 102 | speaker_ptr->mDisplayName = first + " " + last; |
103 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g | ||
104 | // TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventuall get fixed | ||
105 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
106 | speaker_ptr->mDisplayName = gRlvHandler.getAnonym(speaker_ptr->mDisplayName); | ||
107 | // [/RLVa:KB] | ||
103 | } | 108 | } |
104 | } | 109 | } |
105 | 110 | ||
@@ -712,6 +717,13 @@ void LLPanelActiveSpeakers::onVolumeChange(LLUICtrl* source, void* user_data) | |||
712 | //static | 717 | //static |
713 | void LLPanelActiveSpeakers::onClickProfile(void* user_data) | 718 | void LLPanelActiveSpeakers::onClickProfile(void* user_data) |
714 | { | 719 | { |
720 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g | ||
721 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
722 | { | ||
723 | return; | ||
724 | } | ||
725 | // [/RLVa:KB] | ||
726 | |||
715 | LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; | 727 | LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; |
716 | LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); | 728 | LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); |
717 | 729 | ||
@@ -721,6 +733,13 @@ void LLPanelActiveSpeakers::onClickProfile(void* user_data) | |||
721 | //static | 733 | //static |
722 | void LLPanelActiveSpeakers::onDoubleClickSpeaker(void* user_data) | 734 | void LLPanelActiveSpeakers::onDoubleClickSpeaker(void* user_data) |
723 | { | 735 | { |
736 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g | ||
737 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
738 | { | ||
739 | return; | ||
740 | } | ||
741 | // [/RLVa:KB] | ||
742 | |||
724 | LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; | 743 | LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; |
725 | LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); | 744 | LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); |
726 | 745 | ||
diff --git a/linden/indra/newview/llfloaterassetbrowser.cpp b/linden/indra/newview/llfloaterassetbrowser.cpp new file mode 100644 index 0000000..615d21a --- /dev/null +++ b/linden/indra/newview/llfloaterassetbrowser.cpp | |||
@@ -0,0 +1,466 @@ | |||
1 | /** | ||
2 | * @file llfloaterassetbrowser.cpp | ||
3 | * @brief LLFloaterAssetBrowser class implementation | ||
4 | * Phox wuz hurr | ||
5 | */ | ||
6 | |||
7 | #include "llviewerprecompiledheaders.h" | ||
8 | #include "llfloaterassetbrowser.h" | ||
9 | #include "llinventoryview.h" | ||
10 | #include "llinventorymodel.h" | ||
11 | #include "llviewerimagelist.h" | ||
12 | #include "llbutton.h" | ||
13 | #include "lltextbox.h" | ||
14 | #include "llpreview.h" | ||
15 | #include "llinventorybridge.h" | ||
16 | #include "llagent.h" | ||
17 | #include "lltooldraganddrop.h" | ||
18 | #include "llfocusmgr.h" | ||
19 | #include "llview.h" | ||
20 | |||
21 | // Externs | ||
22 | extern LLInventoryModel gInventory; | ||
23 | |||
24 | // Statics | ||
25 | LLFloaterAssetBrowser* LLFloaterAssetBrowser::sInstance = NULL; | ||
26 | |||
27 | LLFloaterAssetBrowser::LLFloaterAssetBrowser() | ||
28 | : LLFloater("floater_asset_browser") | ||
29 | { | ||
30 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_asset_browser.xml"); | ||
31 | |||
32 | mInventoryPanel = getChild<LLInventoryPanel>("inventory panel"); | ||
33 | |||
34 | //Open all folders and close them in order to make item list up-to-date | ||
35 | //if(gInventory.getItemCount()==0) | ||
36 | mInventoryPanel->openAllFolders(); | ||
37 | |||
38 | //gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE)); | ||
39 | |||
40 | |||
41 | childSetAction("button next", onClickNext, this); | ||
42 | childSetAction("button previous", onClickPrevious, this); | ||
43 | childSetAction("button refresh", onClickRefresh, this); | ||
44 | |||
45 | initialize(); | ||
46 | createThumbnails(); | ||
47 | mInventoryPanel->closeAllFolders(); | ||
48 | } | ||
49 | |||
50 | // static | ||
51 | void LLFloaterAssetBrowser::show(void*) | ||
52 | { | ||
53 | if (!sInstance) | ||
54 | sInstance = new LLFloaterAssetBrowser(); | ||
55 | |||
56 | sInstance->open(); | ||
57 | } | ||
58 | |||
59 | // virtual | ||
60 | LLFloaterAssetBrowser::~LLFloaterAssetBrowser() | ||
61 | { | ||
62 | clearAssetInfoTexts(); | ||
63 | mTextureAssets.clear(); | ||
64 | mMaxIndex = 0; | ||
65 | mFirstIndex = 0; | ||
66 | mMouseOverIndex = 0; | ||
67 | mMouseOverUUID = LLUUID::null; | ||
68 | mMouseOverAssetUUID = LLUUID::null; | ||
69 | mFloaterTitle = ""; | ||
70 | clearNoAssetsText(); | ||
71 | sInstance=NULL; | ||
72 | } | ||
73 | |||
74 | void LLFloaterAssetBrowser::initialize() | ||
75 | { | ||
76 | mMaxIndex = ITEMS_PER_PAGE; | ||
77 | mFirstIndex = 0; | ||
78 | mAssetInfoLabelList.clear(); | ||
79 | mAssetInfoIndex = 0; | ||
80 | mFloaterHeight = getRect().getHeight(); | ||
81 | mFloaterWidth = getRect().getWidth(); | ||
82 | mMouseOverIndex = 0; | ||
83 | mMouseOverUUID = LLUUID::null; | ||
84 | mMouseOverAssetUUID = LLUUID::null; | ||
85 | mFloaterTitle = ""; | ||
86 | |||
87 | S32 image_top = getRect().getHeight(); | ||
88 | S32 image_bottom = BTN_HEIGHT_SMALL; | ||
89 | S32 image_middle = (image_top + image_bottom) / 2; | ||
90 | S32 line_height = llround(LLFontGL::sSansSerifSmall->getLineHeight()); | ||
91 | |||
92 | mNoAssetsLabel = new LLTextBox("mNoAssetsLabel.", | ||
93 | LLRect(getRect().getWidth()/2, | ||
94 | image_middle + line_height / 2, | ||
95 | getRect().getWidth(), | ||
96 | image_middle - line_height / 2 ), | ||
97 | "No assets found.", | ||
98 | LLFontGL::sSansSerifSmall ); | ||
99 | mNoAssetsLabel->setFollowsAll(); | ||
100 | addChild(mNoAssetsLabel); | ||
101 | mNoAssetsLabel->setVisible(FALSE); | ||
102 | } | ||
103 | |||
104 | void LLFloaterAssetBrowser::createThumbnails() | ||
105 | { | ||
106 | LLViewerInventoryCategory::cat_array_t cats; | ||
107 | LLViewerInventoryItem::item_array_t items; | ||
108 | LLIsType isType(LLAssetType::AT_TEXTURE); | ||
109 | |||
110 | gInventory.collectDescendentsIf(LLUUID::null, | ||
111 | cats, | ||
112 | items, | ||
113 | LLInventoryModel::INCLUDE_TRASH, | ||
114 | isType); | ||
115 | |||
116 | //Get UUID, asset UUID and name | ||
117 | for(S32 i = 0; i < items.count(); i++) | ||
118 | { | ||
119 | LLInventoryItem* itemp = items[i]; | ||
120 | LLAssetSelection temp; | ||
121 | temp.mAssetUUID = itemp->getAssetUUID(); | ||
122 | temp.mUUID = itemp->getUUID(); | ||
123 | temp.mName = itemp->getName(); | ||
124 | temp.mTexturep = NULL; | ||
125 | temp.mAssetRect = LLRect::null; | ||
126 | mTextureAssets.push_back(temp); | ||
127 | } | ||
128 | |||
129 | //Get Texturep | ||
130 | for(S32 i = 0; i < items.count(); i++) | ||
131 | { | ||
132 | mTextureAssets[i].mTexturep = gImageList.getImage(mTextureAssets[i].mAssetUUID, MIPMAP_YES, IMMEDIATE_NO); | ||
133 | mTextureAssets[i].mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW); | ||
134 | //mTextureAssets[i].mTexturep->processTextureStats(); | ||
135 | } | ||
136 | |||
137 | //Generate the asset info text | ||
138 | /*for(S32 i = 0; i < items.count(); i++) | ||
139 | { | ||
140 | LLString asset_info; | ||
141 | LLString dimensions; | ||
142 | |||
143 | asset_info.append(mTextureAssets[i].mName); | ||
144 | |||
145 | //if(mTextureAssets[i].mTexturep->mFullWidth == 0 | ||
146 | //|| mTextureAssets[i].mTexturep->mFullHeight == 0) | ||
147 | |||
148 | dimensions = llformat("\n%d x %d", | ||
149 | mTextureAssets[i].mTexturep->mFullWidth, | ||
150 | mTextureAssets[i].mTexturep->mFullHeight); | ||
151 | asset_info.append(dimensions); | ||
152 | |||
153 | mTextureAssets[i].mAssetInfo = asset_info; | ||
154 | }*/ | ||
155 | |||
156 | mFloaterTitle = llformat("Asset Browser (%d assets fetched)", mTextureAssets.size()); | ||
157 | setTitle(mFloaterTitle); | ||
158 | } | ||
159 | |||
160 | // virtual | ||
161 | BOOL LLFloaterAssetBrowser::handleHover(S32 x, S32 y, MASK mask) | ||
162 | { | ||
163 | if(mTextureAssets.size() > 0) | ||
164 | { | ||
165 | for(U32 i = mFirstIndex; i < mMaxIndex; i++) | ||
166 | { | ||
167 | if(i < mTextureAssets.size()) | ||
168 | { | ||
169 | if(mTextureAssets[i].mAssetRect.pointInRect(x,y)) | ||
170 | { | ||
171 | mMouseOverUUID = mTextureAssets[i].mUUID; | ||
172 | mMouseOverIndex = i; | ||
173 | |||
174 | if(hasMouseCapture()) | ||
175 | { | ||
176 | S32 screen_x; | ||
177 | S32 screen_y; | ||
178 | LLUUID mObjectUUID= LLUUID::null; | ||
179 | const LLViewerInventoryItem *item = gInventory.getItem(mMouseOverUUID); | ||
180 | |||
181 | localPointToScreen(x, y, &screen_x, &screen_y ); | ||
182 | |||
183 | if(item && item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()) | ||
184 | && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) | ||
185 | { | ||
186 | EDragAndDropType type; | ||
187 | type = LLAssetType::lookupDragAndDropType(item->getType()); | ||
188 | LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY; | ||
189 | |||
190 | if(!mObjectUUID.isNull()) | ||
191 | { | ||
192 | src = LLToolDragAndDrop::SOURCE_WORLD; | ||
193 | } | ||
194 | else if(item->getPermissions().getOwner() == gAgent.getID()) | ||
195 | { | ||
196 | src = LLToolDragAndDrop::SOURCE_AGENT; | ||
197 | } | ||
198 | LLToolDragAndDrop::getInstance()->beginDrag(type, | ||
199 | item->getUUID(), | ||
200 | src, | ||
201 | mObjectUUID); | ||
202 | return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask); | ||
203 | } | ||
204 | return TRUE; | ||
205 | } | ||
206 | return LLFloater::handleHover(x, y, mask); | ||
207 | } | ||
208 | } | ||
209 | } | ||
210 | return LLFloater::handleHover(x, y, mask); | ||
211 | } | ||
212 | else | ||
213 | { | ||
214 | mMouseOverUUID = LLUUID::null; | ||
215 | return LLFloater::handleHover(x, y, mask); | ||
216 | } | ||
217 | } | ||
218 | |||
219 | // virtual | ||
220 | BOOL LLFloaterAssetBrowser::handleMouseDown(S32 x, S32 y, MASK mask) | ||
221 | { | ||
222 | if(mTextureAssets.size() > 0) | ||
223 | { | ||
224 | if(mTextureAssets[mMouseOverIndex].mAssetRect.pointInRect(x,y)) | ||
225 | { | ||
226 | if(mMouseOverUUID.notNull()) | ||
227 | { | ||
228 | gFocusMgr.setMouseCapture(this); | ||
229 | S32 screen_x; | ||
230 | S32 screen_y; | ||
231 | localPointToScreen(x, y, &screen_x, &screen_y); | ||
232 | LLToolDragAndDrop::getInstance()->setDragStart(screen_x, screen_y); | ||
233 | return TRUE; | ||
234 | } | ||
235 | } | ||
236 | } | ||
237 | return LLFloater::handleMouseDown(x, y, mask); | ||
238 | } | ||
239 | |||
240 | // virtual | ||
241 | BOOL LLFloaterAssetBrowser::handleMouseUp(S32 x, S32 y, MASK mask) | ||
242 | { | ||
243 | if(hasMouseCapture()) | ||
244 | { | ||
245 | gFocusMgr.setMouseCapture(NULL); | ||
246 | return TRUE; | ||
247 | } | ||
248 | return LLFloater::handleMouseUp(x, y, mask); | ||
249 | } | ||
250 | |||
251 | // virtual | ||
252 | BOOL LLFloaterAssetBrowser::handleDoubleClick(S32 x, S32 y, MASK mask) | ||
253 | { | ||
254 | if(mTextureAssets.size() > 0) | ||
255 | { | ||
256 | if(mTextureAssets[mMouseOverIndex].mAssetRect.pointInRect(x,y)) | ||
257 | { | ||
258 | if(mMouseOverUUID.notNull()) | ||
259 | { | ||
260 | open_texture(mMouseOverUUID, mTextureAssets[mMouseOverIndex].mName, FALSE); | ||
261 | return TRUE; | ||
262 | } | ||
263 | } | ||
264 | } | ||
265 | return LLFloater::handleDoubleClick(x, y, mask); | ||
266 | } | ||
267 | |||
268 | // virtual | ||
269 | void LLFloaterAssetBrowser::draw() | ||
270 | { | ||
271 | LLFloater::draw(); | ||
272 | |||
273 | if(mTextureAssets.size() > 0) | ||
274 | { | ||
275 | S32 hor_pos = 0; | ||
276 | S32 ver_pos = 0; | ||
277 | U32 items_per_row = 0; | ||
278 | S32 height = getRect().getHeight()/8; | ||
279 | S32 width = height; | ||
280 | |||
281 | for(U32 i = mFirstIndex; i < mMaxIndex; i++) | ||
282 | { | ||
283 | if(i < mTextureAssets.size()) | ||
284 | { | ||
285 | mTexturep = NULL; | ||
286 | mImageAssetID = mTextureAssets[i].mAssetUUID; | ||
287 | |||
288 | if(mImageAssetID.notNull()) | ||
289 | { | ||
290 | mTexturep = gImageList.getImage(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); | ||
291 | //mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW); | ||
292 | mTexturep->processTextureStats(); | ||
293 | mTextureAssets[i].mWidth = mTexturep->mFullWidth; | ||
294 | mTextureAssets[i].mHeight = mTexturep->mFullHeight; | ||
295 | } | ||
296 | |||
297 | if(isMinimized()) | ||
298 | { | ||
299 | return; | ||
300 | } | ||
301 | |||
302 | //Border | ||
303 | LLRect border; | ||
304 | border.mLeft = START_POS + ver_pos; | ||
305 | border.mTop = getRect().getHeight() - LLFLOATER_HEADER_SIZE - BORDER_PAD - hor_pos; | ||
306 | border.mRight = border.mLeft + width; | ||
307 | border.mBottom = border.mTop - height; | ||
308 | |||
309 | //Save the rect for each thumbnail | ||
310 | mTextureAssets[i].mAssetRect = border; | ||
311 | |||
312 | //Asset info rect | ||
313 | LLRect info_rect; | ||
314 | info_rect.mLeft = border.mLeft; | ||
315 | info_rect.mTop = border.mBottom - 3; | ||
316 | info_rect.mRight = border.mLeft + 130; | ||
317 | info_rect.mBottom = border.mBottom - 2*llround(LLFontGL::sSansSerifSmall->getLineHeight()); | ||
318 | |||
319 | gl_rect_2d(border, LLColor4::black, FALSE); | ||
320 | |||
321 | // Interior | ||
322 | LLRect interior = border; | ||
323 | interior.stretch(1); | ||
324 | |||
325 | //Draw the image | ||
326 | if(mTexturep) | ||
327 | { | ||
328 | if(mTexturep->getComponents() == 4) | ||
329 | { | ||
330 | gl_rect_2d_checkerboard(interior); | ||
331 | } | ||
332 | |||
333 | gl_draw_scaled_image(interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep); | ||
334 | // Pump the priority | ||
335 | mTexturep->addTextureStats((F32)(interior.getWidth() * interior.getHeight())); | ||
336 | |||
337 | //Generate the asset info text | ||
338 | std::string asset_info; | ||
339 | asset_info.append(mTextureAssets[i].mName); | ||
340 | std::string dimensions = llformat("\n%d x %d", | ||
341 | mTexturep->mFullWidth /*mTextureAssets[i].mWidth*/, | ||
342 | mTexturep->mFullHeight /* mTextureAssets[i].mHeight*/); | ||
343 | asset_info.append(dimensions); | ||
344 | |||
345 | // Draw material info below the asset | ||
346 | // LLTextBox object has to be drawn only once, not non-stop like image | ||
347 | if(mAssetInfoIndex < ITEMS_PER_PAGE && | ||
348 | mAssetInfoIndex < mTextureAssets.size() - mFirstIndex) | ||
349 | { | ||
350 | mAssetInfoLabel = new LLTextBox("Asset Info"/*mTextureAssets[i].mAssetInfo*/, | ||
351 | info_rect, | ||
352 | asset_info, | ||
353 | LLFontGL::sSansSerifSmall); | ||
354 | mAssetInfoLabel->setFollowsAll(); | ||
355 | mAssetInfoLabelList.push_back(mAssetInfoLabel); | ||
356 | addChild(mAssetInfoLabelList[mAssetInfoIndex]); | ||
357 | mAssetInfoLabelList[mAssetInfoIndex]->setVisible(TRUE); | ||
358 | mAssetInfoIndex++; | ||
359 | } | ||
360 | |||
361 | } | ||
362 | else | ||
363 | { | ||
364 | // Draw X | ||
365 | gl_rect_2d(interior, LLColor4::grey, TRUE); | ||
366 | gl_draw_x(interior, LLColor4::black); | ||
367 | } | ||
368 | //Move to the right | ||
369 | ver_pos += getRect().getWidth()/6; | ||
370 | items_per_row++; | ||
371 | |||
372 | //Change the row | ||
373 | if(items_per_row % 4 == 0) | ||
374 | { | ||
375 | ver_pos = 0; | ||
376 | hor_pos += getRect().getHeight()/4; | ||
377 | } | ||
378 | } | ||
379 | }//for | ||
380 | |||
381 | //If the size of the floater has changed, clear the asset info texts | ||
382 | //in order to draw them again into the new position | ||
383 | if(getRect().getWidth() != mFloaterWidth || getRect().getHeight() != mFloaterHeight) | ||
384 | { | ||
385 | clearAssetInfoTexts(); | ||
386 | //Save the size of the current floater | ||
387 | mFloaterWidth = getRect().getWidth(); | ||
388 | mFloaterHeight = getRect().getHeight(); | ||
389 | } | ||
390 | if(mMaxIndex >= mTextureAssets.size()) | ||
391 | { | ||
392 | childDisable("button next"); | ||
393 | childEnable("button previous"); | ||
394 | } | ||
395 | else if(mFirstIndex <= 0) | ||
396 | { | ||
397 | childEnable("button next"); | ||
398 | childDisable("button previous"); | ||
399 | } | ||
400 | else | ||
401 | { | ||
402 | childEnable("button next"); | ||
403 | childEnable("button previous"); | ||
404 | } | ||
405 | } | ||
406 | else | ||
407 | { | ||
408 | //No assets found | ||
409 | mNoAssetsLabel->setVisible(TRUE); | ||
410 | childDisable("button next"); | ||
411 | childDisable("button previous"); | ||
412 | } | ||
413 | } | ||
414 | |||
415 | void LLFloaterAssetBrowser::clearAssetInfoTexts() | ||
416 | { | ||
417 | for(U32 i = 0; i < mAssetInfoLabelList.size(); i++) | ||
418 | { | ||
419 | delete mAssetInfoLabelList[i]; | ||
420 | mAssetInfoLabelList[i] = NULL; | ||
421 | } | ||
422 | mAssetInfoLabelList.clear(); | ||
423 | mAssetInfoIndex = 0; | ||
424 | } | ||
425 | |||
426 | void LLFloaterAssetBrowser::clearNoAssetsText() | ||
427 | { | ||
428 | if(mTextureAssets.size() > 0) | ||
429 | { | ||
430 | delete mNoAssetsLabel; | ||
431 | mNoAssetsLabel = NULL; | ||
432 | } | ||
433 | } | ||
434 | |||
435 | // static | ||
436 | void LLFloaterAssetBrowser::onClickNext(void *userdata) | ||
437 | { | ||
438 | LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata; | ||
439 | self->mFirstIndex = self->mMaxIndex; | ||
440 | self->mMaxIndex = self->mFirstIndex + ITEMS_PER_PAGE; | ||
441 | self->clearAssetInfoTexts(); | ||
442 | } | ||
443 | |||
444 | // static | ||
445 | void LLFloaterAssetBrowser::onClickPrevious(void *userdata) | ||
446 | { | ||
447 | LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata; | ||
448 | self->mFirstIndex = self->mMaxIndex - (2 * ITEMS_PER_PAGE); | ||
449 | self->mMaxIndex = self->mMaxIndex - ITEMS_PER_PAGE; | ||
450 | self->clearAssetInfoTexts(); | ||
451 | } | ||
452 | |||
453 | // static | ||
454 | void LLFloaterAssetBrowser::onClickRefresh(void *userdata) | ||
455 | { | ||
456 | LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata; | ||
457 | for(U32 i = 0; i < self->mTextureAssets.size(); i++) | ||
458 | { | ||
459 | self->mTextureAssets[i].mTexturep = NULL; | ||
460 | } | ||
461 | |||
462 | self->mTextureAssets.clear(); | ||
463 | self->createThumbnails(); | ||
464 | self->clearNoAssetsText(); | ||
465 | self->clearAssetInfoTexts(); | ||
466 | } | ||
diff --git a/linden/indra/newview/llfloaterassetbrowser.h b/linden/indra/newview/llfloaterassetbrowser.h new file mode 100644 index 0000000..76eb3ba --- /dev/null +++ b/linden/indra/newview/llfloaterassetbrowser.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /** | ||
2 | * @file llfloaterassetbrowser.h | ||
3 | * @brief LLFloaterAssetBrowser class implementation | ||
4 | * Phox wuz hurr | ||
5 | */ | ||
6 | |||
7 | #ifndef LL_LLFLOATERASSETBROWSERVIEW_H | ||
8 | #define LL_LLFLOATERASSETBROWSERVIEW_H | ||
9 | |||
10 | #include "llfloater.h" | ||
11 | #include "llinventorymodel.h" | ||
12 | #include "llview.h" | ||
13 | #include "llviewerimage.h" | ||
14 | |||
15 | class LLInventoryPanel; | ||
16 | |||
17 | struct LLAssetSelection | ||
18 | { | ||
19 | LLUUID mUUID; | ||
20 | LLUUID mAssetUUID; | ||
21 | std::string mName; | ||
22 | std::string mAssetInfo; | ||
23 | S32 mWidth; | ||
24 | S32 mHeight; | ||
25 | LLTextBox* mAssetInfoTextBox; | ||
26 | LLPointer<LLViewerImage> mTexturep; | ||
27 | LLRect mAssetRect; | ||
28 | }; | ||
29 | |||
30 | class LLFloaterAssetBrowser : public LLFloater | ||
31 | { | ||
32 | public: | ||
33 | LLFloaterAssetBrowser(); | ||
34 | |||
35 | virtual ~LLFloaterAssetBrowser(); | ||
36 | |||
37 | static void show(void*); | ||
38 | |||
39 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); | ||
40 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); | ||
41 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); | ||
42 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); | ||
43 | virtual void draw(); | ||
44 | |||
45 | static LLFloaterAssetBrowser* getInstance(){ return sInstance; } | ||
46 | |||
47 | private: | ||
48 | void initialize(); | ||
49 | void createThumbnails(); | ||
50 | void clearAssetInfoTexts(); | ||
51 | void clearNoAssetsText(); | ||
52 | |||
53 | static void onClickNext(void *userdata); | ||
54 | static void onClickPrevious(void *userdata); | ||
55 | static void onClickRefresh(void *userdata); | ||
56 | |||
57 | static LLFloaterAssetBrowser* sInstance; | ||
58 | |||
59 | protected: | ||
60 | LLInventoryPanel* mInventoryPanel; | ||
61 | LLUUID mImageAssetID; | ||
62 | LLUUID mMouseOverUUID; | ||
63 | LLUUID mMouseOverAssetUUID; | ||
64 | LLPointer<LLViewerImage> mTexturep; | ||
65 | std::vector<LLAssetSelection> mTextureAssets; | ||
66 | std::vector<LLTextBox*> mAssetInfoLabelList; | ||
67 | U32 mLastIndex; | ||
68 | U32 mMaxIndex; | ||
69 | U32 mFirstIndex; | ||
70 | U32 mAssetInfoIndex; | ||
71 | S32 mFloaterHeight; | ||
72 | S32 mFloaterWidth; | ||
73 | S32 mMouseOverIndex; | ||
74 | LLTextBox* mNoAssetsLabel; | ||
75 | LLTextBox* mAssetInfoLabel; | ||
76 | std::string mFloaterTitle; | ||
77 | }; | ||
78 | |||
79 | static const S32 HPAD = 4; | ||
80 | static const S32 BORDER_PAD = HPAD; | ||
81 | static const U32 ITEMS_PER_PAGE = 16; | ||
82 | static const S32 START_POS = 250; | ||
83 | |||
84 | #endif | ||
diff --git a/linden/indra/newview/llfloaterbeacons.cpp b/linden/indra/newview/llfloaterbeacons.cpp index 55e4862..5a5de77 100644 --- a/linden/indra/newview/llfloaterbeacons.cpp +++ b/linden/indra/newview/llfloaterbeacons.cpp | |||
@@ -38,6 +38,9 @@ | |||
38 | #include "llcheckboxctrl.h" | 38 | #include "llcheckboxctrl.h" |
39 | #include "pipeline.h" | 39 | #include "pipeline.h" |
40 | 40 | ||
41 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
42 | #include "llagent.h" | ||
43 | // [/RLVa:KB] | ||
41 | 44 | ||
42 | LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed) | 45 | LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed) |
43 | { | 46 | { |
@@ -73,6 +76,13 @@ BOOL LLFloaterBeacons::postBuild() | |||
73 | // Too bad we can't just add control_name="BeaconsEnabled" to the XML. | 76 | // Too bad we can't just add control_name="BeaconsEnabled" to the XML. |
74 | void LLFloaterBeacons::open() | 77 | void LLFloaterBeacons::open() |
75 | { | 78 | { |
79 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
80 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
81 | { | ||
82 | return; | ||
83 | } | ||
84 | // [/RLVa:KB] | ||
85 | |||
76 | LLFloater::open(); | 86 | LLFloater::open(); |
77 | gSavedSettings.setBOOL( "BeaconsEnabled", TRUE); | 87 | gSavedSettings.setBOOL( "BeaconsEnabled", TRUE); |
78 | } | 88 | } |
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp index 703811b..3681a6f 100644 --- a/linden/indra/newview/llfloaterchat.cpp +++ b/linden/indra/newview/llfloaterchat.cpp | |||
@@ -57,10 +57,11 @@ | |||
57 | #include "llfloaterchatterbox.h" | 57 | #include "llfloaterchatterbox.h" |
58 | #include "llfloatermute.h" | 58 | #include "llfloatermute.h" |
59 | #include "llkeyboard.h" | 59 | #include "llkeyboard.h" |
60 | //#include "lllineeditor.h" | 60 | #include "lllineeditor.h" |
61 | #include "llmutelist.h" | 61 | #include "llmutelist.h" |
62 | //#include "llresizehandle.h" | 62 | //#include "llresizehandle.h" |
63 | #include "llchatbar.h" | 63 | #include "llchatbar.h" |
64 | #include "llspinctrl.h" | ||
64 | #include "llstatusbar.h" | 65 | #include "llstatusbar.h" |
65 | #include "llviewertexteditor.h" | 66 | #include "llviewertexteditor.h" |
66 | #include "llviewergesture.h" // for triggering gestures | 67 | #include "llviewergesture.h" // for triggering gestures |
@@ -110,6 +111,8 @@ LLFloaterChat::LLFloaterChat(const LLSD& seed) | |||
110 | childSetVisible("Chat History Editor with mute",FALSE); | 111 | childSetVisible("Chat History Editor with mute",FALSE); |
111 | childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this); | 112 | childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this); |
112 | setDefaultBtn("Chat"); | 113 | setDefaultBtn("Chat"); |
114 | |||
115 | //toggleHistoryChannelControl(); temporarily disable until working | ||
113 | } | 116 | } |
114 | 117 | ||
115 | LLFloaterChat::~LLFloaterChat() | 118 | LLFloaterChat::~LLFloaterChat() |
@@ -204,17 +207,32 @@ void add_timestamped_line(LLViewerTextEditor* edit, LLChat chat, const LLColor4& | |||
204 | // If the msg is from an agent (not yourself though), | 207 | // If the msg is from an agent (not yourself though), |
205 | // extract out the sender name and replace it with the hotlinked name. | 208 | // extract out the sender name and replace it with the hotlinked name. |
206 | if (chat.mSourceType == CHAT_SOURCE_AGENT && | 209 | if (chat.mSourceType == CHAT_SOURCE_AGENT && |
207 | chat.mFromID != LLUUID::null) | 210 | chat.mFromID != LLUUID::null && |
211 | // [RLVa] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
212 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ) | ||
213 | // [/RLVa] | ||
208 | { | 214 | { |
209 | chat.mURL = llformat("secondlife:///app/agent/%s/about",chat.mFromID.asString().c_str()); | 215 | chat.mURL = llformat("secondlife:///app/agent/%s/about",chat.mFromID.asString().c_str()); |
210 | } | 216 | } |
211 | 217 | ||
212 | // If the chat line has an associated url, link it up to the name. | 218 | // If the chat line has an associated url, link it up to the name. |
213 | if (!chat.mURL.empty() | 219 | if ((!chat.mURL.empty() && line.length() > chat.mFromName.length()) && |
214 | && (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0)) | 220 | (line.find(chat.mFromName,0) == 0 || (line.find(chat.mFromName,0) == 4 && |
221 | color == gSavedSettings.getColor4("ObjectIMColor")))) // hack to make sure IMs in chat history don't hightlight | ||
215 | { | 222 | { |
216 | std::string start_line = line.substr(0, chat.mFromName.length() + 1); | 223 | std::string start_line; |
217 | line = line.substr(chat.mFromName.length() + 1); | 224 | if (line.find(chat.mFromName,0) == 4) // IMs are prefaced with "IM: " |
225 | { | ||
226 | start_line = line.substr(4, chat.mFromName.length() + 1); | ||
227 | std::string source = line.substr(0, 4); | ||
228 | edit->appendColoredText(source, false, prepend_newline, color); | ||
229 | line = line.substr(chat.mFromName.length() + 5); | ||
230 | } | ||
231 | else | ||
232 | { | ||
233 | start_line = line.substr(0, chat.mFromName.length() + 1); | ||
234 | line = line.substr(chat.mFromName.length() + 1); | ||
235 | } | ||
218 | const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID,chat.mURL); | 236 | const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID,chat.mURL); |
219 | edit->appendStyledText(start_line, false, prepend_newline, sourceStyle); | 237 | edit->appendStyledText(start_line, false, prepend_newline, sourceStyle); |
220 | prepend_newline = false; | 238 | prepend_newline = false; |
@@ -232,9 +250,61 @@ void log_chat_text(const LLChat& chat) | |||
232 | 250 | ||
233 | LLLogChat::saveHistory(std::string("chat"),histstr); | 251 | LLLogChat::saveHistory(std::string("chat"),histstr); |
234 | } | 252 | } |
253 | |||
254 | // static | ||
255 | void LLFloaterChat::toggleHistoryChannelControl() | ||
256 | { | ||
257 | LLFloaterChat* chat_floater = LLFloaterChat::getInstance(LLSD()); | ||
258 | BOOL visible = gSavedSettings.getBOOL("ChatChannelSelect"); | ||
259 | BOOL control = chat_floater->getChild<LLSpinCtrl>("channel_control")->getVisible(); | ||
260 | |||
261 | LLLineEditor* input = chat_floater->getChild<LLLineEditor>("Chat Editor"); | ||
262 | LLRect input_rect = input->getRect(); | ||
263 | S32 chan_width = chat_floater->getChild<LLSpinCtrl>("channel_control")->getRect().getWidth(); | ||
264 | |||
265 | if (visible && !control) | ||
266 | { | ||
267 | input_rect.setLeftTopAndSize(input_rect.mLeft+chan_width+4, input_rect.mTop, | ||
268 | input_rect.getWidth()-chan_width, input_rect.getHeight()); | ||
269 | } | ||
270 | else if (!visible && control) | ||
271 | { | ||
272 | input_rect.setLeftTopAndSize(input_rect.mLeft-chan_width-4, input_rect.mTop, | ||
273 | input_rect.getWidth()+chan_width, input_rect.getHeight()); | ||
274 | } | ||
275 | input->setRect(input_rect); | ||
276 | |||
277 | chat_floater->childSetVisible("channel_control", visible); | ||
278 | chat_floater->childSetEnabled("channel_control", visible); | ||
279 | } | ||
280 | |||
235 | // static | 281 | // static |
236 | void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file) | 282 | void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file) |
237 | { | 283 | { |
284 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
285 | if (rlv_handler_t::isEnabled()) | ||
286 | { | ||
287 | // TODO-RLVa: we might cast too broad a net by filtering here, needs testing | ||
288 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (!chat.mRlvLocFiltered) && (CHAT_SOURCE_AGENT != chat.mSourceType) ) | ||
289 | { | ||
290 | LLChat& rlvChat = const_cast<LLChat&>(chat); | ||
291 | gRlvHandler.filterLocation(rlvChat.mText); | ||
292 | rlvChat.mRlvLocFiltered = TRUE; | ||
293 | } | ||
294 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (!chat.mRlvNamesFiltered) ) | ||
295 | { | ||
296 | // NOTE: this will also filter inventory accepted/declined text in the chat history | ||
297 | LLChat& rlvChat = const_cast<LLChat&>(chat); | ||
298 | if (CHAT_SOURCE_AGENT != chat.mSourceType) | ||
299 | { | ||
300 | // Filter object and system chat (names are filtered elsewhere to save ourselves an gObjectList lookup) | ||
301 | gRlvHandler.filterNames(rlvChat.mText); | ||
302 | } | ||
303 | rlvChat.mRlvNamesFiltered = TRUE; | ||
304 | } | ||
305 | } | ||
306 | // [/RLVa:KB] | ||
307 | |||
238 | if ( gSavedPerAccountSettings.getBOOL("LogChat") && log_to_file) | 308 | if ( gSavedPerAccountSettings.getBOOL("LogChat") && log_to_file) |
239 | { | 309 | { |
240 | log_chat_text(chat); | 310 | log_chat_text(chat); |
@@ -368,6 +438,30 @@ void LLFloaterChat::addChat(const LLChat& chat, | |||
368 | chat.mChatType == CHAT_TYPE_DEBUG_MSG | 438 | chat.mChatType == CHAT_TYPE_DEBUG_MSG |
369 | && !gSavedSettings.getBOOL("ScriptErrorsAsChat"); | 439 | && !gSavedSettings.getBOOL("ScriptErrorsAsChat"); |
370 | 440 | ||
441 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
442 | if (rlv_handler_t::isEnabled()) | ||
443 | { | ||
444 | // TODO-RLVa: we might cast too broad a net by filtering here, needs testing | ||
445 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (!chat.mRlvLocFiltered) && (CHAT_SOURCE_AGENT != chat.mSourceType) ) | ||
446 | { | ||
447 | LLChat& rlvChat = const_cast<LLChat&>(chat); | ||
448 | if (!from_instant_message) | ||
449 | gRlvHandler.filterLocation(rlvChat.mText); | ||
450 | rlvChat.mRlvLocFiltered = TRUE; | ||
451 | } | ||
452 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (!chat.mRlvNamesFiltered) ) | ||
453 | { | ||
454 | LLChat& rlvChat = const_cast<LLChat&>(chat); | ||
455 | if ( (!from_instant_message) && (CHAT_SOURCE_AGENT != chat.mSourceType) ) | ||
456 | { | ||
457 | // Filter object and system chat (names are filtered elsewhere to save ourselves an gObjectList lookup) | ||
458 | gRlvHandler.filterNames(rlvChat.mText); | ||
459 | } | ||
460 | rlvChat.mRlvNamesFiltered = TRUE; | ||
461 | } | ||
462 | } | ||
463 | // [/RLVa:KB] | ||
464 | |||
371 | #if LL_LCD_COMPILE | 465 | #if LL_LCD_COMPILE |
372 | // add into LCD displays | 466 | // add into LCD displays |
373 | if (!invisible_script_debug_chat) | 467 | if (!invisible_script_debug_chat) |
@@ -463,6 +557,9 @@ LLColor4 get_text_color(const LLChat& chat) | |||
463 | text_color = gSavedSettings.getColor4("ObjectChatColor"); | 557 | text_color = gSavedSettings.getColor4("ObjectChatColor"); |
464 | } | 558 | } |
465 | break; | 559 | break; |
560 | case CHAT_SOURCE_OBJECT_IM: | ||
561 | text_color = gSavedSettings.getColor4("ObjectIMColor"); | ||
562 | break; | ||
466 | default: | 563 | default: |
467 | text_color.setToWhite(); | 564 | text_color.setToWhite(); |
468 | } | 565 | } |
@@ -528,7 +625,11 @@ void LLFloaterChat::onClickToggleActiveSpeakers(void* userdata) | |||
528 | { | 625 | { |
529 | LLFloaterChat* self = (LLFloaterChat*)userdata; | 626 | LLFloaterChat* self = (LLFloaterChat*)userdata; |
530 | 627 | ||
531 | self->childSetVisible("active_speakers_panel", !self->childIsVisible("active_speakers_panel")); | 628 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) |
629 | self->childSetVisible("active_speakers_panel", | ||
630 | (!self->childIsVisible("active_speakers_panel")) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ); | ||
631 | // [/RLVa:KB] | ||
632 | //self->childSetVisible("active_speakers_panel", !self->childIsVisible("active_speakers_panel")); | ||
532 | } | 633 | } |
533 | 634 | ||
534 | //static | 635 | //static |
diff --git a/linden/indra/newview/llfloaterchat.h b/linden/indra/newview/llfloaterchat.h index b539386..e2bb54c 100644 --- a/linden/indra/newview/llfloaterchat.h +++ b/linden/indra/newview/llfloaterchat.h | |||
@@ -83,6 +83,8 @@ public: | |||
83 | static void* createSpeakersPanel(void* data); | 83 | static void* createSpeakersPanel(void* data); |
84 | static void* createChatPanel(void* data); | 84 | static void* createChatPanel(void* data); |
85 | 85 | ||
86 | static void toggleHistoryChannelControl(); | ||
87 | |||
86 | // visibility policy for LLUISingleton | 88 | // visibility policy for LLUISingleton |
87 | static bool visible(LLFloater* instance, const LLSD& key); | 89 | static bool visible(LLFloater* instance, const LLSD& key); |
88 | static void show(LLFloater* instance, const LLSD& key); | 90 | static void show(LLFloater* instance, const LLSD& key); |
diff --git a/linden/indra/newview/llfloaterchatterbox.cpp b/linden/indra/newview/llfloaterchatterbox.cpp index fc39bce..1ef75d1 100644 --- a/linden/indra/newview/llfloaterchatterbox.cpp +++ b/linden/indra/newview/llfloaterchatterbox.cpp | |||
@@ -98,7 +98,16 @@ LLFloaterChatterBox::LLFloaterChatterBox(const LLSD& seed) : | |||
98 | { | 98 | { |
99 | mAutoResize = FALSE; | 99 | mAutoResize = FALSE; |
100 | 100 | ||
101 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_chatterbox.xml", NULL, FALSE); | 101 | // check if vertical tabs is selected |
102 | if (gSavedSettings.getBOOL("VerticalIMTabs")) | ||
103 | { | ||
104 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_chatterbox_vertical.xml", NULL, FALSE); | ||
105 | } | ||
106 | else | ||
107 | { | ||
108 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_chatterbox.xml", NULL, FALSE); | ||
109 | } | ||
110 | |||
102 | if (gSavedSettings.getBOOL("ContactsTornOff")) | 111 | if (gSavedSettings.getBOOL("ContactsTornOff")) |
103 | { | 112 | { |
104 | LLFloaterMyFriends* floater_contacts = LLFloaterMyFriends::getInstance(0); | 113 | LLFloaterMyFriends* floater_contacts = LLFloaterMyFriends::getInstance(0); |
diff --git a/linden/indra/newview/llfloaterchatterbox.h b/linden/indra/newview/llfloaterchatterbox.h index ff2f243..552ef81 100644 --- a/linden/indra/newview/llfloaterchatterbox.h +++ b/linden/indra/newview/llfloaterchatterbox.h | |||
@@ -150,7 +150,14 @@ public: | |||
150 | { | 150 | { |
151 | if (visible(instance, key)) | 151 | if (visible(instance, key)) |
152 | { | 152 | { |
153 | LLFloaterChatterBox::hideInstance(); | 153 | if(instance->getHost()) |
154 | { | ||
155 | LLFloaterChatterBox::hideInstance(); | ||
156 | } | ||
157 | else | ||
158 | { | ||
159 | VisibilityPolicy<LLFloater>::hide(instance, key); | ||
160 | } | ||
154 | } | 161 | } |
155 | } | 162 | } |
156 | 163 | ||
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp index b5dd018..bfca034 100644 --- a/linden/indra/newview/llfloatercustomize.cpp +++ b/linden/indra/newview/llfloatercustomize.cpp | |||
@@ -220,6 +220,8 @@ public: | |||
220 | 220 | ||
221 | childSetAction("Save", onSave, this ); | 221 | childSetAction("Save", onSave, this ); |
222 | childSetAction("Cancel", onCancel, this ); | 222 | childSetAction("Cancel", onCancel, this ); |
223 | childSetAction("Check All", onCheckAll, this ); | ||
224 | childSetAction("Uncheck All", onUncheckAll, this ); | ||
223 | } | 225 | } |
224 | 226 | ||
225 | BOOL getRenameClothing() | 227 | BOOL getRenameClothing() |
@@ -300,6 +302,26 @@ public: | |||
300 | LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata; | 302 | LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata; |
301 | self->close(); // destroys this object | 303 | self->close(); // destroys this object |
302 | } | 304 | } |
305 | |||
306 | static void onCheckAll( void* userdata ) | ||
307 | { | ||
308 | LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata; | ||
309 | for( S32 i = 0; i < (S32)(self->mCheckBoxList.size()); i++) | ||
310 | { | ||
311 | std::string name = self->mCheckBoxList[i].first; | ||
312 | if(self->childIsEnabled(name))self->childSetValue(name,TRUE); | ||
313 | } | ||
314 | } | ||
315 | |||
316 | static void onUncheckAll( void* userdata ) | ||
317 | { | ||
318 | LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata; | ||
319 | for( S32 i = 0; i < (S32)(self->mCheckBoxList.size()); i++) | ||
320 | { | ||
321 | std::string name = self->mCheckBoxList[i].first; | ||
322 | if(self->childIsEnabled(name))self->childSetValue(name,FALSE); | ||
323 | } | ||
324 | } | ||
303 | }; | 325 | }; |
304 | 326 | ||
305 | ///////////////////////////////////////////////////////////////////// | 327 | ///////////////////////////////////////////////////////////////////// |
@@ -492,10 +514,26 @@ void LLPanelEditWearable::setSubpart( ESubpart subpart ) | |||
492 | item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem(mType); | 514 | item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem(mType); |
493 | U32 perm_mask = 0x0; | 515 | U32 perm_mask = 0x0; |
494 | BOOL is_complete = FALSE; | 516 | BOOL is_complete = FALSE; |
517 | bool can_export = false; | ||
518 | bool can_import = false; | ||
495 | if(item) | 519 | if(item) |
496 | { | 520 | { |
497 | perm_mask = item->getPermissions().getMaskOwner(); | 521 | perm_mask = item->getPermissions().getMaskOwner(); |
498 | is_complete = item->isComplete(); | 522 | is_complete = item->isComplete(); |
523 | |||
524 | if (subpart <= 18) // body parts only | ||
525 | { | ||
526 | can_import = true; | ||
527 | |||
528 | if (is_complete && | ||
529 | gAgent.getID() == item->getPermissions().getOwner() && | ||
530 | gAgent.getID() == item->getPermissions().getCreator() && | ||
531 | (PERM_ITEM_UNRESTRICTED & | ||
532 | perm_mask) == PERM_ITEM_UNRESTRICTED) | ||
533 | { | ||
534 | can_export = true; | ||
535 | } | ||
536 | } | ||
499 | } | 537 | } |
500 | setUIPermissions(perm_mask, is_complete); | 538 | setUIPermissions(perm_mask, is_complete); |
501 | BOOL editable = ((perm_mask & PERM_MODIFY) && is_complete) ? TRUE : FALSE; | 539 | BOOL editable = ((perm_mask & PERM_MODIFY) && is_complete) ? TRUE : FALSE; |
@@ -519,7 +557,8 @@ void LLPanelEditWearable::setSubpart( ESubpart subpart ) | |||
519 | } | 557 | } |
520 | gFloaterCustomize->generateVisualParamHints(NULL, sorted_params); | 558 | gFloaterCustomize->generateVisualParamHints(NULL, sorted_params); |
521 | gFloaterCustomize->updateScrollingPanelUI(); | 559 | gFloaterCustomize->updateScrollingPanelUI(); |
522 | 560 | gFloaterCustomize->childSetEnabled("Export", can_export); | |
561 | gFloaterCustomize->childSetEnabled("Import", can_import); | ||
523 | 562 | ||
524 | // Update the camera | 563 | // Update the camera |
525 | gMorphView->setCameraTargetJoint( gAgent.getAvatarObject()->getJoint( part->mTargetJoint ) ); | 564 | gMorphView->setCameraTargetJoint( gAgent.getAvatarObject()->getJoint( part->mTargetJoint ) ); |
@@ -1188,6 +1227,17 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata) | |||
1188 | F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() ); | 1227 | F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() ); |
1189 | if (current_weight != new_weight ) | 1228 | if (current_weight != new_weight ) |
1190 | { | 1229 | { |
1230 | LLFloaterCustomize* floater_customize = gFloaterCustomize; | ||
1231 | if (!floater_customize) return; | ||
1232 | |||
1233 | //avatar height stuff -Patrick Sapinski (Wednesday, August 19, 2009) | ||
1234 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | ||
1235 | F32 avatar_size = (avatar->mBodySize.mV[VZ]) + (F32)0.17; //mBodySize is actually quite a bit off. | ||
1236 | |||
1237 | floater_customize->getChild<LLTextBox>("HeightText")->setValue(llformat("%.2f", avatar_size) + "m"); | ||
1238 | floater_customize->getChild<LLTextBox>("HeightText2")->setValue(llformat("%.2f",llround(avatar_size / 0.3048)) + "'" | ||
1239 | + llformat("%.2f",llround(avatar_size * 39.37) % 12) + "\""); | ||
1240 | |||
1191 | gAgent.getAvatarObject()->setVisualParamWeight( param, new_weight, FALSE); | 1241 | gAgent.getAvatarObject()->setVisualParamWeight( param, new_weight, FALSE); |
1192 | gAgent.getAvatarObject()->updateVisualParams(); | 1242 | gAgent.getAvatarObject()->updateVisualParams(); |
1193 | } | 1243 | } |
@@ -1429,6 +1479,10 @@ BOOL LLFloaterCustomize::postBuild() | |||
1429 | childSetAction("Ok", LLFloaterCustomize::onBtnOk, (void*)this); | 1479 | childSetAction("Ok", LLFloaterCustomize::onBtnOk, (void*)this); |
1430 | childSetAction("Cancel", LLFloater::onClickClose, (void*)this); | 1480 | childSetAction("Cancel", LLFloater::onClickClose, (void*)this); |
1431 | 1481 | ||
1482 | // reX | ||
1483 | childSetAction("Import", LLFloaterCustomize::onBtnImport, (void*)this); | ||
1484 | childSetAction("Export", LLFloaterCustomize::onBtnExport, (void*)this); | ||
1485 | |||
1432 | // Wearable panels | 1486 | // Wearable panels |
1433 | initWearablePanels(); | 1487 | initWearablePanels(); |
1434 | 1488 | ||
@@ -1494,6 +1548,157 @@ void LLFloaterCustomize::setCurrentWearableType( EWearableType type ) | |||
1494 | } | 1548 | } |
1495 | } | 1549 | } |
1496 | 1550 | ||
1551 | |||
1552 | // reX: new function | ||
1553 | void LLFloaterCustomize::onBtnImport( void* userdata ) | ||
1554 | { | ||
1555 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
1556 | if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_XML ) ) | ||
1557 | { | ||
1558 | // User canceled import. | ||
1559 | return; | ||
1560 | } | ||
1561 | |||
1562 | const std::string filename = file_picker.getFirstFile(); | ||
1563 | |||
1564 | FILE* fp = LLFile::fopen(filename, "rb"); | ||
1565 | |||
1566 | //char text_buffer[2048]; /* Flawfinder: ignore */ | ||
1567 | S32 c; | ||
1568 | S32 typ; | ||
1569 | S32 count; | ||
1570 | S32 param_id=0; | ||
1571 | F32 param_weight=0; | ||
1572 | S32 fields_read; | ||
1573 | |||
1574 | for( S32 i=0; i < WT_COUNT; i++ ) | ||
1575 | { | ||
1576 | fields_read = fscanf( fp, "type %d\n", &typ); | ||
1577 | if( fields_read != 1 ) | ||
1578 | { | ||
1579 | llwarns << "Bad asset type: early end of file" << llendl; | ||
1580 | return; | ||
1581 | } | ||
1582 | |||
1583 | fields_read = fscanf( fp, "parameters %d\n", &count); | ||
1584 | if( fields_read != 1 ) | ||
1585 | { | ||
1586 | llwarns << "Bad parameters : early end of file" << llendl; | ||
1587 | return; | ||
1588 | } | ||
1589 | for(c=0;c<count;c++) | ||
1590 | { | ||
1591 | fields_read = fscanf( fp, "%d %f\n", ¶m_id, ¶m_weight ); | ||
1592 | if( fields_read != 2 ) | ||
1593 | { | ||
1594 | llwarns << "Bad parameters list: early end of file" << llendl; | ||
1595 | return; | ||
1596 | } | ||
1597 | gAgent.getAvatarObject()->setVisualParamWeight( param_id, param_weight, TRUE); | ||
1598 | gAgent.getAvatarObject()->updateVisualParams(); | ||
1599 | } | ||
1600 | } | ||
1601 | |||
1602 | |||
1603 | |||
1604 | //for( S32 i=0; i < WT_COUNT; i++ ) | ||
1605 | //{ | ||
1606 | // fields_read = fscanf( fp, "type %d\n", &typ); | ||
1607 | // if( fields_read != 1 ) | ||
1608 | // { | ||
1609 | // llwarns << "Bad asset type: early end of file" << llendl; | ||
1610 | // return; | ||
1611 | // } | ||
1612 | // fields_read = fscanf( fp, "textures %d\n", &count); | ||
1613 | // if( fields_read != 1 ) | ||
1614 | // { | ||
1615 | // llwarns << "Bad textures: early end of file" << llendl; | ||
1616 | // return; | ||
1617 | // } | ||
1618 | // | ||
1619 | // for(c=0;c<count;c++) | ||
1620 | // { | ||
1621 | // fields_read = fscanf( fp, "%d %2047s\n",text_buffer); | ||
1622 | // if( fields_read != 2 ) | ||
1623 | // { | ||
1624 | // llwarns << "Bad textures list: early end of file" << llendl; | ||
1625 | // return; | ||
1626 | // } | ||
1627 | // } | ||
1628 | |||
1629 | |||
1630 | fclose(fp); | ||
1631 | return; | ||
1632 | } | ||
1633 | |||
1634 | // reX: new function | ||
1635 | void LLFloaterCustomize::onBtnExport( void* userdata ) | ||
1636 | { | ||
1637 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
1638 | if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_XML ) ) | ||
1639 | { | ||
1640 | // User canceled export. | ||
1641 | return; | ||
1642 | } | ||
1643 | |||
1644 | LLViewerInventoryItem* item; | ||
1645 | BOOL is_modifiable; | ||
1646 | |||
1647 | const std::string filename = file_picker.getFirstFile(); | ||
1648 | |||
1649 | FILE* fp = LLFile::fopen(filename, "wb"); | ||
1650 | |||
1651 | for( S32 i=0; i < WT_COUNT; i++ ) | ||
1652 | { | ||
1653 | is_modifiable = FALSE; | ||
1654 | LLWearable* old_wearable = gAgent.getWearable((EWearableType)i); | ||
1655 | if( old_wearable ) | ||
1656 | { | ||
1657 | item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem((EWearableType)i); | ||
1658 | if(item) | ||
1659 | { | ||
1660 | const LLPermissions& perm = item->getPermissions(); | ||
1661 | is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID()); | ||
1662 | } | ||
1663 | } | ||
1664 | if (is_modifiable) | ||
1665 | { | ||
1666 | old_wearable->FileExportParams(fp); | ||
1667 | } | ||
1668 | if (!is_modifiable) | ||
1669 | { | ||
1670 | fprintf( fp, "type %d\n",i); | ||
1671 | fprintf( fp, "parameters 0\n"); | ||
1672 | } | ||
1673 | } | ||
1674 | |||
1675 | for( S32 i=0; i < WT_COUNT; i++ ) | ||
1676 | { | ||
1677 | is_modifiable = FALSE; | ||
1678 | LLWearable* old_wearable = gAgent.getWearable((EWearableType)i); | ||
1679 | if( old_wearable ) | ||
1680 | { | ||
1681 | item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem((EWearableType)i); | ||
1682 | if(item) | ||
1683 | { | ||
1684 | const LLPermissions& perm = item->getPermissions(); | ||
1685 | is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID()); | ||
1686 | } | ||
1687 | } | ||
1688 | if (is_modifiable) | ||
1689 | { | ||
1690 | old_wearable->FileExportTextures(fp); | ||
1691 | } | ||
1692 | if (!is_modifiable) | ||
1693 | { | ||
1694 | fprintf( fp, "type %d\n",i); | ||
1695 | fprintf( fp, "textures 0\n"); | ||
1696 | } | ||
1697 | } | ||
1698 | |||
1699 | fclose(fp); | ||
1700 | } | ||
1701 | |||
1497 | // static | 1702 | // static |
1498 | void LLFloaterCustomize::onBtnOk( void* userdata ) | 1703 | void LLFloaterCustomize::onBtnOk( void* userdata ) |
1499 | { | 1704 | { |
@@ -1957,6 +2162,21 @@ void LLFloaterCustomize::draw() | |||
1957 | // arrives. Figure out some way to avoid this if possible. | 2162 | // arrives. Figure out some way to avoid this if possible. |
1958 | updateInventoryUI(); | 2163 | updateInventoryUI(); |
1959 | 2164 | ||
2165 | LLFloaterCustomize* floater_customize = gFloaterCustomize; | ||
2166 | if (!floater_customize) return; | ||
2167 | |||
2168 | //KOWs avatar height stuff | ||
2169 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | ||
2170 | F32 avatar_size = (avatar->mBodySize.mV[VZ]) + (F32)0.17; //mBodySize is actually quite a bit off. | ||
2171 | |||
2172 | floater_customize->getChild<LLTextBox>("HeightText")->setValue(llformat("%.2f", avatar_size) + "m"); | ||
2173 | //inches = avatar_size * 39.37 | ||
2174 | //round(inches) + inches % 12 | ||
2175 | std::string temp = llformat("%.0f",(F32)llfloor(avatar_size / 0.3048)); | ||
2176 | std::string temp2 = llformat("%.0f",(F32)(llround(avatar_size * 39.37) % 12)); | ||
2177 | floater_customize->getChild<LLTextBox>("HeightText2")->setValue(temp + "'" | ||
2178 | + temp2 + "\""); | ||
2179 | |||
1960 | LLScrollingPanelParam::sUpdateDelayFrames = 0; | 2180 | LLScrollingPanelParam::sUpdateDelayFrames = 0; |
1961 | 2181 | ||
1962 | LLFloater::draw(); | 2182 | LLFloater::draw(); |
diff --git a/linden/indra/newview/llfloatercustomize.h b/linden/indra/newview/llfloatercustomize.h index 28a525e..d0e558f 100644 --- a/linden/indra/newview/llfloatercustomize.h +++ b/linden/indra/newview/llfloatercustomize.h | |||
@@ -107,6 +107,10 @@ public: | |||
107 | 107 | ||
108 | // Callbacks | 108 | // Callbacks |
109 | static void onBtnOk( void* userdata ); | 109 | static void onBtnOk( void* userdata ); |
110 | // reX: new function (thx dudes) | ||
111 | static void onBtnImport( void* userdata ); | ||
112 | // reX: new function | ||
113 | static void onBtnExport( void* userdata ); | ||
110 | static void onBtnMakeOutfit( void* userdata ); | 114 | static void onBtnMakeOutfit( void* userdata ); |
111 | static void onMakeOutfitCommit( LLMakeOutfitDialog* dialog, void* userdata ); | 115 | static void onMakeOutfitCommit( LLMakeOutfitDialog* dialog, void* userdata ); |
112 | 116 | ||
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp index 478d39e..874249b 100644 --- a/linden/indra/newview/llfloatergroups.cpp +++ b/linden/indra/newview/llfloatergroups.cpp | |||
@@ -62,7 +62,7 @@ | |||
62 | std::map<const LLUUID, LLFloaterGroupPicker*> LLFloaterGroupPicker::sInstances; | 62 | std::map<const LLUUID, LLFloaterGroupPicker*> LLFloaterGroupPicker::sInstances; |
63 | 63 | ||
64 | // helper functions | 64 | // helper functions |
65 | void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask = GP_ALL_POWERS); | 65 | void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask = GP_ALL_POWERS); |
66 | 66 | ||
67 | ///---------------------------------------------------------------------------- | 67 | ///---------------------------------------------------------------------------- |
68 | /// Class LLFloaterGroupPicker | 68 | /// Class LLFloaterGroupPicker |
@@ -117,7 +117,8 @@ void LLFloaterGroupPicker::setPowersMask(U64 powers_mask) | |||
117 | 117 | ||
118 | BOOL LLFloaterGroupPicker::postBuild() | 118 | BOOL LLFloaterGroupPicker::postBuild() |
119 | { | 119 | { |
120 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), mPowersMask); | 120 | const std::string none_text = getString("none"); |
121 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text, mPowersMask); | ||
121 | 122 | ||
122 | childSetAction("OK", onBtnOK, this); | 123 | childSetAction("OK", onBtnOK, this); |
123 | 124 | ||
@@ -201,7 +202,8 @@ void LLPanelGroups::reset() | |||
201 | childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); | 202 | childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); |
202 | childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); | 203 | childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); |
203 | 204 | ||
204 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID()); | 205 | const std::string none_text = getString("none"); |
206 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text); | ||
205 | enableButtons(); | 207 | enableButtons(); |
206 | } | 208 | } |
207 | 209 | ||
@@ -212,7 +214,8 @@ BOOL LLPanelGroups::postBuild() | |||
212 | childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); | 214 | childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); |
213 | childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); | 215 | childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); |
214 | 216 | ||
215 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID()); | 217 | const std::string none_text = getString("none"); |
218 | init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text); | ||
216 | 219 | ||
217 | childSetAction("Activate", onBtnActivate, this); | 220 | childSetAction("Activate", onBtnActivate, this); |
218 | 221 | ||
@@ -460,7 +463,7 @@ void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata) | |||
460 | if(self) self->enableButtons(); | 463 | if(self) self->enableButtons(); |
461 | } | 464 | } |
462 | 465 | ||
463 | void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask) | 466 | void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask) |
464 | { | 467 | { |
465 | S32 count = gAgent.mGroups.count(); | 468 | S32 count = gAgent.mGroups.count(); |
466 | LLUUID id; | 469 | LLUUID id; |
@@ -502,7 +505,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow | |||
502 | LLSD element; | 505 | LLSD element; |
503 | element["id"] = LLUUID::null; | 506 | element["id"] = LLUUID::null; |
504 | element["columns"][0]["column"] = "name"; | 507 | element["columns"][0]["column"] = "name"; |
505 | element["columns"][0]["value"] = "none"; // *TODO: Translate | 508 | element["columns"][0]["value"] = none_text; |
506 | element["columns"][0]["font"] = "SANSSERIF"; | 509 | element["columns"][0]["font"] = "SANSSERIF"; |
507 | element["columns"][0]["font-style"] = style; | 510 | element["columns"][0]["font-style"] = style; |
508 | 511 | ||
diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp index 145ad80..4822bb0 100644 --- a/linden/indra/newview/llfloaterinspect.cpp +++ b/linden/indra/newview/llfloaterinspect.cpp | |||
@@ -43,6 +43,10 @@ | |||
43 | #include "llviewerobject.h" | 43 | #include "llviewerobject.h" |
44 | #include "lluictrlfactory.h" | 44 | #include "lluictrlfactory.h" |
45 | 45 | ||
46 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
47 | #include "rlvhandler.h" | ||
48 | // [/RLVa:KB] | ||
49 | |||
46 | LLFloaterInspect* LLFloaterInspect::sInstance = NULL; | 50 | LLFloaterInspect* LLFloaterInspect::sInstance = NULL; |
47 | 51 | ||
48 | LLFloaterInspect::LLFloaterInspect(void) : | 52 | LLFloaterInspect::LLFloaterInspect(void) : |
@@ -146,7 +150,13 @@ void LLFloaterInspect::onClickOwnerProfile(void* ctrl) | |||
146 | if(node) | 150 | if(node) |
147 | { | 151 | { |
148 | const LLUUID& owner_id = node->mPermissions->getOwner(); | 152 | const LLUUID& owner_id = node->mPermissions->getOwner(); |
149 | LLFloaterAvatarInfo::showFromDirectory(owner_id); | 153 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) |
154 | if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
155 | { | ||
156 | LLFloaterAvatarInfo::showFromDirectory(owner_id); | ||
157 | } | ||
158 | // [/RLVa:KB] | ||
159 | // LLFloaterAvatarInfo::showFromDirectory(owner_id); | ||
150 | } | 160 | } |
151 | } | 161 | } |
152 | } | 162 | } |
@@ -164,7 +174,10 @@ void LLFloaterInspect::onSelectObject(LLUICtrl* ctrl, void* user_data) | |||
164 | { | 174 | { |
165 | if(LLFloaterInspect::getSelectedUUID() != LLUUID::null) | 175 | if(LLFloaterInspect::getSelectedUUID() != LLUUID::null) |
166 | { | 176 | { |
167 | sInstance->childSetEnabled("button owner", true); | 177 | //sInstance->childSetEnabled("button owner", true); |
178 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e | ||
179 | sInstance->childSetEnabled("button owner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
180 | // [/RLVa:KB] | ||
168 | sInstance->childSetEnabled("button creator", true); | 181 | sInstance->childSetEnabled("button creator", true); |
169 | } | 182 | } |
170 | } | 183 | } |
@@ -224,6 +237,13 @@ void LLFloaterInspect::refresh() | |||
224 | LLStringUtil::copy(time, ctime(×tamp), MAX_STRING); | 237 | LLStringUtil::copy(time, ctime(×tamp), MAX_STRING); |
225 | time[24] = '\0'; | 238 | time[24] = '\0'; |
226 | gCacheName->getFullName(obj->mPermissions->getOwner(), owner_name); | 239 | gCacheName->getFullName(obj->mPermissions->getOwner(), owner_name); |
240 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
241 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
242 | { | ||
243 | // TODO-RLVa: shouldn't filter if this is a group-owned prim (will show "(nobody)") | ||
244 | owner_name = gRlvHandler.getAnonym(owner_name); | ||
245 | } | ||
246 | // [/RLVa:KB] | ||
227 | gCacheName->getFullName(obj->mPermissions->getCreator(), creator_name); | 247 | gCacheName->getFullName(obj->mPermissions->getCreator(), creator_name); |
228 | row["id"] = obj->getObject()->getID(); | 248 | row["id"] = obj->getObject()->getID(); |
229 | row["columns"][0]["column"] = "object_name"; | 249 | row["columns"][0]["column"] = "object_name"; |
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp index 94a8345..08c04ab 100644 --- a/linden/indra/newview/llfloaterland.cpp +++ b/linden/indra/newview/llfloaterland.cpp | |||
@@ -820,6 +820,12 @@ void LLPanelLandGeneral::setGroup(const LLUUID& group_id) | |||
820 | // static | 820 | // static |
821 | void LLPanelLandGeneral::onClickBuyLand(void* data) | 821 | void LLPanelLandGeneral::onClickBuyLand(void* data) |
822 | { | 822 | { |
823 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
824 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
825 | { | ||
826 | return; | ||
827 | } | ||
828 | // [/RLVa:KB] | ||
823 | BOOL* for_group = (BOOL*)data; | 829 | BOOL* for_group = (BOOL*)data; |
824 | LLViewerParcelMgr::getInstance()->startBuyLand(*for_group); | 830 | LLViewerParcelMgr::getInstance()->startBuyLand(*for_group); |
825 | } | 831 | } |
@@ -2878,3 +2884,41 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name) | |||
2878 | if (editor) editor->setText(name); | 2884 | if (editor) editor->setText(name); |
2879 | } | 2885 | } |
2880 | } | 2886 | } |
2887 | |||
2888 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
2889 | void LLFloaterLand::open() | ||
2890 | { | ||
2891 | // We'll allow "About Land" as long as you have the ability to return prims (through ownership or through group powers) | ||
2892 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
2893 | { | ||
2894 | LLParcelSelection* pParcelSel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); | ||
2895 | if ( (!pParcelSel) || (pParcelSel->hasOthersSelected()) ) | ||
2896 | return; | ||
2897 | LLParcel* pParcel = pParcelSel->getParcel(); | ||
2898 | if (!pParcel) | ||
2899 | return; | ||
2900 | |||
2901 | // Ideally we could just use LLViewerParcelMgr::isParcelOwnedByAgent(), but that has that sneaky exemption | ||
2902 | // for fake god like (aka View Admin Options) | ||
2903 | const LLUUID& idOwner = pParcel->getOwnerID(); | ||
2904 | if ( (idOwner != gAgent.getID()) ) | ||
2905 | { | ||
2906 | // *sighs* LLAgent::hasPowerInGroup() has it too so copy/paste from there | ||
2907 | S32 count = gAgent.mGroups.count(); bool fShow = false; | ||
2908 | for (S32 i = 0; i < count; ++i) | ||
2909 | { | ||
2910 | if (gAgent.mGroups.get(i).mID == idOwner) | ||
2911 | { | ||
2912 | fShow |= ((gAgent.mGroups.get(i).mPowers & GP_LAND_RETURN) > 0); | ||
2913 | break; | ||
2914 | } | ||
2915 | } | ||
2916 | |||
2917 | if (!fShow) | ||
2918 | return; | ||
2919 | } | ||
2920 | } | ||
2921 | |||
2922 | LLFloater::open(); | ||
2923 | } | ||
2924 | // [/RLVa:KB] | ||
diff --git a/linden/indra/newview/llfloaterland.h b/linden/indra/newview/llfloaterland.h index 4c3de65..113b679 100644 --- a/linden/indra/newview/llfloaterland.h +++ b/linden/indra/newview/llfloaterland.h | |||
@@ -85,6 +85,10 @@ public: | |||
85 | virtual void onOpen(); | 85 | virtual void onOpen(); |
86 | virtual BOOL postBuild(); | 86 | virtual BOOL postBuild(); |
87 | 87 | ||
88 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
89 | virtual void open(); | ||
90 | // [/RLVa:KB] | ||
91 | |||
88 | protected: | 92 | protected: |
89 | 93 | ||
90 | // Does its own instance management, so clients not allowed | 94 | // Does its own instance management, so clients not allowed |
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index 3b1e4c7..85057ee 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp | |||
@@ -43,14 +43,45 @@ | |||
43 | #include "llresizebar.h" | 43 | #include "llresizebar.h" |
44 | #include "lluictrlfactory.h" | 44 | #include "lluictrlfactory.h" |
45 | 45 | ||
46 | // radar | ||
47 | #include "llchat.h" | ||
48 | #include "llfirstuse.h" | ||
49 | #include "llfloateravatarinfo.h" | ||
50 | #include "llfloaterchat.h" | ||
51 | #include "llfloaterfriends.h" | ||
52 | #include "llfloatergroupinvite.h" | ||
53 | #include "llfloatergroups.h" | ||
54 | #include "llfloaterreporter.h" | ||
55 | #include "llimview.h" | ||
56 | #include "llmutelist.h" | ||
57 | #include "llparcel.h" | ||
58 | #include "llregionposition.h" | ||
59 | #include "roles_constants.h" | ||
60 | #include "llscrolllistctrl.h" | ||
61 | #include "lltracker.h" | ||
62 | #include "llviewerobjectlist.h" | ||
63 | #include "llviewermenu.h" | ||
64 | #include "llviewermessage.h" | ||
65 | #include "llviewerparcelmgr.h" | ||
66 | #include "llviewerregion.h" | ||
67 | #include "llviewerwindow.h" | ||
68 | #include "llvoavatar.h" | ||
69 | #include "llworld.h" | ||
70 | |||
46 | LLFloaterMap::LLFloaterMap(const LLSD& key) | 71 | LLFloaterMap::LLFloaterMap(const LLSD& key) |
47 | : | 72 | : |
48 | LLFloater(std::string("minimap")), | 73 | LLFloater(std::string("minimap")), |
49 | mPanelMap(NULL) | 74 | mPanelMap(NULL), |
75 | mUpdate(TRUE), | ||
76 | mSelectedAvatar(LLUUID::null) | ||
77 | |||
50 | { | 78 | { |
51 | LLCallbackMap::map_t factory_map; | 79 | LLCallbackMap::map_t factory_map; |
52 | factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this); | 80 | factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this); |
53 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); | 81 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); |
82 | |||
83 | mChatAvatars.clear(); | ||
84 | mTypingAvatars.clear(); | ||
54 | } | 85 | } |
55 | 86 | ||
56 | 87 | ||
@@ -66,8 +97,33 @@ BOOL LLFloaterMap::postBuild() | |||
66 | { | 97 | { |
67 | // Send the drag handle to the back, but make sure close stays on top | 98 | // Send the drag handle to the back, but make sure close stays on top |
68 | sendChildToBack(getDragHandle()); | 99 | sendChildToBack(getDragHandle()); |
100 | sendChildToFront(getChild<LLButton>("llfloater_minimize_btn")); | ||
69 | sendChildToFront(getChild<LLButton>("llfloater_close_btn")); | 101 | sendChildToFront(getChild<LLButton>("llfloater_close_btn")); |
70 | setIsChrome(TRUE); | 102 | setIsChrome(TRUE); |
103 | |||
104 | mRadarList = getChild<LLScrollListCtrl>("RadarList"); | ||
105 | childSetCommitCallback("RadarList", onList, this); | ||
106 | mRadarList->setDoubleClickCallback(onClickIM); | ||
107 | |||
108 | childSetFocusChangedCallback("near_me_range", onRangeChange, this); | ||
109 | |||
110 | childSetAction("im_btn", onClickIM, this); | ||
111 | childSetAction("profile_btn", onClickProfile, this); | ||
112 | childSetAction("offer_teleport_btn", onClickOfferTeleport, this); | ||
113 | childSetAction("track_btn", onClickTrack, this); | ||
114 | childSetAction("invite_btn", onClickInvite, this); | ||
115 | childSetAction("add_btn", onClickAddFriend, this); | ||
116 | childSetAction("freeze_btn", onClickFreeze, this); | ||
117 | childSetAction("eject_btn", onClickEject, this); | ||
118 | childSetAction("mute_btn", onClickMute, this); | ||
119 | childSetAction("unmute_btn", onClickUnmute, this); | ||
120 | childSetAction("ar_btn", onClickAR, this); | ||
121 | childSetAction("estate_eject_btn", onClickEjectFromEstate, this); | ||
122 | |||
123 | setDefaultBtn("im_btn"); | ||
124 | |||
125 | populateRadar(); | ||
126 | |||
71 | return TRUE; | 127 | return TRUE; |
72 | } | 128 | } |
73 | 129 | ||
@@ -123,3 +179,839 @@ void LLFloaterMap::draw() | |||
123 | } | 179 | } |
124 | } | 180 | } |
125 | 181 | ||
182 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c) | ||
183 | void LLFloaterMap::open() | ||
184 | { | ||
185 | if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP)) | ||
186 | { | ||
187 | LLFloater::open(); | ||
188 | LLFirstUse::useMiniMap(); | ||
189 | } | ||
190 | } | ||
191 | // [/RLVa:KB] | ||
192 | |||
193 | // TODO: make this detachable | ||
194 | // TODO: make this expand/collapse | ||
195 | |||
196 | /* | ||
197 | * Imprudence Radar | ||
198 | * @brief inworld radar integrated with the minimap | ||
199 | * by McCabe Maxsted | ||
200 | * Estate tab portion by Dale Glass | ||
201 | */ | ||
202 | |||
203 | //static | ||
204 | bool LLFloaterMap::isImpDev(LLUUID agent_id) | ||
205 | { | ||
206 | // We use strings here as avatar keys change across grids. | ||
207 | // Feel free to add/remove yourself. | ||
208 | std::string agent_name = getSelectedName(agent_id); | ||
209 | if (agent_name == "McCabe Maxsted" || | ||
210 | agent_name == "Jacek Antonelli" || | ||
211 | agent_name == "Armin Weatherwax") | ||
212 | { | ||
213 | return true; | ||
214 | } | ||
215 | return false; | ||
216 | } | ||
217 | |||
218 | //static | ||
219 | void LLFloaterMap::updateRadar() | ||
220 | { | ||
221 | LLFloaterMap::getInstance()->populateRadar(); | ||
222 | } | ||
223 | |||
224 | void LLFloaterMap::populateRadar() | ||
225 | { | ||
226 | if (!mUpdate || !LLFloaterMap::getInstance()->getVisible()) | ||
227 | { | ||
228 | return; | ||
229 | } | ||
230 | |||
231 | if (visibleItemsSelected()) | ||
232 | { | ||
233 | mSelectedAvatar = mRadarList->getFirstSelected()->getUUID(); | ||
234 | } | ||
235 | else | ||
236 | { | ||
237 | mSelectedAvatar.setNull(); | ||
238 | } | ||
239 | |||
240 | S32 scroll_pos = mRadarList->getScrollPos(); | ||
241 | |||
242 | // clear count | ||
243 | std::stringstream avatar_count; | ||
244 | avatar_count.str(""); | ||
245 | |||
246 | // find what avatars you can see | ||
247 | F32 range = gSavedSettings.getF32("NearMeRange"); | ||
248 | LLVector3d current_pos = gAgent.getPositionGlobal(); | ||
249 | std::vector<LLUUID> avatar_ids; | ||
250 | std::vector<LLVector3d> positions; | ||
251 | LLWorld::getInstance()->getAvatars(&avatar_ids, &positions); | ||
252 | |||
253 | LLSD element; | ||
254 | |||
255 | mRadarList->deleteAllItems(); | ||
256 | |||
257 | if (!avatar_ids.empty()) | ||
258 | { | ||
259 | for (U32 i=0; i<avatar_ids.size(); i++) | ||
260 | { | ||
261 | if (avatar_ids[i] == gAgent.getID() || | ||
262 | avatar_ids[i].isNull()) | ||
263 | { | ||
264 | continue; | ||
265 | } | ||
266 | |||
267 | // Add to list only if we get their name | ||
268 | std::string fullname = getSelectedName(avatar_ids[i]); | ||
269 | if (!fullname.empty()) | ||
270 | { | ||
271 | bool notify_chat = gSavedSettings.getBOOL("MiniMapNotifyChatRange"); | ||
272 | bool notify_sim = gSavedSettings.getBOOL("MiniMapNotifySimRange"); | ||
273 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
274 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
275 | { | ||
276 | fullname = gRlvHandler.getAnonym(fullname); | ||
277 | notify_chat = false; | ||
278 | notify_sim = false; | ||
279 | } | ||
280 | // [/RLVa:KB] | ||
281 | |||
282 | // check if they're in certain ranges and notify user if we've enabled that | ||
283 | LLVector3d temp = positions[i] - current_pos; | ||
284 | F32 distance = llround((F32)temp.magVec(), 0.1f); | ||
285 | /*char dist[32]; | ||
286 | sprintf(dist, "%.1f", distance); | ||
287 | std::string dist_string = dist;*/ | ||
288 | std::string dist_string = llformat("%.1f", distance); | ||
289 | |||
290 | if (notify_chat) | ||
291 | { | ||
292 | if (distance < 20.0f) | ||
293 | { | ||
294 | if (!isInChatList(avatar_ids[i])) | ||
295 | { | ||
296 | addToChatList(avatar_ids[i], dist_string); | ||
297 | } | ||
298 | } | ||
299 | else | ||
300 | { | ||
301 | if (isInChatList(avatar_ids[i])) | ||
302 | { | ||
303 | removeFromChatList(avatar_ids[i]); | ||
304 | } | ||
305 | } | ||
306 | updateChatList(avatar_ids); | ||
307 | } | ||
308 | else if (!mChatAvatars.empty()) | ||
309 | { | ||
310 | mChatAvatars.clear(); | ||
311 | } | ||
312 | |||
313 | if (notify_sim) | ||
314 | { | ||
315 | if (!isInChatList(avatar_ids[i]) && !getInSimAvList(avatar_ids[i])) | ||
316 | { | ||
317 | LLViewerObject *av_obj = gObjectList.findObject(avatar_ids[i]); | ||
318 | if (av_obj != NULL && av_obj->isAvatar()) | ||
319 | { | ||
320 | LLVOAvatar* avatarp = (LLVOAvatar*)av_obj; | ||
321 | if (avatarp != NULL) | ||
322 | { | ||
323 | if (avatarp->getRegion() == gAgent.getRegion()) | ||
324 | { | ||
325 | addToSimAvList(avatar_ids[i], dist_string); | ||
326 | } | ||
327 | } | ||
328 | } | ||
329 | } | ||
330 | updateSimAvList(avatar_ids); | ||
331 | } | ||
332 | else if (!mSimAvatars.empty()) | ||
333 | { | ||
334 | mSimAvatars.clear(); | ||
335 | } | ||
336 | |||
337 | // only display avatars in range | ||
338 | if (distance <= range) | ||
339 | { | ||
340 | // append typing string | ||
341 | std::string typing = ""; | ||
342 | if (isTyping(avatar_ids[i])) | ||
343 | { | ||
344 | typing = getString("is_typing")+ " "; | ||
345 | } | ||
346 | |||
347 | std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("is_muted") : ""; | ||
348 | element["id"] = avatar_ids[i]; | ||
349 | element["columns"][0]["column"] = "avatar_name"; | ||
350 | element["columns"][0]["type"] = "text"; | ||
351 | element["columns"][0]["value"] = typing + fullname + " " + mute_text; | ||
352 | element["columns"][1]["column"] = "avatar_distance"; | ||
353 | element["columns"][1]["type"] = "text"; | ||
354 | element["columns"][1]["value"] = dist_string+"m"; | ||
355 | |||
356 | mRadarList->addElement(element, ADD_BOTTOM); | ||
357 | } | ||
358 | } | ||
359 | } | ||
360 | |||
361 | mRadarList->sortItems(); | ||
362 | mRadarList->setScrollPos(scroll_pos); | ||
363 | if (mSelectedAvatar.notNull()) | ||
364 | { | ||
365 | mRadarList->selectByID(mSelectedAvatar); | ||
366 | } | ||
367 | avatar_count << (int)avatar_ids.size(); | ||
368 | } | ||
369 | else | ||
370 | { | ||
371 | mTypingAvatars.clear(); | ||
372 | mRadarList->addCommentText(getString("no_one_near"), ADD_TOP); | ||
373 | avatar_count << "0"; | ||
374 | } | ||
375 | |||
376 | childSetText("lblAvatarCount", avatar_count.str()); | ||
377 | |||
378 | toggleButtons(); | ||
379 | |||
380 | //llinfos << "mSelectedAvatar: " << mSelectedAvatar.asString() << llendl; | ||
381 | } | ||
382 | |||
383 | void LLFloaterMap::updateChatList(std::vector<LLUUID> agent_ids) | ||
384 | { | ||
385 | std::set<LLUUID>::iterator it; | ||
386 | std::vector<LLUUID>::iterator result; | ||
387 | for (it = mChatAvatars.begin(); it != mChatAvatars.end(); ) | ||
388 | { | ||
389 | result = find(agent_ids.begin(), agent_ids.end(), *it); | ||
390 | if (result == agent_ids.end()) | ||
391 | { | ||
392 | mChatAvatars.erase(it++); | ||
393 | } | ||
394 | else | ||
395 | { | ||
396 | it++; | ||
397 | } | ||
398 | } | ||
399 | } | ||
400 | |||
401 | bool LLFloaterMap::isInChatList(LLUUID agent_id) | ||
402 | { | ||
403 | if (mChatAvatars.count(agent_id) > 0) | ||
404 | { | ||
405 | return true; | ||
406 | } | ||
407 | return false; | ||
408 | } | ||
409 | |||
410 | void LLFloaterMap::addToChatList(LLUUID agent_id, std::string distance) | ||
411 | { | ||
412 | mChatAvatars.insert(agent_id); | ||
413 | LLChat chat; | ||
414 | |||
415 | LLUIString notify = getString("entering_chat_range"); | ||
416 | notify.setArg("[NAME]", getSelectedName(agent_id)); | ||
417 | notify.setArg("[DISTANCE]", distance); | ||
418 | |||
419 | chat.mText = notify; | ||
420 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
421 | LLFloaterChat::addChat(chat, FALSE, FALSE); | ||
422 | } | ||
423 | |||
424 | void LLFloaterMap::removeFromChatList(LLUUID agent_id) | ||
425 | { | ||
426 | // Do we want to add a notice? | ||
427 | mChatAvatars.erase(agent_id); | ||
428 | } | ||
429 | |||
430 | bool LLFloaterMap::isTyping(LLUUID agent_id) | ||
431 | { | ||
432 | if (mTypingAvatars.count(agent_id) > 0) | ||
433 | { | ||
434 | return true; | ||
435 | } | ||
436 | return false; | ||
437 | } | ||
438 | |||
439 | void LLFloaterMap::updateTypingList(LLUUID agent_id, bool remove) | ||
440 | { | ||
441 | if (remove) | ||
442 | { | ||
443 | if (isTyping(agent_id)) | ||
444 | { | ||
445 | mTypingAvatars.erase(agent_id); | ||
446 | } | ||
447 | } | ||
448 | else | ||
449 | { | ||
450 | mTypingAvatars.insert(agent_id); | ||
451 | } | ||
452 | } | ||
453 | |||
454 | void LLFloaterMap::updateSimAvList(std::vector<LLUUID> agent_ids) | ||
455 | { | ||
456 | std::set<LLUUID>::iterator it; | ||
457 | std::vector<LLUUID>::iterator result; | ||
458 | for (it = mSimAvatars.begin(); it != mSimAvatars.end(); ) | ||
459 | { | ||
460 | result = find(agent_ids.begin(), agent_ids.end(), *it); | ||
461 | if (result == agent_ids.end()) | ||
462 | { | ||
463 | mSimAvatars.erase(it++); | ||
464 | } | ||
465 | else | ||
466 | { | ||
467 | it++; | ||
468 | } | ||
469 | } | ||
470 | } | ||
471 | |||
472 | void LLFloaterMap::addToSimAvList(LLUUID agent_id, std::string distance) | ||
473 | { | ||
474 | mSimAvatars.insert(agent_id); | ||
475 | LLChat chat; | ||
476 | |||
477 | LLUIString notify = getString("entering_sim_range"); | ||
478 | notify.setArg("[NAME]", getSelectedName(agent_id)); | ||
479 | notify.setArg("[DISTANCE]", distance); | ||
480 | |||
481 | chat.mText = notify; | ||
482 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
483 | LLFloaterChat::addChat(chat, FALSE, FALSE); | ||
484 | } | ||
485 | |||
486 | bool LLFloaterMap::getInSimAvList(LLUUID agent_id) | ||
487 | { | ||
488 | if (mSimAvatars.count(agent_id) > 0) | ||
489 | { | ||
490 | return true; | ||
491 | } | ||
492 | return false; | ||
493 | } | ||
494 | |||
495 | void LLFloaterMap::toggleButtons() | ||
496 | { | ||
497 | BOOL enable = FALSE; | ||
498 | BOOL enable_unmute = FALSE; | ||
499 | BOOL enable_track = FALSE; | ||
500 | BOOL enable_estate = FALSE; | ||
501 | BOOL enable_friend = FALSE; | ||
502 | if (childHasFocus("RadarPanel")) | ||
503 | { | ||
504 | enable = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; | ||
505 | enable_unmute = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; | ||
506 | enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar); | ||
507 | enable_estate = isKickable(mSelectedAvatar); | ||
508 | enable_friend = !is_agent_friend(mSelectedAvatar); | ||
509 | } | ||
510 | else | ||
511 | { | ||
512 | mRadarList->deselect(); | ||
513 | } | ||
514 | |||
515 | childSetEnabled("im_btn", enable); | ||
516 | childSetEnabled("profile_btn", enable); | ||
517 | childSetEnabled("offer_teleport_btn", enable); | ||
518 | childSetEnabled("track_btn", enable_track); | ||
519 | childSetEnabled("invite_btn", enable); | ||
520 | childSetEnabled("add_btn", enable); | ||
521 | childSetEnabled("freeze_btn", enable_estate); | ||
522 | childSetEnabled("eject_btn", enable_estate); | ||
523 | childSetEnabled("mute_btn", enable); | ||
524 | childSetEnabled("ar_btn", enable); | ||
525 | childSetEnabled("estate_eject_btn", enable_estate); | ||
526 | |||
527 | if (enable_unmute) | ||
528 | { | ||
529 | childSetVisible("mute_btn", false); | ||
530 | childSetEnabled("unmute_btn", true); | ||
531 | childSetVisible("unmute_btn", true); | ||
532 | } | ||
533 | else | ||
534 | { | ||
535 | childSetVisible("mute_btn", true); | ||
536 | childSetVisible("unmute_btn", false); | ||
537 | } | ||
538 | |||
539 | // [RLVa:KB] - Imprudence-1.2.0 | ||
540 | // Bit clumsy, but this way the RLV stuff is in its own separate block and keeps the code above clean - Kitty | ||
541 | if ( (rlv_handler_t::isEnabled()) && (mSelectedAvatar.notNull()) ) | ||
542 | { | ||
543 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
544 | { | ||
545 | childSetEnabled("im_btn", FALSE); | ||
546 | childSetEnabled("profile_btn", FALSE); | ||
547 | childSetEnabled("invite_btn", FALSE); | ||
548 | childSetEnabled("add_btn", FALSE); | ||
549 | childSetEnabled("mute_btn", FALSE); | ||
550 | childSetEnabled("unmute_btn", FALSE); | ||
551 | } | ||
552 | |||
553 | // Even though the avie is in the same sim (so they already know where we are) the tp would just get blocked by different code | ||
554 | // so it's actually less confusing to the user if we just disable the teleport button here so they'll at least have a visual cue | ||
555 | BOOL rlv_enable_tp = (!gRlvHandler.hasBehaviour(RLV_BHVR_TPLURE)) || (gRlvHandler.isException(RLV_BHVR_TPLURE, mSelectedAvatar)); | ||
556 | if ( (rlv_enable_tp) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
557 | { | ||
558 | const LLRelationship* pBuddyInfo = LLAvatarTracker::instance().getBuddyInfo(mSelectedAvatar); | ||
559 | if ( ((!pBuddyInfo) || (!pBuddyInfo->isOnline()) || (!pBuddyInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION))) ) | ||
560 | rlv_enable_tp = FALSE; | ||
561 | } | ||
562 | childSetEnabled("offer_teleport_btn", rlv_enable_tp); | ||
563 | } | ||
564 | // [/RLVa:KB] | ||
565 | } | ||
566 | |||
567 | BOOL LLFloaterMap::isKickable(const LLUUID &agent_id) | ||
568 | { | ||
569 | if (agent_id.notNull()) | ||
570 | { | ||
571 | LLViewerObject* av_obj = gObjectList.findObject(agent_id); | ||
572 | if (av_obj != NULL && av_obj->isAvatar()) | ||
573 | { | ||
574 | LLVOAvatar* avatar = (LLVOAvatar*)av_obj; | ||
575 | LLViewerRegion* region = avatar->getRegion(); | ||
576 | if (region) | ||
577 | { | ||
578 | const LLVector3& pos = avatar->getPositionRegion(); | ||
579 | const LLVector3d& pos_global = avatar->getPositionGlobal(); | ||
580 | if (LLWorld::getInstance()->positionRegionValidGlobal(pos_global)) | ||
581 | { | ||
582 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); | ||
583 | LLViewerParcelMgr::getInstance()->deselectLand(); | ||
584 | |||
585 | BOOL new_value = (region != NULL); | ||
586 | |||
587 | if (new_value) | ||
588 | { | ||
589 | new_value = region->isOwnedSelf(pos); | ||
590 | if (!new_value || region->isOwnedGroup(pos)) | ||
591 | { | ||
592 | new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); | ||
593 | } | ||
594 | } | ||
595 | return new_value; | ||
596 | } | ||
597 | } | ||
598 | } | ||
599 | } | ||
600 | return FALSE; | ||
601 | } | ||
602 | |||
603 | // static | ||
604 | void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data) | ||
605 | { | ||
606 | LLFloaterMap* self = (LLFloaterMap*)user_data; | ||
607 | if (self) | ||
608 | { | ||
609 | self->toggleButtons(); | ||
610 | } | ||
611 | } | ||
612 | |||
613 | BOOL LLFloaterMap::visibleItemsSelected() const | ||
614 | { | ||
615 | if (mRadarList->getFirstSelectedIndex() >= 0) | ||
616 | { | ||
617 | return TRUE; | ||
618 | } | ||
619 | return FALSE; | ||
620 | } | ||
621 | |||
622 | // static | ||
623 | void LLFloaterMap::onRangeChange(LLFocusableElement* focus, void* user_data) | ||
624 | { | ||
625 | LLFloaterMap* self = (LLFloaterMap*)user_data; | ||
626 | if (self) | ||
627 | { | ||
628 | self->mUpdate = !(self->childHasFocus("near_me_range")); | ||
629 | } | ||
630 | } | ||
631 | |||
632 | // static | ||
633 | LLUUID LLFloaterMap::getSelected() | ||
634 | { | ||
635 | return LLFloaterMap::getInstance()->mSelectedAvatar; | ||
636 | } | ||
637 | |||
638 | // | ||
639 | // Avatar tab | ||
640 | // | ||
641 | |||
642 | // static | ||
643 | void LLFloaterMap::onClickIM(void* user_data) | ||
644 | { | ||
645 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
646 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
647 | if (item != NULL) | ||
648 | { | ||
649 | LLUUID agent_id = item->getUUID(); | ||
650 | gIMMgr->setFloaterOpen(TRUE); | ||
651 | gIMMgr->addSession(getSelectedName(agent_id), IM_NOTHING_SPECIAL, agent_id); | ||
652 | } | ||
653 | } | ||
654 | |||
655 | // static | ||
656 | void LLFloaterMap::onClickProfile(void* user_data) | ||
657 | { | ||
658 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
659 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
660 | if (item != NULL) | ||
661 | { | ||
662 | LLUUID agent_id = item->getUUID(); | ||
663 | LLFloaterAvatarInfo::show(agent_id); | ||
664 | } | ||
665 | } | ||
666 | |||
667 | // static | ||
668 | void LLFloaterMap::onClickOfferTeleport(void* user_data) | ||
669 | { | ||
670 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
671 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
672 | if (item != NULL) | ||
673 | { | ||
674 | LLUUID agent_id = item->getUUID(); | ||
675 | handle_lure(agent_id); | ||
676 | } | ||
677 | } | ||
678 | |||
679 | // static | ||
680 | void LLFloaterMap::onClickTrack(void* user_data) | ||
681 | { | ||
682 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
683 | LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); | ||
684 | |||
685 | if (LLTracker::TRACKING_AVATAR == tracking_status) | ||
686 | { | ||
687 | LLTracker::stopTracking(NULL); | ||
688 | } | ||
689 | else | ||
690 | { | ||
691 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
692 | if (item != NULL) | ||
693 | { | ||
694 | LLUUID agent_id = item->getUUID(); | ||
695 | LLTracker::trackAvatar(agent_id, getSelectedName(agent_id)); | ||
696 | } | ||
697 | } | ||
698 | } | ||
699 | |||
700 | // static | ||
701 | void LLFloaterMap::onClickInvite(void* user_data) | ||
702 | { | ||
703 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
704 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
705 | if (item != NULL) | ||
706 | { | ||
707 | LLUUID agent_id = item->getUUID(); | ||
708 | LLFloaterGroupPicker* widget; | ||
709 | widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID())); | ||
710 | if (widget) | ||
711 | { | ||
712 | widget->center(); | ||
713 | widget->setPowersMask(GP_MEMBER_INVITE); | ||
714 | widget->setSelectCallback(callback_invite_to_group, (void *)&agent_id); | ||
715 | } | ||
716 | } | ||
717 | } | ||
718 | |||
719 | // static | ||
720 | void LLFloaterMap::callback_invite_to_group(LLUUID group_id, void *user_data) | ||
721 | { | ||
722 | std::vector<LLUUID> agent_ids; | ||
723 | agent_ids.push_back(*(LLUUID *)user_data); | ||
724 | |||
725 | LLFloaterGroupInvite::showForGroup(group_id, &agent_ids); | ||
726 | } | ||
727 | |||
728 | // static | ||
729 | void LLFloaterMap::onClickAddFriend(void* user_data) | ||
730 | { | ||
731 | LLFloaterMap* self = (LLFloaterMap*) user_data; | ||
732 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
733 | if (item != NULL) | ||
734 | { | ||
735 | LLUUID agent_id = item->getUUID(); | ||
736 | LLPanelFriends::requestFriendshipDialog(agent_id, getSelectedName(agent_id)); | ||
737 | } | ||
738 | } | ||
739 | |||
740 | // | ||
741 | // Estate tab | ||
742 | // | ||
743 | |||
744 | //static | ||
745 | std::string LLFloaterMap::getSelectedName(const LLUUID &agent_id) | ||
746 | { | ||
747 | std::string agent_name; | ||
748 | if(gCacheName->getFullName(agent_id, agent_name) && agent_name != " ") | ||
749 | { | ||
750 | return agent_name; | ||
751 | } | ||
752 | return LLStringUtil::null; | ||
753 | } | ||
754 | |||
755 | //static | ||
756 | void LLFloaterMap::callbackFreeze(S32 option, void *user_data) | ||
757 | { | ||
758 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
759 | |||
760 | if ( option == 0 ) | ||
761 | { | ||
762 | sendFreeze(self->mSelectedAvatar, true); | ||
763 | } | ||
764 | else if ( option == 1 ) | ||
765 | { | ||
766 | sendFreeze(self->mSelectedAvatar, false); | ||
767 | } | ||
768 | } | ||
769 | |||
770 | //static | ||
771 | void LLFloaterMap::callbackEject(S32 option, void *user_data) | ||
772 | { | ||
773 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
774 | |||
775 | if ( option == 0 ) | ||
776 | { | ||
777 | sendEject(self->mSelectedAvatar, false); | ||
778 | } | ||
779 | else if ( option == 1 ) | ||
780 | { | ||
781 | sendEject(self->mSelectedAvatar, true); | ||
782 | } | ||
783 | } | ||
784 | |||
785 | //static | ||
786 | void LLFloaterMap::callbackEjectFromEstate(S32 option, void *user_data) | ||
787 | { | ||
788 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
789 | |||
790 | if ( option == 0 ) | ||
791 | { | ||
792 | cmdEstateEject(self->mSelectedAvatar); | ||
793 | } | ||
794 | else if ( option == 1 ) | ||
795 | { | ||
796 | cmdEstateBan(self->mSelectedAvatar); | ||
797 | } | ||
798 | } | ||
799 | |||
800 | void LLFloaterMap::onClickFreeze(void *user_data) | ||
801 | { | ||
802 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
803 | LLStringUtil::format_map_t args; | ||
804 | LLSD payload; | ||
805 | args["[AVATAR_NAME]"] = getSelectedName(self->mSelectedAvatar); | ||
806 | gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data); | ||
807 | } | ||
808 | |||
809 | //static | ||
810 | void LLFloaterMap::onClickEject(void *user_data) | ||
811 | { | ||
812 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
813 | LLStringUtil::format_map_t args; | ||
814 | LLSD payload; | ||
815 | args["AVATAR_NAME"] = getSelectedName(self->mSelectedAvatar); | ||
816 | gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data); | ||
817 | } | ||
818 | |||
819 | //static | ||
820 | void LLFloaterMap::onClickMute(void *user_data) | ||
821 | { | ||
822 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
823 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
824 | if (item != NULL) | ||
825 | { | ||
826 | LLUUID agent_id = item->getUUID(); | ||
827 | std::string agent_name = getSelectedName(agent_id); | ||
828 | if (LLMuteList::getInstance()->isMuted(agent_id)) | ||
829 | { | ||
830 | //LLMute mute(agent_id, agent_name, LLMute::AGENT); | ||
831 | //LLMuteList::getInstance()->remove(mute); | ||
832 | //LLFloaterMute::getInstance()->selectMute(agent_id); | ||
833 | } | ||
834 | else | ||
835 | { | ||
836 | LLMute mute(agent_id, agent_name, LLMute::AGENT); | ||
837 | LLMuteList::getInstance()->add(mute); | ||
838 | } | ||
839 | } | ||
840 | } | ||
841 | |||
842 | //static | ||
843 | void LLFloaterMap::onClickUnmute(void *user_data) | ||
844 | { | ||
845 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
846 | LLScrollListItem *item = self->mRadarList->getFirstSelected(); | ||
847 | if (item != NULL) | ||
848 | { | ||
849 | LLUUID agent_id = item->getUUID(); | ||
850 | std::string agent_name = getSelectedName(agent_id); | ||
851 | if (LLMuteList::getInstance()->isMuted(agent_id)) | ||
852 | { | ||
853 | LLMute mute(agent_id, agent_name, LLMute::AGENT); | ||
854 | LLMuteList::getInstance()->remove(mute); | ||
855 | //LLFloaterMute::getInstance()->selectMute(agent_id); | ||
856 | } | ||
857 | else | ||
858 | { | ||
859 | //LLMute mute(agent_id, agent_name, LLMute::AGENT); | ||
860 | //LLMuteList::getInstance()->add(mute); | ||
861 | } | ||
862 | } | ||
863 | } | ||
864 | |||
865 | //static | ||
866 | void LLFloaterMap::onClickEjectFromEstate(void *user_data) | ||
867 | { | ||
868 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
869 | LLStringUtil::format_map_t args; | ||
870 | LLSD payload; | ||
871 | args["EVIL_USER"] = getSelectedName(self->mSelectedAvatar); | ||
872 | gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data); | ||
873 | } | ||
874 | |||
875 | //static | ||
876 | void LLFloaterMap::onClickAR(void *user_data) | ||
877 | { | ||
878 | LLFloaterMap *self = (LLFloaterMap*)user_data; | ||
879 | LLUUID agent_id = self->mSelectedAvatar; | ||
880 | |||
881 | if (agent_id.notNull()) | ||
882 | { | ||
883 | LLFloaterReporter::showFromObject(agent_id); | ||
884 | } | ||
885 | } | ||
886 | |||
887 | // static | ||
888 | void LLFloaterMap::cmdEstateEject(const LLUUID &avatar) | ||
889 | { | ||
890 | sendEstateMessage("teleporthomeuser", avatar); | ||
891 | } | ||
892 | |||
893 | // static | ||
894 | void LLFloaterMap::cmdEstateBan(const LLUUID &avatar) | ||
895 | { | ||
896 | sendEstateMessage("teleporthomeuser", avatar); // Kick first, just to be sure | ||
897 | sendEstateBan(avatar); | ||
898 | } | ||
899 | |||
900 | // static | ||
901 | void LLFloaterMap::sendFreeze(const LLUUID& avatar_id, bool freeze) | ||
902 | { | ||
903 | U32 flags = 0x0; | ||
904 | if (!freeze) | ||
905 | { | ||
906 | // unfreeze | ||
907 | flags |= 0x1; | ||
908 | } | ||
909 | |||
910 | LLMessageSystem* msg = gMessageSystem; | ||
911 | LLViewerObject* avatar = gObjectList.findObject(avatar_id); | ||
912 | |||
913 | if (avatar) | ||
914 | { | ||
915 | msg->newMessage("FreezeUser"); | ||
916 | msg->nextBlock("AgentData"); | ||
917 | msg->addUUID("AgentID", gAgent.getID()); | ||
918 | msg->addUUID("SessionID", gAgent.getSessionID()); | ||
919 | msg->nextBlock("Data"); | ||
920 | msg->addUUID("TargetID", avatar_id ); | ||
921 | msg->addU32("Flags", flags ); | ||
922 | msg->sendReliable( avatar->getRegion()->getHost() ); | ||
923 | } | ||
924 | } | ||
925 | |||
926 | // static | ||
927 | void LLFloaterMap::sendEject(const LLUUID& avatar_id, bool ban) | ||
928 | { | ||
929 | LLMessageSystem* msg = gMessageSystem; | ||
930 | LLViewerObject* avatar = gObjectList.findObject(avatar_id); | ||
931 | |||
932 | if (avatar) | ||
933 | { | ||
934 | U32 flags = 0x0; | ||
935 | if ( ban ) | ||
936 | { | ||
937 | // eject and add to ban list | ||
938 | flags |= 0x1; | ||
939 | } | ||
940 | |||
941 | msg->newMessage("EjectUser"); | ||
942 | msg->nextBlock("AgentData"); | ||
943 | msg->addUUID("AgentID", gAgent.getID() ); | ||
944 | msg->addUUID("SessionID", gAgent.getSessionID() ); | ||
945 | msg->nextBlock("Data"); | ||
946 | msg->addUUID("TargetID", avatar_id ); | ||
947 | msg->addU32("Flags", flags ); | ||
948 | msg->sendReliable( avatar->getRegion()->getHost() ); | ||
949 | } | ||
950 | } | ||
951 | |||
952 | // static | ||
953 | void LLFloaterMap::sendEstateMessage(const char* request, const LLUUID &target) | ||
954 | { | ||
955 | |||
956 | LLMessageSystem* msg = gMessageSystem; | ||
957 | LLUUID invoice; | ||
958 | |||
959 | // This seems to provide an ID so that the sim can say which request it's | ||
960 | // replying to. I think this can be ignored for now. | ||
961 | invoice.generate(); | ||
962 | |||
963 | llinfos << "Sending estate request '" << request << "'" << llendl; | ||
964 | msg->newMessage("EstateOwnerMessage"); | ||
965 | msg->nextBlockFast(_PREHASH_AgentData); | ||
966 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
967 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
968 | msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used | ||
969 | msg->nextBlock("MethodData"); | ||
970 | msg->addString("Method", request); | ||
971 | msg->addUUID("Invoice", invoice); | ||
972 | |||
973 | // Agent id | ||
974 | msg->nextBlock("ParamList"); | ||
975 | msg->addString("Parameter", gAgent.getID().asString().c_str()); | ||
976 | |||
977 | // Target | ||
978 | msg->nextBlock("ParamList"); | ||
979 | msg->addString("Parameter", target.asString().c_str()); | ||
980 | |||
981 | msg->sendReliable(gAgent.getRegion()->getHost()); | ||
982 | } | ||
983 | |||
984 | // static | ||
985 | void LLFloaterMap::sendEstateBan(const LLUUID& agent) | ||
986 | { | ||
987 | LLUUID invoice; | ||
988 | U32 flags = ESTATE_ACCESS_BANNED_AGENT_ADD; | ||
989 | |||
990 | invoice.generate(); | ||
991 | |||
992 | LLMessageSystem* msg = gMessageSystem; | ||
993 | msg->newMessage("EstateOwnerMessage"); | ||
994 | msg->nextBlockFast(_PREHASH_AgentData); | ||
995 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
996 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
997 | msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used | ||
998 | |||
999 | msg->nextBlock("MethodData"); | ||
1000 | msg->addString("Method", "estateaccessdelta"); | ||
1001 | msg->addUUID("Invoice", invoice); | ||
1002 | |||
1003 | char buf[MAX_STRING]; /* Flawfinder: ignore*/ | ||
1004 | gAgent.getID().toString(buf); | ||
1005 | msg->nextBlock("ParamList"); | ||
1006 | msg->addString("Parameter", buf); | ||
1007 | |||
1008 | snprintf(buf, MAX_STRING, "%u", flags); /* Flawfinder: ignore */ | ||
1009 | msg->nextBlock("ParamList"); | ||
1010 | msg->addString("Parameter", buf); | ||
1011 | |||
1012 | agent.toString(buf); | ||
1013 | msg->nextBlock("ParamList"); | ||
1014 | msg->addString("Parameter", buf); | ||
1015 | |||
1016 | gAgent.sendReliableMessage(); | ||
1017 | } | ||
diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h index ec2db27..c457b9f 100644 --- a/linden/indra/newview/llfloatermap.h +++ b/linden/indra/newview/llfloatermap.h | |||
@@ -34,6 +34,7 @@ | |||
34 | #define LL_LLFLOATERMAP_H | 34 | #define LL_LLFLOATERMAP_H |
35 | 35 | ||
36 | #include "llfloater.h" | 36 | #include "llfloater.h" |
37 | #include "llscrolllistctrl.h" | ||
37 | 38 | ||
38 | class LLNetMap; | 39 | class LLNetMap; |
39 | 40 | ||
@@ -47,16 +48,84 @@ public: | |||
47 | 48 | ||
48 | static void* createPanelMiniMap(void* data); | 49 | static void* createPanelMiniMap(void* data); |
49 | 50 | ||
51 | static void updateRadar(); | ||
52 | static LLUUID getSelected(); | ||
53 | // returns true if agent_id belongs to a developer listed in llfloatermap.cpp | ||
54 | static bool isImpDev(LLUUID agent_id); | ||
55 | |||
56 | bool isTyping(LLUUID agent_id); | ||
57 | void updateTypingList(LLUUID agent_id, bool remove); | ||
58 | |||
50 | BOOL postBuild(); | 59 | BOOL postBuild(); |
51 | 60 | ||
52 | /*virtual*/ void draw(); | 61 | /*virtual*/ void draw(); |
53 | /*virtual*/ void onOpen(); | 62 | /*virtual*/ void onOpen(); |
54 | /*virtual*/ void onClose(bool app_quitting); | 63 | /*virtual*/ void onClose(bool app_quitting); |
55 | /*virtual*/ BOOL canClose(); | 64 | /*virtual*/ BOOL canClose(); |
65 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c) | ||
66 | /*virtual*/ void open(); | ||
67 | // [/RLVa:KB] | ||
68 | |||
56 | 69 | ||
57 | private: | 70 | private: |
71 | |||
58 | LLFloaterMap(const LLSD& key = LLSD()); | 72 | LLFloaterMap(const LLSD& key = LLSD()); |
59 | LLNetMap* mPanelMap; | 73 | |
74 | LLNetMap* mPanelMap; | ||
75 | LLScrollListCtrl* mRadarList; | ||
76 | LLUUID mSelectedAvatar; | ||
77 | |||
78 | // TODO: move all this info into its own object. It's stupid | ||
79 | // and bug-prone to keep it all in separate containers, but | ||
80 | // I want to get this out for 1.2 -- McCabe | ||
81 | std::set<LLUUID> mChatAvatars; | ||
82 | std::set<LLUUID> mTypingAvatars; | ||
83 | std::set<LLUUID> mSimAvatars; | ||
84 | bool mUpdate; | ||
85 | |||
86 | static void onList(LLUICtrl* ctrl, void* user_data); | ||
87 | static void onRangeChange(LLFocusableElement* focus, void* user_data); | ||
88 | BOOL visibleItemsSelected() const; | ||
89 | BOOL isKickable(const LLUUID &agent_id); | ||
90 | void toggleButtons(); | ||
91 | void populateRadar(); | ||
92 | |||
93 | void updateChatList(std::vector<LLUUID> agent_ids); | ||
94 | bool isInChatList(LLUUID agent_id); | ||
95 | void addToChatList(LLUUID agent_id, std::string distance); | ||
96 | void removeFromChatList(LLUUID agent_id); | ||
97 | |||
98 | bool getInSimAvList(LLUUID agent_id); | ||
99 | void addToSimAvList(LLUUID agent_id, std::string distance); | ||
100 | void updateSimAvList(std::vector<LLUUID> agent_ids); | ||
101 | |||
102 | static void onClickProfile(void* user_data); | ||
103 | static void onClickIM(void* user_data); | ||
104 | static void onClickAddFriend(void* user_data); | ||
105 | static void onClickOfferTeleport(void* user_data); | ||
106 | static void onClickTrack(void* user_data); | ||
107 | static void onClickInvite(void* user_data); | ||
108 | static void callback_invite_to_group(LLUUID group_id, void *user_data); | ||
109 | |||
110 | static std::string getSelectedName(const LLUUID &agent_id); | ||
111 | static void onClickFreeze(void *user_data); | ||
112 | static void onClickEject(void *user_data); | ||
113 | static void onClickMute(void *user_data); | ||
114 | static void onClickUnmute(void *user_data); | ||
115 | static void onClickAR(void *user_data); | ||
116 | static void onClickEjectFromEstate(void *user_data); | ||
117 | |||
118 | static void callbackFreeze(S32 option, void *user_data); | ||
119 | static void callbackEject(S32 option, void *user_data); | ||
120 | static void callbackAR(void *user_data); | ||
121 | static void callbackEjectFromEstate(S32 option, void *user_data); | ||
122 | |||
123 | static void sendFreeze(const LLUUID &avatar, bool); | ||
124 | static void sendEject(const LLUUID &avatar, bool); | ||
125 | static void cmdEstateEject(const LLUUID &avatar); | ||
126 | static void cmdEstateBan(const LLUUID &avatar); | ||
127 | static void sendEstateBan(const LLUUID& agent); | ||
128 | static void sendEstateMessage(const char* request, const LLUUID &target); | ||
60 | }; | 129 | }; |
61 | 130 | ||
62 | #endif // LL_LLFLOATERMAP_H | 131 | #endif // LL_LLFLOATERMAP_H |
diff --git a/linden/indra/newview/llfloateropenobject.cpp b/linden/indra/newview/llfloateropenobject.cpp index fc483dd..d7fdece 100644 --- a/linden/indra/newview/llfloateropenobject.cpp +++ b/linden/indra/newview/llfloateropenobject.cpp | |||
@@ -208,7 +208,18 @@ void LLFloaterOpenObject::onClickMoveToInventory(void* data) | |||
208 | void LLFloaterOpenObject::onClickMoveAndWear(void* data) | 208 | void LLFloaterOpenObject::onClickMoveAndWear(void* data) |
209 | { | 209 | { |
210 | LLFloaterOpenObject* self = (LLFloaterOpenObject*)data; | 210 | LLFloaterOpenObject* self = (LLFloaterOpenObject*)data; |
211 | self->moveToInventory(true); | 211 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Deprecated: RLVa-0.2.2a |
212 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
213 | { | ||
214 | // TODO-RLVa: once we have "Add to Outfit" and "Replace Outfit" working we don't need this anymore | ||
215 | self->moveToInventory(false); | ||
216 | } | ||
217 | else | ||
218 | { | ||
219 | self->moveToInventory(true); | ||
220 | } | ||
221 | // [/RLVa:KB] | ||
222 | // self->moveToInventory(true); | ||
212 | self->close(); | 223 | self->close(); |
213 | } | 224 | } |
214 | 225 | ||
diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp index 406d940..3059843 100644 --- a/linden/indra/newview/llfloaterproperties.cpp +++ b/linden/indra/newview/llfloaterproperties.cpp | |||
@@ -355,8 +355,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) | |||
355 | else | 355 | else |
356 | { | 356 | { |
357 | gCacheName->getFullName(perm.getOwner(), name); | 357 | gCacheName->getFullName(perm.getOwner(), name); |
358 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
359 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
360 | { | ||
361 | name = gRlvHandler.getAnonym(name); | ||
362 | } | ||
363 | // [/RLVa:KB] | ||
358 | } | 364 | } |
359 | childSetEnabled("BtnOwner",TRUE); | 365 | //childSetEnabled("BtnOwner",TRUE); |
366 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e | ||
367 | childSetEnabled("BtnOwner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
368 | // [/RLVa:KB] | ||
360 | childSetEnabled("LabelOwnerTitle",TRUE); | 369 | childSetEnabled("LabelOwnerTitle",TRUE); |
361 | childSetEnabled("LabelOwnerName",TRUE); | 370 | childSetEnabled("LabelOwnerName",TRUE); |
362 | childSetText("LabelOwnerName",name); | 371 | childSetText("LabelOwnerName",name); |
@@ -603,7 +612,10 @@ void LLFloaterProperties::onClickOwner(void* data) | |||
603 | } | 612 | } |
604 | else | 613 | else |
605 | { | 614 | { |
606 | if(!item->getPermissions().getOwner().isNull()) | 615 | // if(!item->getPermissions().getOwner().isNull()) |
616 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
617 | if ( (!item->getPermissions().getOwner().isNull()) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ) | ||
618 | // [/RLVa:KB] | ||
607 | { | 619 | { |
608 | LLFloaterAvatarInfo::showFromObject(item->getPermissions().getOwner()); | 620 | LLFloaterAvatarInfo::showFromObject(item->getPermissions().getOwner()); |
609 | } | 621 | } |
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp index d7b7c9c..08d845b 100644 --- a/linden/indra/newview/llfloaterregioninfo.cpp +++ b/linden/indra/newview/llfloaterregioninfo.cpp | |||
@@ -3273,3 +3273,22 @@ bool LLDispatchSetEstateAccess::operator()( | |||
3273 | 3273 | ||
3274 | return true; | 3274 | return true; |
3275 | } | 3275 | } |
3276 | |||
3277 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
3278 | void LLFloaterRegionInfo::open() | ||
3279 | { | ||
3280 | // We'll allow access to the estate tools for estate managers (and for the sim owner) | ||
3281 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
3282 | { | ||
3283 | LLViewerRegion* pRegion = gAgent.getRegion(); | ||
3284 | if (!pRegion) | ||
3285 | return; | ||
3286 | |||
3287 | // Should be able to call LLRegion::canManageEstate() but then we can fake god like | ||
3288 | if ( (!pRegion->isEstateManager()) && (pRegion->getOwner() != gAgent.getID()) ) | ||
3289 | return; | ||
3290 | } | ||
3291 | |||
3292 | LLFloater::open(); | ||
3293 | } | ||
3294 | // [/RLVa:KB] | ||
diff --git a/linden/indra/newview/llfloaterregioninfo.h b/linden/indra/newview/llfloaterregioninfo.h index 806d1f5..fd0d9ce 100644 --- a/linden/indra/newview/llfloaterregioninfo.h +++ b/linden/indra/newview/llfloaterregioninfo.h | |||
@@ -67,6 +67,9 @@ public: | |||
67 | 67 | ||
68 | /*virtual*/ void onOpen(); | 68 | /*virtual*/ void onOpen(); |
69 | /*virtual*/ BOOL postBuild(); | 69 | /*virtual*/ BOOL postBuild(); |
70 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
71 | /*virtual*/ void open(); | ||
72 | // [/RLVa:KB] | ||
70 | 73 | ||
71 | static void processEstateOwnerRequest(LLMessageSystem* msg, void**); | 74 | static void processEstateOwnerRequest(LLMessageSystem* msg, void**); |
72 | 75 | ||
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp index 412494e..31d658b 100644 --- a/linden/indra/newview/llfloaterreporter.cpp +++ b/linden/indra/newview/llfloaterreporter.cpp | |||
@@ -133,6 +133,23 @@ LLFloaterReporter::LLFloaterReporter( | |||
133 | 133 | ||
134 | childSetText("abuse_location_edit", gAgent.getSLURL() ); | 134 | childSetText("abuse_location_edit", gAgent.getSLURL() ); |
135 | 135 | ||
136 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-1.0.0a | ||
137 | if (rlv_handler_t::isEnabled()) | ||
138 | { | ||
139 | // Can't filter these since they get sent as part of the report so just hide them instead | ||
140 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
141 | { | ||
142 | childSetVisible("abuse_location_edit", false); | ||
143 | childSetVisible("pos_field", false); | ||
144 | } | ||
145 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
146 | { | ||
147 | childSetVisible("owner_name", false); | ||
148 | childSetVisible("abuser_name_edit", false); | ||
149 | } | ||
150 | } | ||
151 | // [/RLVa:KB] | ||
152 | |||
136 | LLButton* pick_btn = getChild<LLButton>("pick_btn"); | 153 | LLButton* pick_btn = getChild<LLButton>("pick_btn"); |
137 | if (pick_btn) | 154 | if (pick_btn) |
138 | { | 155 | { |
@@ -300,6 +317,12 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) | |||
300 | if (regionp) | 317 | if (regionp) |
301 | { | 318 | { |
302 | childSetText("sim_field", regionp->getName()); | 319 | childSetText("sim_field", regionp->getName()); |
320 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
321 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
322 | { | ||
323 | childSetText("sim_field", rlv_handler_t::cstrHiddenRegion); | ||
324 | } | ||
325 | // [/RLVa:KB] | ||
303 | LLVector3d global_pos; | 326 | LLVector3d global_pos; |
304 | global_pos.setVec(objectp->getPositionRegion()); | 327 | global_pos.setVec(objectp->getPositionRegion()); |
305 | setPosBox(global_pos); | 328 | setPosBox(global_pos); |
@@ -323,6 +346,12 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) | |||
323 | object_owner.append("Unknown"); | 346 | object_owner.append("Unknown"); |
324 | } | 347 | } |
325 | childSetText("object_name", object_owner); | 348 | childSetText("object_name", object_owner); |
349 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RVLa-1.0.0e | ||
350 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
351 | { | ||
352 | childSetVisible("object_name", false); // Hide the object name if the picked object represents an avataz | ||
353 | } | ||
354 | // [/RLVa:KB] | ||
326 | childSetText("owner_name", object_owner); | 355 | childSetText("owner_name", object_owner); |
327 | childSetText("abuser_name_edit", object_owner); | 356 | childSetText("abuser_name_edit", object_owner); |
328 | mAbuserID = object_id; | 357 | mAbuserID = object_id; |
@@ -595,6 +624,12 @@ LLFloaterReporter* LLFloaterReporter::createNewBugReporter() | |||
595 | void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id) | 624 | void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id) |
596 | { | 625 | { |
597 | childSetText("object_name", object_name); | 626 | childSetText("object_name", object_name); |
627 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RVLa-1.0.0e | ||
628 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
629 | { | ||
630 | childSetVisible("object_name", true); // Show the object name if the picked object is actually an object | ||
631 | } | ||
632 | // [/RLVa:KB] | ||
598 | childSetText("owner_name", owner_name); | 633 | childSetText("owner_name", owner_name); |
599 | childSetText("abuser_name_edit", owner_name); | 634 | childSetText("abuser_name_edit", owner_name); |
600 | mAbuserID = owner_id; | 635 | mAbuserID = owner_id; |
diff --git a/linden/indra/newview/llfloatersettingsdebug.cpp b/linden/indra/newview/llfloatersettingsdebug.cpp index 2677467..2e414cb 100644 --- a/linden/indra/newview/llfloatersettingsdebug.cpp +++ b/linden/indra/newview/llfloatersettingsdebug.cpp | |||
@@ -40,6 +40,11 @@ | |||
40 | #include "llcolorswatch.h" | 40 | #include "llcolorswatch.h" |
41 | #include "llviewercontrol.h" | 41 | #include "llviewercontrol.h" |
42 | 42 | ||
43 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0g) | ||
44 | #include "rlvhandler.h" | ||
45 | #include "rlvextensions.h" | ||
46 | // [/RLVa:KB] | ||
47 | |||
43 | LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL; | 48 | LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL; |
44 | 49 | ||
45 | LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater(std::string("Configuration Editor")) | 50 | LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater(std::string("Configuration Editor")) |
@@ -243,6 +248,32 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) | |||
243 | 248 | ||
244 | if (controlp) | 249 | if (controlp) |
245 | { | 250 | { |
251 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.1d | ||
252 | if (rlv_handler_t::isEnabled()) | ||
253 | { | ||
254 | // Don't allow changing DBG_WRITE debug settings under @setdebug=n | ||
255 | bool fEnable = !( (gRlvHandler.hasBehaviour(RLV_BHVR_SETDEBUG)) && | ||
256 | (RlvExtGetSet::getDebugSettingFlags(controlp->getName()) & RlvExtGetSet::DBG_WRITE) ); | ||
257 | // Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n | ||
258 | fEnable &= !((gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) && | ||
259 | (("VertexShaderEnable" == controlp->getName()) || ("WindLightUseAtmosShaders" == controlp->getName()))); | ||
260 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
261 | // Don't allow toggling RestrainedLifeLoginLastLocation | ||
262 | fEnable &= !(RLV_SETTING_LOGINLASTLOCATION == controlp->getName()); | ||
263 | #endif // RLV_EXTENSION_STARTLOCATION | ||
264 | |||
265 | // NOTE: this runs per-frame so there's no need to explictly handle onCommitSettings() or onClickDefault() | ||
266 | spinner1->setEnabled(fEnable); | ||
267 | spinner2->setEnabled(fEnable); | ||
268 | spinner3->setEnabled(fEnable); | ||
269 | spinner4->setEnabled(fEnable); | ||
270 | color_swatch->setEnabled(fEnable); | ||
271 | childSetEnabled("val_text", fEnable); | ||
272 | childSetEnabled("boolean_combo", fEnable); | ||
273 | childSetEnabled("default_btn", fEnable); | ||
274 | } | ||
275 | // [/RLVa:KB] | ||
276 | |||
246 | eControlType type = controlp->type(); | 277 | eControlType type = controlp->type(); |
247 | 278 | ||
248 | //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame | 279 | //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame |
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp index 7ec5da2..6597f9d 100644 --- a/linden/indra/newview/llfloatersnapshot.cpp +++ b/linden/indra/newview/llfloatersnapshot.cpp | |||
@@ -80,8 +80,8 @@ | |||
80 | ///---------------------------------------------------------------------------- | 80 | ///---------------------------------------------------------------------------- |
81 | /// Local function declarations, constants, enums, and typedefs | 81 | /// Local function declarations, constants, enums, and typedefs |
82 | ///---------------------------------------------------------------------------- | 82 | ///---------------------------------------------------------------------------- |
83 | S32 LLFloaterSnapshot::sUIWinHeightLong = 526 ; | 83 | S32 LLFloaterSnapshot::sUIWinHeightLong = 546 ; |
84 | S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 230 ; | 84 | S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 250 ; |
85 | S32 LLFloaterSnapshot::sUIWinWidth = 215 ; | 85 | S32 LLFloaterSnapshot::sUIWinWidth = 215 ; |
86 | 86 | ||
87 | LLSnapshotFloaterView* gSnapshotFloaterView = NULL; | 87 | LLSnapshotFloaterView* gSnapshotFloaterView = NULL; |
@@ -1272,9 +1272,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) | |||
1272 | 1272 | ||
1273 | BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot"); | 1273 | BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot"); |
1274 | BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL; | 1274 | BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL; |
1275 | BOOL show_slider = | ||
1276 | shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD | ||
1277 | || (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); | ||
1278 | 1275 | ||
1279 | floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode | 1276 | floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode |
1280 | floater->childSetVisible("less_btn", is_advance); | 1277 | floater->childSetVisible("less_btn", is_advance); |
@@ -1287,17 +1284,22 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) | |||
1287 | floater->childSetVisible("snapshot_height", is_advance); | 1284 | floater->childSetVisible("snapshot_height", is_advance); |
1288 | floater->childSetVisible("keep_aspect_check", is_advance); | 1285 | floater->childSetVisible("keep_aspect_check", is_advance); |
1289 | floater->childSetVisible("ui_check", is_advance); | 1286 | floater->childSetVisible("ui_check", is_advance); |
1290 | floater->childSetVisible("high_res_check", is_advance && is_local); | 1287 | floater->childSetVisible("high_res_check", is_advance); |
1291 | floater->childSetVisible("hud_check", is_advance); | 1288 | floater->childSetVisible("hud_check", is_advance); |
1292 | floater->childSetVisible("keep_open_check", is_advance); | 1289 | floater->childSetVisible("keep_open_check", is_advance); |
1293 | floater->childSetVisible("freeze_frame_check", is_advance); | 1290 | floater->childSetVisible("freeze_frame_check", is_advance); |
1294 | floater->childSetVisible("auto_snapshot_check", is_advance); | 1291 | floater->childSetVisible("auto_snapshot_check", is_advance); |
1295 | floater->childSetVisible("image_quality_slider", is_advance && show_slider); | 1292 | floater->childSetVisible("image_quality_slider", is_advance); |
1296 | 1293 | ||
1297 | LLSnapshotLivePreview* previewp = getPreviewView(floater); | 1294 | LLSnapshotLivePreview* previewp = getPreviewView(floater); |
1298 | BOOL got_bytes = previewp && previewp->getDataSize() > 0; | 1295 | BOOL got_bytes = previewp && previewp->getDataSize() > 0; |
1299 | BOOL got_snap = previewp->getSnapshotUpToDate(); | 1296 | BOOL got_snap = previewp->getSnapshotUpToDate(); |
1300 | 1297 | ||
1298 | BOOL show_slider = | ||
1299 | shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD | ||
1300 | || (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); | ||
1301 | floater->childSetEnabled("image_quality_slider", show_slider); | ||
1302 | |||
1301 | floater->childSetEnabled("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE); | 1303 | floater->childSetEnabled("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE); |
1302 | floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap); | 1304 | floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap); |
1303 | floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap); | 1305 | floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap); |
@@ -2131,6 +2133,7 @@ void LLFloaterSnapshot::draw() | |||
2131 | childSetTextArg("file_size_label", "[SIZE]", getString("unknown")); | 2133 | childSetTextArg("file_size_label", "[SIZE]", getString("unknown")); |
2132 | childSetColor("file_size_label", gColors.getColor( "LabelTextColor" )); | 2134 | childSetColor("file_size_label", gColors.getColor( "LabelTextColor" )); |
2133 | } | 2135 | } |
2136 | |||
2134 | childSetEnabled("upload_btn", previewp->getSnapshotUpToDate()); | 2137 | childSetEnabled("upload_btn", previewp->getSnapshotUpToDate()); |
2135 | childSetEnabled("save_btn", previewp->getSnapshotUpToDate()); | 2138 | childSetEnabled("save_btn", previewp->getSnapshotUpToDate()); |
2136 | 2139 | ||
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp index 443f684..a37663e 100644 --- a/linden/indra/newview/llfloatertools.cpp +++ b/linden/indra/newview/llfloatertools.cpp | |||
@@ -663,6 +663,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
663 | if (mBtnLink) mBtnLink->setVisible( edit_visible ); | 663 | if (mBtnLink) mBtnLink->setVisible( edit_visible ); |
664 | if (mBtnUnlink) mBtnUnlink->setVisible( edit_visible ); | 664 | if (mBtnUnlink) mBtnUnlink->setVisible( edit_visible ); |
665 | 665 | ||
666 | //TODO: Move these into llselectmgr | ||
666 | // Check to see if we can link things | 667 | // Check to see if we can link things |
667 | bool can_link = false; | 668 | bool can_link = false; |
668 | if (!gSavedSettings.getBOOL("EditLinkedParts")) | 669 | if (!gSavedSettings.getBOOL("EditLinkedParts")) |
@@ -685,14 +686,44 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
685 | 686 | ||
686 | // Check to see if we can unlink things | 687 | // Check to see if we can unlink things |
687 | bool can_unlink = false; | 688 | bool can_unlink = false; |
688 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && | 689 | if (tool != LLToolFace::getInstance()) |
689 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && | ||
690 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) | ||
691 | { | 690 | { |
692 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | 691 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && |
693 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | 692 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && |
693 | !LLSelectMgr::getInstance()->getSelection()->isAttachment()) | ||
694 | { | 694 | { |
695 | can_unlink = true; | 695 | // LL's viewer unlinks the last linkset selected, |
696 | // regardless of how many linksets or prims are selected total. | ||
697 | // Preserve that behavior when enabling the unlink option. | ||
698 | if (gSavedSettings.getBOOL("EditLinkedParts")) | ||
699 | { | ||
700 | struct f : public LLSelectedNodeFunctor | ||
701 | { | ||
702 | virtual bool apply(LLSelectNode* pNode) | ||
703 | { | ||
704 | // Return the first selection node that is | ||
705 | // 1) not a root prim | ||
706 | // 2) or a root prim that has child prims | ||
707 | // or in other words: any prim that is part of a linkset | ||
708 | return (pNode->getObject() != pNode->getObject()->getRootEdit()) || | ||
709 | (pNode->getObject()->numChildren() != 0); | ||
710 | } | ||
711 | } func; | ||
712 | |||
713 | if (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(&func, TRUE)) | ||
714 | { | ||
715 | // the selection contains at least one prim (child or root) that is part of a linkset | ||
716 | can_unlink = true; | ||
717 | } | ||
718 | } | ||
719 | else | ||
720 | { | ||
721 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | ||
722 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | ||
723 | { | ||
724 | can_unlink = true; | ||
725 | } | ||
726 | } | ||
696 | } | 727 | } |
697 | } | 728 | } |
698 | mBtnUnlink->setEnabled(can_unlink); | 729 | mBtnUnlink->setEnabled(can_unlink); |
@@ -1035,15 +1066,15 @@ void LLFloaterTools::onFocusReceived() | |||
1035 | 1066 | ||
1036 | void LLFloaterTools::updateTreeGrassCombo(bool visible) | 1067 | void LLFloaterTools::updateTreeGrassCombo(bool visible) |
1037 | { | 1068 | { |
1069 | LLTextBox* tree_grass_label = getChild<LLTextBox>("tree_grass_label"); | ||
1038 | if (visible) | 1070 | if (visible) |
1039 | { | 1071 | { |
1040 | LLPCode pcode = LLToolPlacer::getObjectType(); | 1072 | LLPCode pcode = LLToolPlacer::getObjectType(); |
1041 | std::map<std::string, S32>::iterator it, end; | 1073 | std::map<std::string, S32>::iterator it, end; |
1042 | std::string selected; | 1074 | std::string selected; |
1043 | LLTextBox* tree_grass_label = getChild<LLTextBox>("tree_grass_label"); | ||
1044 | if (pcode == LLToolPlacerPanel::sTree) | 1075 | if (pcode == LLToolPlacerPanel::sTree) |
1045 | { | 1076 | { |
1046 | tree_grass_label->setVisible(true); | 1077 | tree_grass_label->setVisible(visible); |
1047 | LLButton* button = getChild<LLButton>("ToolTree"); | 1078 | LLButton* button = getChild<LLButton>("ToolTree"); |
1048 | tree_grass_label->setText(button->getToolTip()); | 1079 | tree_grass_label->setText(button->getToolTip()); |
1049 | 1080 | ||
@@ -1053,7 +1084,7 @@ void LLFloaterTools::updateTreeGrassCombo(bool visible) | |||
1053 | } | 1084 | } |
1054 | else if (pcode == LLToolPlacerPanel::sGrass) | 1085 | else if (pcode == LLToolPlacerPanel::sGrass) |
1055 | { | 1086 | { |
1056 | tree_grass_label->setVisible(true); | 1087 | tree_grass_label->setVisible(visible); |
1057 | LLButton* button = getChild<LLButton>("ToolGrass"); | 1088 | LLButton* button = getChild<LLButton>("ToolGrass"); |
1058 | tree_grass_label->setText(button->getToolTip()); | 1089 | tree_grass_label->setText(button->getToolTip()); |
1059 | 1090 | ||
@@ -1089,6 +1120,7 @@ void LLFloaterTools::updateTreeGrassCombo(bool visible) | |||
1089 | } | 1120 | } |
1090 | 1121 | ||
1091 | mComboTreesGrass->setVisible(visible); | 1122 | mComboTreesGrass->setVisible(visible); |
1123 | tree_grass_label->setVisible(visible); | ||
1092 | } | 1124 | } |
1093 | 1125 | ||
1094 | // static | 1126 | // static |
diff --git a/linden/indra/newview/llfloatertools.h b/linden/indra/newview/llfloatertools.h index 1d78cb2..2bb3fb7 100644 --- a/linden/indra/newview/llfloatertools.h +++ b/linden/indra/newview/llfloatertools.h | |||
@@ -102,7 +102,6 @@ public: | |||
102 | virtual void onFocusReceived(); | 102 | virtual void onFocusReceived(); |
103 | static void setEditTool(void* data); | 103 | static void setEditTool(void* data); |
104 | void saveLastTool(); | 104 | void saveLastTool(); |
105 | |||
106 | private: | 105 | private: |
107 | static void setObjectType( void* data ); | 106 | static void setObjectType( void* data ); |
108 | 107 | ||
diff --git a/linden/indra/newview/llfloaterwater.cpp b/linden/indra/newview/llfloaterwater.cpp index 730c139..32c2b75 100644 --- a/linden/indra/newview/llfloaterwater.cpp +++ b/linden/indra/newview/llfloaterwater.cpp | |||
@@ -169,7 +169,11 @@ void LLFloaterWater::initCallbacks(void) { | |||
169 | 169 | ||
170 | LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap"); | 170 | LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap"); |
171 | textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL); | 171 | textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL); |
172 | childSetCommitCallback("WaterNormalMap", onNormalMapPicked, NULL); | 172 | childSetCommitCallback("WaterNormalMap", onNormalMapPicked, NULL); |
173 | |||
174 | // next/prev buttons | ||
175 | childSetAction("next", onClickNext, this); | ||
176 | childSetAction("prev", onClickPrev, this); | ||
173 | } | 177 | } |
174 | 178 | ||
175 | void LLFloaterWater::onClickHelp(void* data) | 179 | void LLFloaterWater::onClickHelp(void* data) |
@@ -234,6 +238,12 @@ void LLFloaterWater::syncMenu() | |||
234 | 238 | ||
235 | LLWaterParamSet & current_params = param_mgr->mCurParams; | 239 | LLWaterParamSet & current_params = param_mgr->mCurParams; |
236 | 240 | ||
241 | LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo"); | ||
242 | if (comboBox->getSelectedItemLabel() != current_params.mName) | ||
243 | { | ||
244 | comboBox->setSimple(current_params.mName); | ||
245 | } | ||
246 | |||
237 | // blue horizon | 247 | // blue horizon |
238 | param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err); | 248 | param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err); |
239 | 249 | ||
@@ -303,14 +313,26 @@ LLFloaterWater* LLFloaterWater::instance() | |||
303 | } | 313 | } |
304 | void LLFloaterWater::show() | 314 | void LLFloaterWater::show() |
305 | { | 315 | { |
306 | LLFloaterWater* water = instance(); | 316 | if (!sWaterMenu) |
307 | water->syncMenu(); | 317 | { |
308 | 318 | LLFloaterWater* water = instance(); | |
309 | // comment in if you want the menu to rebuild each time | 319 | water->syncMenu(); |
310 | //LLUICtrlFactory::getInstance()->buildFloater(water, "floater_water.xml"); | ||
311 | //water->initCallbacks(); | ||
312 | 320 | ||
313 | water->open(); | 321 | // comment in if you want the menu to rebuild each time |
322 | //LLUICtrlFactory::getInstance()->buildFloater(water, "floater_water.xml"); | ||
323 | //water->initCallbacks(); | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | if (sWaterMenu->getVisible()) | ||
328 | { | ||
329 | sWaterMenu->close(); | ||
330 | } | ||
331 | else | ||
332 | { | ||
333 | sWaterMenu->open(); | ||
334 | } | ||
335 | } | ||
314 | } | 336 | } |
315 | 337 | ||
316 | bool LLFloaterWater::isOpen() | 338 | bool LLFloaterWater::isOpen() |
@@ -726,3 +748,50 @@ void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl, void * userData) | |||
726 | sWaterMenu->syncMenu(); | 748 | sWaterMenu->syncMenu(); |
727 | } | 749 | } |
728 | 750 | ||
751 | void LLFloaterWater::onClickNext(void* user_data) | ||
752 | { | ||
753 | LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); | ||
754 | LLWaterParamSet& currentParams = param_mgr->mCurParams; | ||
755 | |||
756 | // find place of current param | ||
757 | std::map<std::string, LLWaterParamSet>::iterator mIt = | ||
758 | param_mgr->mParamList.find(currentParams.mName); | ||
759 | |||
760 | // if at the end, loop | ||
761 | std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last; | ||
762 | if(mIt == last) | ||
763 | { | ||
764 | mIt = param_mgr->mParamList.begin(); | ||
765 | } | ||
766 | else | ||
767 | { | ||
768 | mIt++; | ||
769 | } | ||
770 | /*param_mgr->mAnimator.mIsRunning = false; | ||
771 | param_mgr->mAnimator.mUseLindenTime = false;*/ | ||
772 | param_mgr->loadPreset(mIt->first, true); | ||
773 | } | ||
774 | |||
775 | void LLFloaterWater::onClickPrev(void* user_data) | ||
776 | { | ||
777 | LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); | ||
778 | LLWaterParamSet & currentParams = param_mgr->mCurParams; | ||
779 | |||
780 | // find place of current param | ||
781 | std::map<std::string, LLWaterParamSet>::iterator mIt = | ||
782 | param_mgr->mParamList.find(currentParams.mName); | ||
783 | |||
784 | // if at the beginning, loop | ||
785 | if(mIt == param_mgr->mParamList.begin()) | ||
786 | { | ||
787 | std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last; | ||
788 | mIt = last; | ||
789 | } | ||
790 | else | ||
791 | { | ||
792 | mIt--; | ||
793 | } | ||
794 | /*param_mgr->mAnimator.mIsRunning = false; | ||
795 | param_mgr->mAnimator.mUseLindenTime = false;*/ | ||
796 | param_mgr->loadPreset(mIt->first, true); | ||
797 | } | ||
diff --git a/linden/indra/newview/llfloaterwater.h b/linden/indra/newview/llfloaterwater.h index 774d5c5..f0944e1 100644 --- a/linden/indra/newview/llfloaterwater.h +++ b/linden/indra/newview/llfloaterwater.h | |||
@@ -128,6 +128,9 @@ private: | |||
128 | static LLFloaterWater* sWaterMenu; | 128 | static LLFloaterWater* sWaterMenu; |
129 | 129 | ||
130 | static std::set<std::string> sDefaultPresets; | 130 | static std::set<std::string> sDefaultPresets; |
131 | |||
132 | static void onClickNext(void* user_data); | ||
133 | static void onClickPrev(void* user_data); | ||
131 | }; | 134 | }; |
132 | 135 | ||
133 | 136 | ||
diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp index 98b3157..5468ca4 100644 --- a/linden/indra/newview/llfloaterwindlight.cpp +++ b/linden/indra/newview/llfloaterwindlight.cpp | |||
@@ -47,6 +47,7 @@ | |||
47 | #include "llcombobox.h" | 47 | #include "llcombobox.h" |
48 | #include "lllineeditor.h" | 48 | #include "lllineeditor.h" |
49 | #include "llfloaterdaycycle.h" | 49 | #include "llfloaterdaycycle.h" |
50 | #include "lltabcontainer.h" | ||
50 | #include "llboost.h" | 51 | #include "llboost.h" |
51 | 52 | ||
52 | #include "v4math.h" | 53 | #include "v4math.h" |
@@ -61,6 +62,7 @@ | |||
61 | 62 | ||
62 | #undef max | 63 | #undef max |
63 | 64 | ||
65 | |||
64 | LLFloaterWindLight* LLFloaterWindLight::sWindLight = NULL; | 66 | LLFloaterWindLight* LLFloaterWindLight::sWindLight = NULL; |
65 | 67 | ||
66 | std::set<std::string> LLFloaterWindLight::sDefaultPresets; | 68 | std::set<std::string> LLFloaterWindLight::sDefaultPresets; |
@@ -228,6 +230,10 @@ void LLFloaterWindLight::initCallbacks(void) { | |||
228 | // Dome | 230 | // Dome |
229 | childSetCommitCallback("WLGamma", onFloatControlMoved, ¶m_mgr->mWLGamma); | 231 | childSetCommitCallback("WLGamma", onFloatControlMoved, ¶m_mgr->mWLGamma); |
230 | childSetCommitCallback("WLStarAlpha", onStarAlphaMoved, NULL); | 232 | childSetCommitCallback("WLStarAlpha", onStarAlphaMoved, NULL); |
233 | |||
234 | // next/prev buttons | ||
235 | childSetAction("next", onClickNext, this); | ||
236 | childSetAction("prev", onClickPrev, this); | ||
231 | } | 237 | } |
232 | 238 | ||
233 | void LLFloaterWindLight::onClickHelp(void* data) | 239 | void LLFloaterWindLight::onClickHelp(void* data) |
@@ -314,6 +320,15 @@ void LLFloaterWindLight::syncMenu() | |||
314 | LLWLParamSet& currentParams = param_mgr->mCurParams; | 320 | LLWLParamSet& currentParams = param_mgr->mCurParams; |
315 | //std::map<std::string, LLVector4> & currentParams = param_mgr->mCurParams.mParamValues; | 321 | //std::map<std::string, LLVector4> & currentParams = param_mgr->mCurParams.mParamValues; |
316 | 322 | ||
323 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
324 | // Fixes LL "bug" (preset name isn't kept synchronized) | ||
325 | LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo"); | ||
326 | if (comboBox->getSelectedItemLabel() != currentParams.mName) | ||
327 | { | ||
328 | comboBox->setSimple(currentParams.mName); | ||
329 | } | ||
330 | // [/RLVa:KB] | ||
331 | |||
317 | // blue horizon | 332 | // blue horizon |
318 | param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err); | 333 | param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err); |
319 | childSetValue("WLBlueHorizonR", param_mgr->mBlueHorizon.r / 2.0); | 334 | childSetValue("WLBlueHorizonR", param_mgr->mBlueHorizon.r / 2.0); |
@@ -451,14 +466,26 @@ LLFloaterWindLight* LLFloaterWindLight::instance() | |||
451 | } | 466 | } |
452 | void LLFloaterWindLight::show() | 467 | void LLFloaterWindLight::show() |
453 | { | 468 | { |
454 | LLFloaterWindLight* windLight = instance(); | 469 | if (!sWindLight) |
455 | windLight->syncMenu(); | 470 | { |
456 | 471 | LLFloaterWindLight* windLight = instance(); | |
457 | // comment in if you want the menu to rebuild each time | 472 | windLight->syncMenu(); |
458 | //LLUICtrlFactory::getInstance()->buildFloater(windLight, "floater_windlight_options.xml"); | ||
459 | //windLight->initCallbacks(); | ||
460 | 473 | ||
461 | windLight->open(); | 474 | // comment in if you want the menu to rebuild each time |
475 | //LLUICtrlFactory::getInstance()->buildFloater(windLight, "floater_windlight_options.xml"); | ||
476 | //windLight->initCallbacks(); | ||
477 | } | ||
478 | else | ||
479 | { | ||
480 | if (sWindLight->getVisible()) | ||
481 | { | ||
482 | sWindLight->close(); | ||
483 | } | ||
484 | else | ||
485 | { | ||
486 | sWindLight->open(); | ||
487 | } | ||
488 | } | ||
462 | } | 489 | } |
463 | 490 | ||
464 | bool LLFloaterWindLight::isOpen() | 491 | bool LLFloaterWindLight::isOpen() |
@@ -993,3 +1020,61 @@ void LLFloaterWindLight::deactivateAnimator() | |||
993 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | 1020 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; |
994 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | 1021 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; |
995 | } | 1022 | } |
1023 | |||
1024 | void LLFloaterWindLight::onClickNext(void* user_data) | ||
1025 | { | ||
1026 | LLWLParamManager * param_mgr = LLWLParamManager::instance(); | ||
1027 | LLWLParamSet& currentParams = param_mgr->mCurParams; | ||
1028 | |||
1029 | // find place of current param | ||
1030 | std::map<std::string, LLWLParamSet>::iterator mIt = | ||
1031 | param_mgr->mParamList.find(currentParams.mName); | ||
1032 | |||
1033 | // if at the end, loop | ||
1034 | std::map<std::string, LLWLParamSet>::iterator last = param_mgr->mParamList.end(); --last; | ||
1035 | if(mIt == last) | ||
1036 | { | ||
1037 | mIt = param_mgr->mParamList.begin(); | ||
1038 | } | ||
1039 | else | ||
1040 | { | ||
1041 | mIt++; | ||
1042 | } | ||
1043 | param_mgr->mAnimator.mIsRunning = false; | ||
1044 | param_mgr->mAnimator.mUseLindenTime = false; | ||
1045 | param_mgr->loadPreset(mIt->first, true); | ||
1046 | } | ||
1047 | |||
1048 | void LLFloaterWindLight::onClickPrev(void* user_data) | ||
1049 | { | ||
1050 | LLWLParamManager * param_mgr = LLWLParamManager::instance(); | ||
1051 | LLWLParamSet& currentParams = param_mgr->mCurParams; | ||
1052 | |||
1053 | // find place of current param | ||
1054 | std::map<std::string, LLWLParamSet>::iterator mIt = | ||
1055 | param_mgr->mParamList.find(currentParams.mName); | ||
1056 | |||
1057 | // if at the beginning, loop | ||
1058 | if(mIt == param_mgr->mParamList.begin()) | ||
1059 | { | ||
1060 | std::map<std::string, LLWLParamSet>::iterator last = param_mgr->mParamList.end(); --last; | ||
1061 | mIt = last; | ||
1062 | } | ||
1063 | else | ||
1064 | { | ||
1065 | mIt--; | ||
1066 | } | ||
1067 | param_mgr->mAnimator.mIsRunning = false; | ||
1068 | param_mgr->mAnimator.mUseLindenTime = false; | ||
1069 | param_mgr->loadPreset(mIt->first, true); | ||
1070 | } | ||
1071 | |||
1072 | //static | ||
1073 | void LLFloaterWindLight::selectTab(std::string tab_name) | ||
1074 | { | ||
1075 | if (!tab_name.empty()) | ||
1076 | { | ||
1077 | LLTabContainer* tabs = LLFloaterWindLight::instance()->getChild<LLTabContainer>("WindLight Tabs"); | ||
1078 | tabs->selectTabByName(tab_name); | ||
1079 | } | ||
1080 | } | ||
diff --git a/linden/indra/newview/llfloaterwindlight.h b/linden/indra/newview/llfloaterwindlight.h index 3447caa..23e3056 100644 --- a/linden/indra/newview/llfloaterwindlight.h +++ b/linden/indra/newview/llfloaterwindlight.h | |||
@@ -132,11 +132,16 @@ public: | |||
132 | /// turn off animated skies | 132 | /// turn off animated skies |
133 | static void deactivateAnimator(); | 133 | static void deactivateAnimator(); |
134 | 134 | ||
135 | static void selectTab(std::string tab_name); | ||
136 | |||
135 | private: | 137 | private: |
136 | // one instance on the inside | 138 | // one instance on the inside |
137 | static LLFloaterWindLight* sWindLight; | 139 | static LLFloaterWindLight* sWindLight; |
138 | 140 | ||
139 | static std::set<std::string> sDefaultPresets; | 141 | static std::set<std::string> sDefaultPresets; |
142 | |||
143 | static void onClickNext(void* user_data); | ||
144 | static void onClickPrev(void* user_data); | ||
140 | }; | 145 | }; |
141 | 146 | ||
142 | 147 | ||
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp index 213faf0..9257349 100644 --- a/linden/indra/newview/llfloaterworldmap.cpp +++ b/linden/indra/newview/llfloaterworldmap.cpp | |||
@@ -279,6 +279,13 @@ void LLFloaterWorldMap::onClose(bool app_quitting) | |||
279 | // static | 279 | // static |
280 | void LLFloaterWorldMap::show(void*, BOOL center_on_target) | 280 | void LLFloaterWorldMap::show(void*, BOOL center_on_target) |
281 | { | 281 | { |
282 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
283 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP)) | ||
284 | { | ||
285 | return; | ||
286 | } | ||
287 | // [/RLVa:KB] | ||
288 | |||
282 | BOOL was_visible = gFloaterWorldMap->getVisible(); | 289 | BOOL was_visible = gFloaterWorldMap->getVisible(); |
283 | 290 | ||
284 | gFloaterWorldMap->mIsClosing = FALSE; | 291 | gFloaterWorldMap->mIsClosing = FALSE; |
@@ -326,6 +333,7 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target) | |||
326 | 333 | ||
327 | // If nothing is being tracked, set flag so the user position will be found | 334 | // If nothing is being tracked, set flag so the user position will be found |
328 | gFloaterWorldMap->mSetToUserPosition = ( LLTracker::getTrackingStatus() == LLTracker::TRACKING_NOTHING ); | 335 | gFloaterWorldMap->mSetToUserPosition = ( LLTracker::getTrackingStatus() == LLTracker::TRACKING_NOTHING ); |
336 | |||
329 | } | 337 | } |
330 | 338 | ||
331 | if (center_on_target) | 339 | if (center_on_target) |
@@ -452,7 +460,8 @@ void LLFloaterWorldMap::draw() | |||
452 | childSetEnabled("Go Home", enable_go_home); | 460 | childSetEnabled("Go Home", enable_go_home); |
453 | 461 | ||
454 | updateLocation(); | 462 | updateLocation(); |
455 | 463 | ||
464 | |||
456 | LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); | 465 | LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); |
457 | if (LLTracker::TRACKING_AVATAR == tracking_status) | 466 | if (LLTracker::TRACKING_AVATAR == tracking_status) |
458 | { | 467 | { |
@@ -498,7 +507,6 @@ void LLFloaterWorldMap::draw() | |||
498 | centerOnTarget(TRUE); | 507 | centerOnTarget(TRUE); |
499 | } | 508 | } |
500 | 509 | ||
501 | childSetEnabled("Teleport", (BOOL)tracking_status); | ||
502 | // childSetEnabled("Clear", (BOOL)tracking_status); | 510 | // childSetEnabled("Clear", (BOOL)tracking_status); |
503 | childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation); | 511 | childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation); |
504 | childSetEnabled("copy_slurl", (mSLURL.size() > 0) ); | 512 | childSetEnabled("copy_slurl", (mSLURL.size() > 0) ); |
@@ -650,7 +658,10 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) | |||
650 | F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS ); | 658 | F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS ); |
651 | F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS ); | 659 | F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS ); |
652 | std::string full_name = llformat("%s (%d, %d, %d)", | 660 | std::string full_name = llformat("%s (%d, %d, %d)", |
653 | sim_name.c_str(), | 661 | // sim_name.c_str(), |
662 | // [RLVa:KB] - Alternate: Snowglobe-1.0 | Checked: 2009-07-04 (RLVa-1.0.0a) | ||
663 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? sim_name.c_str() : rlv_handler_t::cstrHiddenRegion.c_str(), | ||
664 | // [/RLVa:KB] | ||
654 | llround(region_x), | 665 | llround(region_x), |
655 | llround(region_y), | 666 | llround(region_y), |
656 | llround((F32)pos_global.mdV[VZ])); | 667 | llround((F32)pos_global.mdV[VZ])); |
@@ -704,6 +715,14 @@ void LLFloaterWorldMap::updateLocation() | |||
704 | 715 | ||
705 | // Set the current SLURL | 716 | // Set the current SLURL |
706 | mSLURL = LLURLDispatcher::buildSLURL(agent_sim_name, agent_x, agent_y, agent_z); | 717 | mSLURL = LLURLDispatcher::buildSLURL(agent_sim_name, agent_x, agent_y, agent_z); |
718 | |||
719 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
720 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
721 | { | ||
722 | childSetValue("location", rlv_handler_t::cstrHiddenRegion); | ||
723 | mSLURL.clear(); | ||
724 | } | ||
725 | // [/RLVa:KB] | ||
707 | } | 726 | } |
708 | } | 727 | } |
709 | 728 | ||
@@ -746,13 +765,21 @@ void LLFloaterWorldMap::updateLocation() | |||
746 | { // Empty SLURL will disable the "Copy SLURL to clipboard" button | 765 | { // Empty SLURL will disable the "Copy SLURL to clipboard" button |
747 | mSLURL = ""; | 766 | mSLURL = ""; |
748 | } | 767 | } |
768 | |||
769 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
770 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
771 | { | ||
772 | childSetValue("location", rlv_handler_t::cstrHiddenRegion); | ||
773 | mSLURL.clear(); | ||
774 | } | ||
775 | // [/RLVa:KB] | ||
749 | } | 776 | } |
750 | } | 777 | } |
751 | 778 | ||
752 | void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord) | 779 | void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord) |
753 | { | 780 | { |
754 | LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name); | 781 | LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name); |
755 | z_coord = llclamp(z_coord, 0, 4096); | 782 | z_coord = llclamp(z_coord, 0, 1000); |
756 | if (sim_info) | 783 | if (sim_info) |
757 | { | 784 | { |
758 | LLVector3 local_pos; | 785 | LLVector3 local_pos; |
@@ -1062,6 +1089,7 @@ void LLFloaterWorldMap::onPanBtn( void* userdata ) | |||
1062 | void LLFloaterWorldMap::onGoHome(void*) | 1089 | void LLFloaterWorldMap::onGoHome(void*) |
1063 | { | 1090 | { |
1064 | gAgent.teleportHomeConfirm(); | 1091 | gAgent.teleportHomeConfirm(); |
1092 | gFloaterWorldMap->close(); | ||
1065 | } | 1093 | } |
1066 | 1094 | ||
1067 | 1095 | ||
diff --git a/linden/indra/newview/llfloaterworldmap.h b/linden/indra/newview/llfloaterworldmap.h index b0e72f2..2153921 100644 --- a/linden/indra/newview/llfloaterworldmap.h +++ b/linden/indra/newview/llfloaterworldmap.h | |||
@@ -68,6 +68,8 @@ public: | |||
68 | static void toggle(void*); | 68 | static void toggle(void*); |
69 | static void hide(void*); | 69 | static void hide(void*); |
70 | 70 | ||
71 | static void addServer(const std::string& server); | ||
72 | |||
71 | /*virtual*/ void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE ); | 73 | /*virtual*/ void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE ); |
72 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); | 74 | /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); |
73 | /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); | 75 | /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); |
@@ -101,6 +103,7 @@ public: | |||
101 | void clearLocationSelection(BOOL clear_ui = FALSE); | 103 | void clearLocationSelection(BOOL clear_ui = FALSE); |
102 | void clearAvatarSelection(BOOL clear_ui = FALSE); | 104 | void clearAvatarSelection(BOOL clear_ui = FALSE); |
103 | void clearLandmarkSelection(BOOL clear_ui = FALSE); | 105 | void clearLandmarkSelection(BOOL clear_ui = FALSE); |
106 | void clearGridSelection(BOOL clear_ui = FALSE); | ||
104 | 107 | ||
105 | // Adjust the maximally zoomed out limit of the zoom slider so you can | 108 | // Adjust the maximally zoomed out limit of the zoom slider so you can |
106 | // see the whole world, plus a little. | 109 | // see the whole world, plus a little. |
@@ -115,8 +118,9 @@ public: | |||
115 | protected: | 118 | protected: |
116 | static void onPanBtn( void* userdata ); | 119 | static void onPanBtn( void* userdata ); |
117 | 120 | ||
118 | static void onGoHome(void* data); | 121 | static void onGridManager(void* data); |
119 | 122 | ||
123 | static void onGoHome(void* data); | ||
120 | static void onLandmarkComboPrearrange( LLUICtrl* ctrl, void* data ); | 124 | static void onLandmarkComboPrearrange( LLUICtrl* ctrl, void* data ); |
121 | static void onLandmarkComboCommit( LLUICtrl* ctrl, void* data ); | 125 | static void onLandmarkComboCommit( LLUICtrl* ctrl, void* data ); |
122 | 126 | ||
@@ -158,6 +162,7 @@ protected: | |||
158 | static void onLocationCommit( void* userdata ); | 162 | static void onLocationCommit( void* userdata ); |
159 | static void onCommitLocation( LLUICtrl* ctrl, void* userdata ); | 163 | static void onCommitLocation( LLUICtrl* ctrl, void* userdata ); |
160 | static void onCommitSearchResult( LLUICtrl* ctrl, void* userdata ); | 164 | static void onCommitSearchResult( LLUICtrl* ctrl, void* userdata ); |
165 | static void onSelectServer(LLUICtrl*, void* userdata); | ||
161 | 166 | ||
162 | void cacheLandmarkPosition(); | 167 | void cacheLandmarkPosition(); |
163 | 168 | ||
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index 8e010b8..e87ac0c 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp | |||
@@ -282,7 +282,39 @@ void LLFolderViewItem::refreshFromListener() | |||
282 | { | 282 | { |
283 | if(mListener) | 283 | if(mListener) |
284 | { | 284 | { |
285 | //Super crazy hack to build the creator search label - RK | ||
286 | LLInventoryItem* item = gInventory.getItem(mListener->getUUID()); | ||
287 | std::string creator_name; | ||
288 | if(item) | ||
289 | { | ||
290 | if(item->getCreatorUUID().notNull()) | ||
291 | { | ||
292 | gCacheName->getFullName(item->getCreatorUUID(), creator_name); | ||
293 | } | ||
294 | } | ||
295 | mLabelCreator = creator_name; | ||
296 | /*if(creator_name == "(Loading...)") | ||
297 | mLabelCreator = ""; | ||
298 | else | ||
299 | mLabelCreator = creator_name;*/ | ||
300 | |||
301 | //Label for desc search | ||
302 | std::string desc; | ||
303 | if(item) | ||
304 | { | ||
305 | if(!item->getDescription().empty()) | ||
306 | { | ||
307 | desc = item->getDescription(); | ||
308 | } | ||
309 | } | ||
310 | mLabelDesc = desc; | ||
311 | |||
312 | //Label for name search | ||
285 | mLabel = mListener->getDisplayName(); | 313 | mLabel = mListener->getDisplayName(); |
314 | |||
315 | //Build label for combined search - RK | ||
316 | mLabelAll = mLabel + " " + mLabelCreator + " " + mLabelDesc; | ||
317 | |||
286 | setIcon(mListener->getIcon()); | 318 | setIcon(mListener->getIcon()); |
287 | time_t creation_date = mListener->getCreationDate(); | 319 | time_t creation_date = mListener->getCreationDate(); |
288 | if (mCreationDate != creation_date) | 320 | if (mCreationDate != creation_date) |
@@ -300,20 +332,55 @@ void LLFolderViewItem::refresh() | |||
300 | refreshFromListener(); | 332 | refreshFromListener(); |
301 | 333 | ||
302 | std::string searchable_label(mLabel); | 334 | std::string searchable_label(mLabel); |
335 | std::string searchable_label_creator(mLabelCreator); | ||
336 | std::string searchable_label_desc(mLabelDesc); | ||
337 | std::string searchable_label_all(mLabelAll); | ||
338 | |||
339 | //add the (no modify), (no transfer) etc stuff to each label. | ||
303 | searchable_label.append(mLabelSuffix); | 340 | searchable_label.append(mLabelSuffix); |
341 | searchable_label_creator.append(mLabelSuffix); | ||
342 | searchable_label_desc.append(mLabelSuffix); | ||
343 | searchable_label_all.append(mLabelSuffix); | ||
344 | |||
345 | //all labels need to be uppercase. | ||
304 | LLStringUtil::toUpper(searchable_label); | 346 | LLStringUtil::toUpper(searchable_label); |
347 | LLStringUtil::toUpper(searchable_label_creator); | ||
348 | LLStringUtil::toUpper(searchable_label_desc); | ||
349 | LLStringUtil::toUpper(searchable_label_all); | ||
305 | 350 | ||
306 | if (mSearchableLabel.compare(searchable_label)) | 351 | if (mSearchableLabel.compare(searchable_label) || |
352 | mSearchableLabelCreator.compare(searchable_label_creator) || | ||
353 | mSearchableLabelDesc.compare(searchable_label_creator)) | ||
307 | { | 354 | { |
308 | mSearchableLabel.assign(searchable_label); | 355 | mSearchableLabel.assign(searchable_label); |
356 | mSearchableLabelCreator.assign(searchable_label_creator); | ||
357 | mSearchableLabelDesc.assign(searchable_label_desc); | ||
358 | mSearchableLabelAll.assign(searchable_label_all); | ||
359 | |||
309 | dirtyFilter(); | 360 | dirtyFilter(); |
310 | // some part of label has changed, so overall width has potentially changed | 361 | //some part of label has changed, so overall width has potentially changed |
311 | if (mParentFolder) | 362 | if (mParentFolder) |
312 | { | ||
313 | mParentFolder->requestArrange(); | 363 | mParentFolder->requestArrange(); |
314 | } | 364 | } |
365 | |||
366 | /*if(mSearchableLabelCreator.compare(searchable_label_creator)) | ||
367 | { | ||
368 | mSearchableLabelCreator.assign(searchable_label_creator); | ||
369 | |||
370 | dirtyFilter(); | ||
371 | if(mParentFolder) | ||
372 | mParentFolder->requestArrange(); | ||
315 | } | 373 | } |
316 | 374 | ||
375 | if(mSearchableLabelDesc.compare(searchable_label_desc)) | ||
376 | { | ||
377 | mSearchableLabelDesc.assign(searchable_label_desc); | ||
378 | |||
379 | dirtyFilter(); | ||
380 | if(mParentFolder) | ||
381 | mParentFolder->requestArrange(); | ||
382 | }*/ | ||
383 | |||
317 | S32 label_width = sFont->getWidth(mLabel); | 384 | S32 label_width = sFont->getWidth(mLabel); |
318 | if( mLabelSuffix.size() ) | 385 | if( mLabelSuffix.size() ) |
319 | { | 386 | { |
@@ -587,9 +654,16 @@ void LLFolderViewItem::rename(const std::string& new_name) | |||
587 | } | 654 | } |
588 | } | 655 | } |
589 | 656 | ||
590 | const std::string& LLFolderViewItem::getSearchableLabel() const | 657 | const std::string& LLFolderViewItem::getSearchableLabel(U32 search_type = 0) const |
591 | { | 658 | { |
592 | return mSearchableLabel; | 659 | if(search_type == 3) |
660 | return mSearchableLabelAll; | ||
661 | else if(search_type == 2) | ||
662 | return mSearchableLabelDesc; | ||
663 | else if(search_type == 1) | ||
664 | return mSearchableLabelCreator; | ||
665 | else | ||
666 | return mSearchableLabel; | ||
593 | } | 667 | } |
594 | 668 | ||
595 | const std::string& LLFolderViewItem::getName( void ) const | 669 | const std::string& LLFolderViewItem::getName( void ) const |
@@ -4524,11 +4598,13 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item) | |||
4524 | } | 4598 | } |
4525 | LLFolderViewEventListener* listener = item->getListener(); | 4599 | LLFolderViewEventListener* listener = item->getListener(); |
4526 | const LLUUID& item_id = listener->getUUID(); | 4600 | const LLUUID& item_id = listener->getUUID(); |
4527 | mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; | 4601 | |
4602 | U32 search_type = gSavedSettings.getU32("InventorySearchType"); | ||
4603 | mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel(search_type).find(mFilterSubString) : std::string::npos; | ||
4528 | BOOL passed = (listener->getNInventoryType() & mFilterOps.mFilterTypes || listener->getNInventoryType() == LLInventoryType::NIT_NONE) | 4604 | BOOL passed = (listener->getNInventoryType() & mFilterOps.mFilterTypes || listener->getNInventoryType() == LLInventoryType::NIT_NONE) |
4529 | && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) | 4605 | && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) |
4530 | && (mFilterWorn == false || gAgent.isWearingItem(item_id) || | 4606 | && (mFilterWorn == false || gAgent.isWearingItem(item_id) || |
4531 | gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id)) | 4607 | (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id))) |
4532 | && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) | 4608 | && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) |
4533 | && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); | 4609 | && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); |
4534 | return passed; | 4610 | return passed; |
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h index b46b5c8..5e6902d 100644 --- a/linden/indra/newview/llfolderview.h +++ b/linden/indra/newview/llfolderview.h | |||
@@ -339,6 +339,16 @@ protected: | |||
339 | 339 | ||
340 | std::string mLabel; | 340 | std::string mLabel; |
341 | std::string mSearchableLabel; | 341 | std::string mSearchableLabel; |
342 | |||
343 | std::string mLabelCreator; | ||
344 | std::string mSearchableLabelCreator; | ||
345 | |||
346 | std::string mLabelDesc; | ||
347 | std::string mSearchableLabelDesc; | ||
348 | |||
349 | std::string mLabelAll; | ||
350 | std::string mSearchableLabelAll; | ||
351 | |||
342 | std::string mType; | 352 | std::string mType; |
343 | S32 mLabelWidth; | 353 | S32 mLabelWidth; |
344 | U32 mCreationDate; | 354 | U32 mCreationDate; |
@@ -465,7 +475,7 @@ public: | |||
465 | // viewed. This method will ask the viewed object itself. | 475 | // viewed. This method will ask the viewed object itself. |
466 | const std::string& getName( void ) const; | 476 | const std::string& getName( void ) const; |
467 | 477 | ||
468 | const std::string& getSearchableLabel( void ) const; | 478 | const std::string& getSearchableLabel( U32 search_type ) const; |
469 | 479 | ||
470 | // This method returns the label displayed on the view. This | 480 | // This method returns the label displayed on the view. This |
471 | // method was primarily added to allow sorting on the folder | 481 | // method was primarily added to allow sorting on the folder |
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp index 91beb80..7213e24 100644 --- a/linden/indra/newview/llglsandbox.cpp +++ b/linden/indra/newview/llglsandbox.cpp | |||
@@ -167,6 +167,13 @@ extern BOOL gDebugSelect; | |||
167 | // Returns true if you got at least one object | 167 | // Returns true if you got at least one object |
168 | void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) | 168 | void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) |
169 | { | 169 | { |
170 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
171 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
172 | { | ||
173 | return; | ||
174 | } | ||
175 | // [/RLVa:KB] | ||
176 | |||
170 | LLVector3 av_pos = gAgent.getPositionAgent(); | 177 | LLVector3 av_pos = gAgent.getPositionAgent(); |
171 | F32 select_dist_squared = gSavedSettings.getF32("MaxSelectDistance"); | 178 | F32 select_dist_squared = gSavedSettings.getF32("MaxSelectDistance"); |
172 | select_dist_squared = select_dist_squared * select_dist_squared; | 179 | select_dist_squared = select_dist_squared * select_dist_squared; |
@@ -231,6 +238,27 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) | |||
231 | LLViewerCamera::getInstance()->setFar(new_far); | 238 | LLViewerCamera::getInstance()->setFar(new_far); |
232 | LLViewerCamera::getInstance()->setNear(new_near); | 239 | LLViewerCamera::getInstance()->setNear(new_near); |
233 | } | 240 | } |
241 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
242 | if (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) | ||
243 | { | ||
244 | // We'll allow drag selection under fartouch, but only within the fartouch range | ||
245 | // (just copy/paste the code above us to make that work, thank you Lindens!) | ||
246 | LLVector3 relative_av_pos = av_pos; | ||
247 | relative_av_pos -= LLViewerCamera::getInstance()->getOrigin(); | ||
248 | |||
249 | F32 new_far = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() + 1.5f; | ||
250 | F32 new_near = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() - 1.5f; | ||
251 | |||
252 | new_near = llmax(new_near, 0.1f); | ||
253 | |||
254 | LLViewerCamera::getInstance()->setFar(new_far); | ||
255 | LLViewerCamera::getInstance()->setNear(new_near); | ||
256 | |||
257 | // Usurp these two | ||
258 | limit_select_distance = TRUE; | ||
259 | select_dist_squared = 1.5f * 1.5f; | ||
260 | } | ||
261 | // [/RLVa:KB] | ||
234 | LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, | 262 | LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, |
235 | center_x-width/2, center_y-height/2, width, height, | 263 | center_x-width/2, center_y-height/2, width, height, |
236 | limit_select_distance); | 264 | limit_select_distance); |
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp index dd2b562..44ef594 100644 --- a/linden/indra/newview/llhoverview.cpp +++ b/linden/indra/newview/llhoverview.cpp | |||
@@ -245,14 +245,25 @@ void LLHoverView::updateText() | |||
245 | LLNameValue* lastname = hit_object->getNVPair("LastName"); | 245 | LLNameValue* lastname = hit_object->getNVPair("LastName"); |
246 | if (firstname && lastname) | 246 | if (firstname && lastname) |
247 | { | 247 | { |
248 | if (title) | 248 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) |
249 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
249 | { | 250 | { |
250 | line.append(title->getString()); | 251 | line = gRlvHandler.getAnonym(line.append(firstname->getString()).append(1, ' ').append(lastname->getString())); |
252 | } | ||
253 | else | ||
254 | { | ||
255 | // [/RLVa:KB] | ||
256 | if (title) | ||
257 | { | ||
258 | line.append(title->getString()); | ||
259 | line.append(1, ' '); | ||
260 | } | ||
261 | line.append(firstname->getString()); | ||
251 | line.append(1, ' '); | 262 | line.append(1, ' '); |
263 | line.append(lastname->getString()); | ||
264 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
252 | } | 265 | } |
253 | line.append(firstname->getString()); | 266 | // [/RLVa:KB] |
254 | line.append(1, ' '); | ||
255 | line.append(lastname->getString()); | ||
256 | } | 267 | } |
257 | else | 268 | else |
258 | { | 269 | { |
@@ -308,6 +319,13 @@ void LLHoverView::updateText() | |||
308 | } | 319 | } |
309 | else if(gCacheName->getFullName(owner, name)) | 320 | else if(gCacheName->getFullName(owner, name)) |
310 | { | 321 | { |
322 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
323 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
324 | { | ||
325 | name = gRlvHandler.getAnonym(name); | ||
326 | } | ||
327 | // [/RLVa:KB] | ||
328 | |||
311 | line.append(name); | 329 | line.append(name); |
312 | } | 330 | } |
313 | else | 331 | else |
@@ -469,7 +487,10 @@ void LLHoverView::updateText() | |||
469 | line.append(LLTrans::getString("TooltipLand")); | 487 | line.append(LLTrans::getString("TooltipLand")); |
470 | if (hover_parcel) | 488 | if (hover_parcel) |
471 | { | 489 | { |
472 | line.append(hover_parcel->getName()); | 490 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-0.2.0b |
491 | line.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? hover_parcel->getName() : rlv_handler_t::cstrHiddenParcel ); | ||
492 | // [/RLVa:KB] | ||
493 | //line.append(hover_parcel->getName()); | ||
473 | } | 494 | } |
474 | mText.push_back(line); | 495 | mText.push_back(line); |
475 | 496 | ||
@@ -498,7 +519,10 @@ void LLHoverView::updateText() | |||
498 | } | 519 | } |
499 | else if(gCacheName->getFullName(owner, name)) | 520 | else if(gCacheName->getFullName(owner, name)) |
500 | { | 521 | { |
501 | line.append(name); | 522 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.0b |
523 | line.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? name : gRlvHandler.getAnonym(name)); | ||
524 | // [/RLVa:KB] | ||
525 | //line.append(name); | ||
502 | } | 526 | } |
503 | else | 527 | else |
504 | { | 528 | { |
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp index 2014007..661a786 100644 --- a/linden/indra/newview/llhudtext.cpp +++ b/linden/indra/newview/llhudtext.cpp | |||
@@ -566,6 +566,30 @@ void LLHUDText::renderText(BOOL for_select) | |||
566 | 566 | ||
567 | void LLHUDText::setStringUTF8(const std::string &wtext) | 567 | void LLHUDText::setStringUTF8(const std::string &wtext) |
568 | { | 568 | { |
569 | // [RLVa:KB] - Checked: 2009-07-09 (RLVa-1.0.0f) | ||
570 | // NOTE: setString() is only called for debug beacons and the floating name tags (which we don't want to censor | ||
571 | // because you'd see "(Region hidden) LastName" if you happen to go to a sim who's name is your first name :p | ||
572 | if (rlv_handler_t::isEnabled()) | ||
573 | { | ||
574 | std::string text(wtext); | ||
575 | |||
576 | if (gRlvHandler.canShowHoverText(mSourceObject)) | ||
577 | { | ||
578 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
579 | gRlvHandler.filterLocation(text); | ||
580 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
581 | gRlvHandler.filterNames(text); | ||
582 | } | ||
583 | else | ||
584 | { | ||
585 | text = ""; | ||
586 | } | ||
587 | |||
588 | setString(utf8str_to_wstring(text)); | ||
589 | return; | ||
590 | } | ||
591 | // [/RLVa:KB] | ||
592 | |||
569 | setString(utf8str_to_wstring(wtext)); | 593 | setString(utf8str_to_wstring(wtext)); |
570 | } | 594 | } |
571 | 595 | ||
@@ -1161,3 +1185,18 @@ F32 LLHUDText::LLHUDTextSegment::getWidth(const LLFontGL* font) | |||
1161 | return width; | 1185 | return width; |
1162 | } | 1186 | } |
1163 | } | 1187 | } |
1188 | |||
1189 | // [RLVa:KB] - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
1190 | void LLHUDText::refreshAllObjectText() | ||
1191 | { | ||
1192 | for (TextObjectIterator itText = sTextObjects.begin(); itText != sTextObjects.end(); itText++) | ||
1193 | { | ||
1194 | LLHUDText* pText = *itText; | ||
1195 | if ( (pText) && (!pText->mObjText.empty() && ("" != pText->mObjText) ) && | ||
1196 | (pText->mSourceObject) && (LL_PCODE_VOLUME == pText->mSourceObject->getPCode()) ) | ||
1197 | { | ||
1198 | pText->setStringUTF8(pText->mObjText); | ||
1199 | } | ||
1200 | } | ||
1201 | } | ||
1202 | // [/RLVa:KB] | ||
diff --git a/linden/indra/newview/llhudtext.h b/linden/indra/newview/llhudtext.h index 645cbc2..297e4d5 100644 --- a/linden/indra/newview/llhudtext.h +++ b/linden/indra/newview/llhudtext.h | |||
@@ -131,6 +131,11 @@ public: | |||
131 | static void addPickable(std::set<LLViewerObject*> &pick_list); | 131 | static void addPickable(std::set<LLViewerObject*> &pick_list); |
132 | static void reshape(); | 132 | static void reshape(); |
133 | static void setDisplayText(BOOL flag) { sDisplayText = flag ; } | 133 | static void setDisplayText(BOOL flag) { sDisplayText = flag ; } |
134 | // [RLVa:KB] - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
135 | const std::string& getObjectText() const { return mObjText; } | ||
136 | void setObjectText(const std::string &utf8string) { mObjText = utf8string; } | ||
137 | static void refreshAllObjectText(); | ||
138 | // [/RLVa:KB] | ||
134 | protected: | 139 | protected: |
135 | LLHUDText(const U8 type); | 140 | LLHUDText(const U8 type); |
136 | 141 | ||
@@ -176,6 +181,9 @@ private: | |||
176 | EVertAlignment mVertAlignment; | 181 | EVertAlignment mVertAlignment; |
177 | S32 mLOD; | 182 | S32 mLOD; |
178 | BOOL mHidden; | 183 | BOOL mHidden; |
184 | // [RLVa:KB] - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
185 | std::string mObjText; | ||
186 | // [/RLVa:KB] | ||
179 | 187 | ||
180 | static BOOL sDisplayText ; | 188 | static BOOL sDisplayText ; |
181 | static std::set<LLPointer<LLHUDText> > sTextObjects; | 189 | static std::set<LLPointer<LLHUDText> > sTextObjects; |
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp index 63d7907..9368e4e 100644 --- a/linden/indra/newview/llimpanel.cpp +++ b/linden/indra/newview/llimpanel.cpp | |||
@@ -74,6 +74,7 @@ | |||
74 | #include "llhttpclient.h" | 74 | #include "llhttpclient.h" |
75 | #include "llmutelist.h" | 75 | #include "llmutelist.h" |
76 | #include "llstylemap.h" | 76 | #include "llstylemap.h" |
77 | #include <sys/stat.h> | ||
77 | 78 | ||
78 | // | 79 | // |
79 | // Constants | 80 | // Constants |
@@ -1279,6 +1280,10 @@ BOOL LLFloaterIMPanel::postBuild() | |||
1279 | requires<LLLineEditor>("chat_editor"); | 1280 | requires<LLLineEditor>("chat_editor"); |
1280 | requires<LLTextEditor>("im_history"); | 1281 | requires<LLTextEditor>("im_history"); |
1281 | 1282 | ||
1283 | #if LL_LINUX || LL_DARWIN | ||
1284 | childSetVisible("history_btn", false); | ||
1285 | #endif | ||
1286 | |||
1282 | if (checkRequirements()) | 1287 | if (checkRequirements()) |
1283 | { | 1288 | { |
1284 | mInputEditor = getChild<LLLineEditor>("chat_editor"); | 1289 | mInputEditor = getChild<LLLineEditor>("chat_editor"); |
@@ -1293,6 +1298,7 @@ BOOL LLFloaterIMPanel::postBuild() | |||
1293 | 1298 | ||
1294 | childSetAction("profile_callee_btn", onClickProfile, this); | 1299 | childSetAction("profile_callee_btn", onClickProfile, this); |
1295 | childSetAction("group_info_btn", onClickGroupInfo, this); | 1300 | childSetAction("group_info_btn", onClickGroupInfo, this); |
1301 | childSetAction("history_btn", onClickHistory, this); | ||
1296 | 1302 | ||
1297 | childSetAction("start_call_btn", onClickStartCall, this); | 1303 | childSetAction("start_call_btn", onClickStartCall, this); |
1298 | childSetAction("end_call_btn", onClickEndCall, this); | 1304 | childSetAction("end_call_btn", onClickEndCall, this); |
@@ -1806,6 +1812,41 @@ void LLFloaterIMPanel::onClickProfile( void* userdata ) | |||
1806 | } | 1812 | } |
1807 | 1813 | ||
1808 | // static | 1814 | // static |
1815 | void LLFloaterIMPanel::onClickHistory( void* userdata ) | ||
1816 | { | ||
1817 | LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata; | ||
1818 | |||
1819 | if (self->mOtherParticipantUUID.notNull()) | ||
1820 | { | ||
1821 | struct stat fileInfo; | ||
1822 | int result; | ||
1823 | |||
1824 | std::string fullname = self->getTitle();; | ||
1825 | //gCacheName->getFullName(self->mOtherParticipantUUID, fullname); | ||
1826 | //if(fullname == "(Loading...)") | ||
1827 | std::string file_path = gDirUtilp->getPerAccountChatLogsDir() + "\\" + fullname + ".txt"; | ||
1828 | |||
1829 | // check if file exists by trying to get its attributes | ||
1830 | result = stat(file_path.c_str(), &fileInfo); | ||
1831 | if(result == 0) | ||
1832 | { | ||
1833 | char command[256]; | ||
1834 | sprintf(command, "\"%s\\%s.txt\"", gDirUtilp->getPerAccountChatLogsDir().c_str(),fullname.c_str()); | ||
1835 | gViewerWindow->getWindow()->ShellEx(command); | ||
1836 | |||
1837 | llinfos << command << llendl; | ||
1838 | } | ||
1839 | else | ||
1840 | { | ||
1841 | LLStringUtil::format_map_t args; | ||
1842 | args["[NAME]"] = fullname; | ||
1843 | gViewerWindow->alertXml("IMLogNotFound", args); | ||
1844 | llinfos << file_path << llendl; | ||
1845 | } | ||
1846 | } | ||
1847 | } | ||
1848 | |||
1849 | // static | ||
1809 | void LLFloaterIMPanel::onClickGroupInfo( void* userdata ) | 1850 | void LLFloaterIMPanel::onClickGroupInfo( void* userdata ) |
1810 | { | 1851 | { |
1811 | // Bring up the Profile window | 1852 | // Bring up the Profile window |
@@ -2015,6 +2056,42 @@ void LLFloaterIMPanel::sendMsg() | |||
2015 | std::string utf8_text = wstring_to_utf8str(text); | 2056 | std::string utf8_text = wstring_to_utf8str(text); |
2016 | utf8_text = utf8str_truncate(utf8_text, MAX_MSG_BUF_SIZE - 1); | 2057 | utf8_text = utf8str_truncate(utf8_text, MAX_MSG_BUF_SIZE - 1); |
2017 | 2058 | ||
2059 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-1.0.0g | ||
2060 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) | ||
2061 | { | ||
2062 | if (IM_NOTHING_SPECIAL == mDialog) // One-on-one IM: allow if recipient is a sendim exception | ||
2063 | { | ||
2064 | if (!gRlvHandler.isException(RLV_BHVR_SENDIM, mOtherParticipantUUID)) | ||
2065 | utf8_text = rlv_handler_t::cstrBlockedSendIM; | ||
2066 | } | ||
2067 | else if (gAgent.isInGroup(mSessionUUID)) // Group chat: allow if recipient is a sendim exception | ||
2068 | { | ||
2069 | if (!gRlvHandler.isException(RLV_BHVR_SENDIM, mSessionUUID)) | ||
2070 | utf8_text = rlv_handler_t::cstrBlockedSendIM; | ||
2071 | } | ||
2072 | else if (mSpeakers) // Conference chat: allow if all participants are sendim exceptions | ||
2073 | { | ||
2074 | LLSpeakerMgr::speaker_list_t speakers; | ||
2075 | mSpeakers->getSpeakerList(&speakers, TRUE); | ||
2076 | |||
2077 | for (LLSpeakerMgr::speaker_list_t::const_iterator itSpeaker = speakers.begin(); | ||
2078 | itSpeaker != speakers.end(); ++itSpeaker) | ||
2079 | { | ||
2080 | LLSpeaker* pSpeaker = *itSpeaker; | ||
2081 | if ( (gAgent.getID() != pSpeaker->mID) && (!gRlvHandler.isException(RLV_BHVR_SENDIM, pSpeaker->mID)) ) | ||
2082 | { | ||
2083 | utf8_text = rlv_handler_t::cstrBlockedSendIM; | ||
2084 | break; | ||
2085 | } | ||
2086 | } | ||
2087 | } | ||
2088 | else // Catch all fall-through | ||
2089 | { | ||
2090 | utf8_text = rlv_handler_t::cstrBlockedSendIM; | ||
2091 | } | ||
2092 | } | ||
2093 | // [/RLVa:KB] | ||
2094 | |||
2018 | if ( mSessionInitialized ) | 2095 | if ( mSessionInitialized ) |
2019 | { | 2096 | { |
2020 | deliver_message(utf8_text, | 2097 | deliver_message(utf8_text, |
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h index 90cab61..f3477bb 100644 --- a/linden/indra/newview/llimpanel.h +++ b/linden/indra/newview/llimpanel.h | |||
@@ -231,6 +231,7 @@ public: | |||
231 | static void onTabClick( void* userdata ); | 231 | static void onTabClick( void* userdata ); |
232 | 232 | ||
233 | static void onClickProfile( void* userdata ); | 233 | static void onClickProfile( void* userdata ); |
234 | static void onClickHistory( void* userdata ); | ||
234 | static void onClickGroupInfo( void* userdata ); | 235 | static void onClickGroupInfo( void* userdata ); |
235 | static void onClickOfferTeleport( void* userdata ); | 236 | static void onClickOfferTeleport( void* userdata ); |
236 | static void onClickClose( void* userdata ); | 237 | static void onClickClose( void* userdata ); |
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp index 08e274b..790e20b 100644 --- a/linden/indra/newview/llimview.cpp +++ b/linden/indra/newview/llimview.cpp | |||
@@ -1515,6 +1515,19 @@ public: | |||
1515 | { | 1515 | { |
1516 | return; | 1516 | return; |
1517 | } | 1517 | } |
1518 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
1519 | // TODO-RLVa: duplicate from process_improved_im()? | ||
1520 | if (gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) | ||
1521 | { | ||
1522 | if (gAgent.isInGroup(session_id)) | ||
1523 | { | ||
1524 | if (!gRlvHandler.isException(RLV_BHVR_RECVIM, session_id)) | ||
1525 | return; | ||
1526 | } | ||
1527 | else if (!gRlvHandler.isException(RLV_BHVR_RECVIM, from_id)) | ||
1528 | message = message.substr(0, message_offset) + rlv_handler_t::cstrBlockedRecvIM; | ||
1529 | } | ||
1530 | // [/RLVa:KB] | ||
1518 | 1531 | ||
1519 | // standard message, not from system | 1532 | // standard message, not from system |
1520 | std::string saved; | 1533 | std::string saved; |
diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp index 083ec7c..d7af8d1 100644 --- a/linden/indra/newview/llinventoryactions.cpp +++ b/linden/indra/newview/llinventoryactions.cpp | |||
@@ -86,6 +86,9 @@ | |||
86 | #include "lluictrlfactory.h" | 86 | #include "lluictrlfactory.h" |
87 | #include "llselectmgr.h" | 87 | #include "llselectmgr.h" |
88 | 88 | ||
89 | // Defined in llinventorybridge.cpp | ||
90 | void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove); | ||
91 | |||
89 | const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not) | 92 | const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not) |
90 | const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not) | 93 | const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not) |
91 | const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not) | 94 | const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not) |
@@ -116,6 +119,12 @@ bool doToSelected(LLFolderView* folder, std::string action) | |||
116 | std::set<LLUUID> selected_items; | 119 | std::set<LLUUID> selected_items; |
117 | folder->getSelectionList(selected_items); | 120 | folder->getSelectionList(selected_items); |
118 | 121 | ||
122 | if ( ("attach" == action) && (selected_items.size() > 1) ) | ||
123 | { | ||
124 | wear_attachments_on_avatar(selected_items, FALSE); | ||
125 | return true; | ||
126 | } | ||
127 | |||
119 | LLMultiPreview* multi_previewp = NULL; | 128 | LLMultiPreview* multi_previewp = NULL; |
120 | LLMultiProperties* multi_propertiesp = NULL; | 129 | LLMultiProperties* multi_propertiesp = NULL; |
121 | 130 | ||
@@ -467,6 +476,56 @@ class LLDoCreateFloater : public inventory_listener_t | |||
467 | } | 476 | } |
468 | }; | 477 | }; |
469 | 478 | ||
479 | //Handles the search type buttons | ||
480 | class SetSearchType : public inventory_listener_t | ||
481 | { | ||
482 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
483 | { | ||
484 | std::string search_type = userdata.asString(); | ||
485 | if(search_type == "name") | ||
486 | { | ||
487 | gSavedSettings.setU32("InventorySearchType", 0); | ||
488 | |||
489 | mPtr->getControl("Inventory.SearchByName")->setValue(TRUE); | ||
490 | mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); | ||
491 | mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); | ||
492 | mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); | ||
493 | } | ||
494 | else if(search_type == "creator") | ||
495 | { | ||
496 | gSavedSettings.setU32("InventorySearchType", 1); | ||
497 | |||
498 | mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); | ||
499 | mPtr->getControl("Inventory.SearchByCreator")->setValue(TRUE); | ||
500 | mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); | ||
501 | mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); | ||
502 | } | ||
503 | else if(search_type == "desc") | ||
504 | { | ||
505 | gSavedSettings.setU32("InventorySearchType", 2); | ||
506 | |||
507 | mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); | ||
508 | mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); | ||
509 | mPtr->getControl("Inventory.SearchByDesc")->setValue(TRUE); | ||
510 | mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); | ||
511 | } | ||
512 | else if(search_type == "all") | ||
513 | { | ||
514 | gSavedSettings.setU32("InventorySearchType", 3); | ||
515 | |||
516 | mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); | ||
517 | mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); | ||
518 | mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); | ||
519 | mPtr->getControl("Inventory.SearchByAll")->setValue(TRUE); | ||
520 | } | ||
521 | |||
522 | //Clear search when switching modes. | ||
523 | mPtr->getActivePanel()->setFilterSubString(LLStringUtil::null); | ||
524 | mPtr->getActivePanel()->setFilterTypes(LLInventoryType::NIT_ALL); | ||
525 | return true; | ||
526 | } | ||
527 | }; | ||
528 | |||
470 | class LLSetSortBy : public inventory_listener_t | 529 | class LLSetSortBy : public inventory_listener_t |
471 | { | 530 | { |
472 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 531 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -714,6 +773,8 @@ void init_inventory_actions(LLInventoryView *floater) | |||
714 | (new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters"); | 773 | (new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters"); |
715 | (new LLResetFilter())->registerListener(floater, "Inventory.ResetFilter"); | 774 | (new LLResetFilter())->registerListener(floater, "Inventory.ResetFilter"); |
716 | (new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy"); | 775 | (new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy"); |
776 | |||
777 | (new SetSearchType())->registerListener(floater, "Inventory.SetSearchBy"); | ||
717 | } | 778 | } |
718 | 779 | ||
719 | void init_inventory_panel_actions(LLInventoryPanel *panel) | 780 | void init_inventory_panel_actions(LLInventoryPanel *panel) |
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp index cd38185..5a4fad7 100644 --- a/linden/indra/newview/llinventorybridge.cpp +++ b/linden/indra/newview/llinventorybridge.cpp | |||
@@ -112,6 +112,8 @@ void remove_inventory_category_from_avatar(LLInventoryCategory* category); | |||
112 | void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata); | 112 | void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata); |
113 | bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); | 113 | bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); |
114 | bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); | 114 | bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); |
115 | void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove); | ||
116 | void wear_attachments_on_avatar(const LLInventoryModel::item_array_t& items, BOOL remove); | ||
115 | 117 | ||
116 | std::string ICON_NAME[ICON_NAME_COUNT] = | 118 | std::string ICON_NAME[ICON_NAME_COUNT] = |
117 | { | 119 | { |
@@ -1944,6 +1946,12 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) | |||
1944 | LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); | 1946 | LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); |
1945 | LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); | 1947 | LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); |
1946 | 1948 | ||
1949 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
1950 | // Fixes LL bug | ||
1951 | mItems.clear(); | ||
1952 | mDisabledItems.clear(); | ||
1953 | // [/RLVa:KB] | ||
1954 | |||
1947 | if (lost_and_found_id == mUUID) | 1955 | if (lost_and_found_id == mUUID) |
1948 | { | 1956 | { |
1949 | // This is the lost+found folder. | 1957 | // This is the lost+found folder. |
@@ -2965,6 +2973,13 @@ void open_notecard(LLViewerInventoryItem* inv_item, | |||
2965 | const LLUUID& source_id, | 2973 | const LLUUID& source_id, |
2966 | BOOL take_focus) | 2974 | BOOL take_focus) |
2967 | { | 2975 | { |
2976 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2977 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) ) | ||
2978 | { | ||
2979 | return; | ||
2980 | } | ||
2981 | // [/RLVa:KB] | ||
2982 | |||
2968 | // See if we can bring an existing preview to the front | 2983 | // See if we can bring an existing preview to the front |
2969 | if(!LLPreview::show(inv_item->getUUID(), take_focus)) | 2984 | if(!LLPreview::show(inv_item->getUUID(), take_focus)) |
2970 | { | 2985 | { |
@@ -3290,7 +3305,14 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model | |||
3290 | item = (LLViewerInventoryItem*)gInventory.getItem(object_id); | 3305 | item = (LLViewerInventoryItem*)gInventory.getItem(object_id); |
3291 | if(item && gInventory.isObjectDescendentOf(object_id, gAgent.getInventoryRootID())) | 3306 | if(item && gInventory.isObjectDescendentOf(object_id, gAgent.getInventoryRootID())) |
3292 | { | 3307 | { |
3293 | rez_attachment(item, NULL); | 3308 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) |
3309 | // User picked "Wear" so either nothing is locked, or we need to look up the specific attach point from its name | ||
3310 | // (NOTE: rez_attachment will take care of deciding whether or not we *can* attach) | ||
3311 | rez_attachment(item, | ||
3312 | ((!rlv_handler_t::isEnabled()) || (!gRlvHandler.hasLockedAttachment()) || (RlvSettings::getEnableWear())) | ||
3313 | ? NULL : gRlvHandler.getAttachPoint(item, true)); | ||
3314 | // [/RLVa:KB] | ||
3315 | // rez_attachment(item, NULL); | ||
3294 | } | 3316 | } |
3295 | else if(item && item->isComplete()) | 3317 | else if(item && item->isComplete()) |
3296 | { | 3318 | { |
@@ -3309,6 +3331,15 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model | |||
3309 | else if ("detach" == action) | 3331 | else if ("detach" == action) |
3310 | { | 3332 | { |
3311 | LLInventoryItem* item = gInventory.getItem(mUUID); | 3333 | LLInventoryItem* item = gInventory.getItem(mUUID); |
3334 | |||
3335 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
3336 | // Fall-through: if there's a "Detach from yourself" code path we missed then we'll still disallow the detach here | ||
3337 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(item)) ) | ||
3338 | { | ||
3339 | return; | ||
3340 | } | ||
3341 | // [/RLVa:KB] | ||
3342 | |||
3312 | if( item ) | 3343 | if( item ) |
3313 | { | 3344 | { |
3314 | gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); | 3345 | gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); |
@@ -3472,6 +3503,11 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) | |||
3472 | if( avatarp->isWearingAttachment( mUUID ) ) | 3503 | if( avatarp->isWearingAttachment( mUUID ) ) |
3473 | { | 3504 | { |
3474 | items.push_back(std::string("Detach From Yourself")); | 3505 | items.push_back(std::string("Detach From Yourself")); |
3506 | |||
3507 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
3508 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(item)) ) | ||
3509 | disabled_items.push_back(std::string("Detach From Yourself")); | ||
3510 | // [/RLVa:KB] | ||
3475 | } | 3511 | } |
3476 | else | 3512 | else |
3477 | if( !isInTrash() ) | 3513 | if( !isInTrash() ) |
@@ -3483,6 +3519,16 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) | |||
3483 | items.push_back(std::string("RestoreToWorld Separator")); | 3519 | items.push_back(std::string("RestoreToWorld Separator")); |
3484 | items.push_back(std::string("Restore to Last Position")); | 3520 | items.push_back(std::string("Restore to Last Position")); |
3485 | 3521 | ||
3522 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0c | ||
3523 | // Only enable "Wear" if there is an attach point name *and* there isn't a worn attachment there that's currently locked | ||
3524 | if ( (rlv_handler_t::isEnabled()) && (!RlvSettings::getEnableWear()) && (gRlvHandler.hasLockedAttachment()) ) | ||
3525 | { | ||
3526 | LLViewerJointAttachment* pAttachPt = gRlvHandler.getAttachPoint(item, true); | ||
3527 | if ( (!pAttachPt) || (!gRlvHandler.isDetachable(pAttachPt)) ) | ||
3528 | disabled_items.push_back(std::string("Object Wear")); | ||
3529 | } | ||
3530 | // [/RLVa:KB] | ||
3531 | |||
3486 | LLMenuGL* attach_menu = menu.getChildMenuByName("Attach To", TRUE); | 3532 | LLMenuGL* attach_menu = menu.getChildMenuByName("Attach To", TRUE); |
3487 | LLMenuGL* attach_hud_menu = menu.getChildMenuByName("Attach To HUD", TRUE); | 3533 | LLMenuGL* attach_hud_menu = menu.getChildMenuByName("Attach To HUD", TRUE); |
3488 | LLVOAvatar *avatarp = gAgent.getAvatarObject(); | 3534 | LLVOAvatar *avatarp = gAgent.getAvatarObject(); |
@@ -3498,15 +3544,27 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) | |||
3498 | LLMenuItemCallGL *new_item; | 3544 | LLMenuItemCallGL *new_item; |
3499 | if (attachment->getIsHUDAttachment()) | 3545 | if (attachment->getIsHUDAttachment()) |
3500 | { | 3546 | { |
3547 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
3501 | attach_hud_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), | 3548 | attach_hud_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), |
3502 | NULL, //&LLObjectBridge::attachToAvatar, | 3549 | NULL, //&LLObjectBridge::attachToAvatar, |
3503 | NULL, &attach_label, (void*)attachment)); | 3550 | (rlv_handler_t::isEnabled()) ? &rlvAttachToEnabler : NULL, |
3551 | &attach_label, (void*)attachment)); | ||
3552 | // [/RLVa:KB] | ||
3553 | //attach_hud_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), | ||
3554 | // NULL, //&LLObjectBridge::attachToAvatar, | ||
3555 | // NULL, &attach_label, (void*)attachment)); | ||
3504 | } | 3556 | } |
3505 | else | 3557 | else |
3506 | { | 3558 | { |
3559 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
3507 | attach_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), | 3560 | attach_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), |
3508 | NULL, //&LLObjectBridge::attachToAvatar, | 3561 | NULL, //&LLObjectBridge::attachToAvatar, |
3509 | NULL, &attach_label, (void*)attachment)); | 3562 | (rlv_handler_t::isEnabled()) ? &rlvAttachToEnabler : NULL, |
3563 | &attach_label, (void*)attachment)); | ||
3564 | // [/RLVa:KB] | ||
3565 | //attach_menu->append(new_item = new LLMenuItemCallGL(attachment->getName(), | ||
3566 | // NULL, //&LLObjectBridge::attachToAvatar, | ||
3567 | // NULL, &attach_label, (void*)attachment)); | ||
3510 | } | 3568 | } |
3511 | 3569 | ||
3512 | LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachObject"); | 3570 | LLSimpleListener* callback = mInventoryPanel->getListenerByName("Inventory.AttachObject"); |
@@ -3703,6 +3761,31 @@ private: | |||
3703 | bool mAppend; | 3761 | bool mAppend; |
3704 | }; | 3762 | }; |
3705 | 3763 | ||
3764 | class LLWearAttachmentsCallback : public LLInventoryCallback | ||
3765 | { | ||
3766 | public: | ||
3767 | LLWearAttachmentsCallback(bool append) : mAppend(append) {} | ||
3768 | void fire(const LLUUID& item_id) | ||
3769 | { | ||
3770 | mItemIDs.insert(item_id); | ||
3771 | } | ||
3772 | protected: | ||
3773 | ~LLWearAttachmentsCallback() | ||
3774 | { | ||
3775 | if( LLInventoryCallbackManager::is_instantiated() ) | ||
3776 | { | ||
3777 | wear_attachments_on_avatar(mItemIDs, mAppend); | ||
3778 | } | ||
3779 | else | ||
3780 | { | ||
3781 | llwarns << "Dropping unhandled LLWearAttachments" << llendl; | ||
3782 | } | ||
3783 | } | ||
3784 | private: | ||
3785 | std::set<LLUUID> mItemIDs; | ||
3786 | bool mAppend; | ||
3787 | }; | ||
3788 | |||
3706 | void LLOutfitObserver::done() | 3789 | void LLOutfitObserver::done() |
3707 | { | 3790 | { |
3708 | // We now have an outfit ready to be copied to agent inventory. Do | 3791 | // We now have an outfit ready to be copied to agent inventory. Do |
@@ -3986,6 +4069,20 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata ) | |||
3986 | is_gesture); | 4069 | is_gesture); |
3987 | S32 gest_count = gest_item_array.count(); | 4070 | S32 gest_count = gest_item_array.count(); |
3988 | 4071 | ||
4072 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-1.0.0c | ||
4073 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) && (!RlvSettings::getEnableWear()) ) | ||
4074 | { | ||
4075 | // Filter anything that doesn't specify an attachment point (or that specifies one that's currently locked) | ||
4076 | for (S32 idxObj = obj_item_array.count() - 1; idxObj >= 0; idxObj--) | ||
4077 | { | ||
4078 | LLViewerJointAttachment* pAttachPt = gRlvHandler.getAttachPoint(obj_item_array.get(idxObj).get(), true); | ||
4079 | if ( ((!pAttachPt) || (!gRlvHandler.isDetachable(pAttachPt))) ) | ||
4080 | obj_item_array.remove(idxObj); | ||
4081 | } | ||
4082 | obj_count = obj_item_array.count(); | ||
4083 | } | ||
4084 | // [/RLVa:KB] | ||
4085 | |||
3989 | if( !wearable_count && !obj_count && !gest_count) | 4086 | if( !wearable_count && !obj_count && !gest_count) |
3990 | { | 4087 | { |
3991 | LLNotifications::instance().add("CouldNotPutOnOutfit"); | 4088 | LLNotifications::instance().add("CouldNotPutOnOutfit"); |
@@ -4058,57 +4155,7 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata ) | |||
4058 | if( obj_count > 0 ) | 4155 | if( obj_count > 0 ) |
4059 | { | 4156 | { |
4060 | // We've found some attachements. Add these. | 4157 | // We've found some attachements. Add these. |
4061 | 4158 | wear_attachments_on_avatar(obj_item_array, !wear_info->mAppend); | |
4062 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | ||
4063 | if( avatar ) | ||
4064 | { | ||
4065 | // Build a compound message to send all the objects that need to be rezzed. | ||
4066 | |||
4067 | // Limit number of packets to send | ||
4068 | const S32 MAX_PACKETS_TO_SEND = 10; | ||
4069 | const S32 OBJECTS_PER_PACKET = 4; | ||
4070 | const S32 MAX_OBJECTS_TO_SEND = MAX_PACKETS_TO_SEND * OBJECTS_PER_PACKET; | ||
4071 | if( obj_count > MAX_OBJECTS_TO_SEND ) | ||
4072 | { | ||
4073 | obj_count = MAX_OBJECTS_TO_SEND; | ||
4074 | } | ||
4075 | |||
4076 | // Create an id to keep the parts of the compound message together | ||
4077 | LLUUID compound_msg_id; | ||
4078 | compound_msg_id.generate(); | ||
4079 | LLMessageSystem* msg = gMessageSystem; | ||
4080 | |||
4081 | for(i = 0; i < obj_count; ++i) | ||
4082 | { | ||
4083 | if( 0 == (i % OBJECTS_PER_PACKET) ) | ||
4084 | { | ||
4085 | // Start a new message chunk | ||
4086 | msg->newMessageFast(_PREHASH_RezMultipleAttachmentsFromInv); | ||
4087 | msg->nextBlockFast(_PREHASH_AgentData); | ||
4088 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
4089 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
4090 | msg->nextBlockFast(_PREHASH_HeaderData); | ||
4091 | msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id ); | ||
4092 | msg->addU8Fast(_PREHASH_TotalObjects, obj_count ); | ||
4093 | msg->addBOOLFast(_PREHASH_FirstDetachAll, !wear_info->mAppend ); | ||
4094 | } | ||
4095 | |||
4096 | LLInventoryItem* item = obj_item_array.get(i); | ||
4097 | msg->nextBlockFast(_PREHASH_ObjectData ); | ||
4098 | msg->addUUIDFast(_PREHASH_ItemID, item->getUUID() ); | ||
4099 | msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); | ||
4100 | msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point | ||
4101 | pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); | ||
4102 | msg->addStringFast(_PREHASH_Name, item->getName()); | ||
4103 | msg->addStringFast(_PREHASH_Description, item->getDescription()); | ||
4104 | |||
4105 | if( (i+1 == obj_count) || ((OBJECTS_PER_PACKET-1) == (i % OBJECTS_PER_PACKET)) ) | ||
4106 | { | ||
4107 | // End of message chunk | ||
4108 | msg->sendReliable( gAgent.getRegion()->getHost() ); | ||
4109 | } | ||
4110 | } | ||
4111 | } | ||
4112 | } | 4159 | } |
4113 | } | 4160 | } |
4114 | delete wear_info; | 4161 | delete wear_info; |
@@ -4173,6 +4220,13 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B | |||
4173 | // item->setAssetUUID(wearable->getID()); | 4220 | // item->setAssetUUID(wearable->getID()); |
4174 | // item->updateAssetOnServer(); | 4221 | // item->updateAssetOnServer(); |
4175 | // } | 4222 | // } |
4223 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-1.0.0c | ||
4224 | if ( (!gRlvHandler.isWearable(wearable->getType())) || | ||
4225 | ( (!gRlvHandler.isRemovable(wearable->getType())) && (gAgent.getWearable(wearable->getType())) ) ) | ||
4226 | { | ||
4227 | continue; | ||
4228 | } | ||
4229 | // [/RLVa:KB] | ||
4176 | items.put(item); | 4230 | items.put(item); |
4177 | wearables.put(wearable); | 4231 | wearables.put(wearable); |
4178 | } | 4232 | } |
@@ -4192,6 +4246,117 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B | |||
4192 | dec_busy_count(); | 4246 | dec_busy_count(); |
4193 | } | 4247 | } |
4194 | 4248 | ||
4249 | void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove) | ||
4250 | { | ||
4251 | // NOTE: the inventory items can reside in the user's inventory, the library, or any combination of the two | ||
4252 | |||
4253 | LLInventoryModel::item_array_t items; | ||
4254 | LLPointer<LLInventoryCallback> cb; | ||
4255 | |||
4256 | for (std::set<LLUUID>::const_iterator it = item_ids.begin(); it != item_ids.end(); ++it) | ||
4257 | { | ||
4258 | LLViewerInventoryItem* item = gInventory.getItem(*it); | ||
4259 | if ( (item) && (LLAssetType::AT_OBJECT == item->getType()) ) | ||
4260 | { | ||
4261 | if ( (gInventory.isObjectDescendentOf(*it, gAgent.getInventoryRootID())) ) | ||
4262 | { | ||
4263 | // items.put(item); | ||
4264 | // [RLVa:KB] - Checked: 2009-09-11 (RLVa-1.0.2c) | Modified: RLVa-1.0.2c | ||
4265 | LLViewerJointAttachment* pAttachPt = NULL; | ||
4266 | if ( (!rlv_handler_t::isEnabled()) || (RlvSettings::getEnableWear()) || (!gRlvHandler.hasLockedAttachment()) || | ||
4267 | (((pAttachPt = gRlvHandler.getAttachPoint(item, true)) != NULL) && (gRlvHandler.isDetachable(pAttachPt))) ) | ||
4268 | { | ||
4269 | items.put(item); | ||
4270 | } | ||
4271 | // [/RLVa:KB] | ||
4272 | } | ||
4273 | else if ( (item->isComplete()) ) | ||
4274 | { | ||
4275 | if (cb.isNull()) | ||
4276 | cb = new LLWearAttachmentsCallback(remove); | ||
4277 | copy_inventory_item(gAgent.getID(), item->getPermissions().getOwner(), item->getUUID(), LLUUID::null, std::string(), cb); | ||
4278 | } | ||
4279 | } | ||
4280 | } | ||
4281 | |||
4282 | wear_attachments_on_avatar(items, remove); | ||
4283 | } | ||
4284 | |||
4285 | void wear_attachments_on_avatar(const LLInventoryModel::item_array_t& items, BOOL remove) | ||
4286 | { | ||
4287 | // NOTE: all inventory items must reside in the user's inventory | ||
4288 | |||
4289 | LLVOAvatar* avatarp = gAgent.getAvatarObject(); | ||
4290 | if(!avatarp) | ||
4291 | { | ||
4292 | llwarns << "No avatar found." << llendl; | ||
4293 | return; | ||
4294 | } | ||
4295 | |||
4296 | // Build a compound message to send all the objects that need to be rezzed. | ||
4297 | |||
4298 | // Limit number of packets to send | ||
4299 | const S32 MAX_PACKETS_TO_SEND = 10; | ||
4300 | const S32 OBJECTS_PER_PACKET = 4; | ||
4301 | const S32 MAX_OBJECTS_TO_SEND = MAX_PACKETS_TO_SEND * OBJECTS_PER_PACKET; | ||
4302 | |||
4303 | S32 count = items.count(); | ||
4304 | if ( !count ) | ||
4305 | { | ||
4306 | return; | ||
4307 | } | ||
4308 | else if ( count > MAX_OBJECTS_TO_SEND ) | ||
4309 | { | ||
4310 | count = MAX_OBJECTS_TO_SEND; | ||
4311 | } | ||
4312 | |||
4313 | // Create an id to keep the parts of the compound message together | ||
4314 | LLUUID compound_msg_id; | ||
4315 | compound_msg_id.generate(); | ||
4316 | LLMessageSystem* msg = gMessageSystem; | ||
4317 | |||
4318 | for(S32 i = 0; i < count; ++i) | ||
4319 | { | ||
4320 | if( 0 == (i % OBJECTS_PER_PACKET) ) | ||
4321 | { | ||
4322 | // Start a new message chunk | ||
4323 | msg->newMessageFast(_PREHASH_RezMultipleAttachmentsFromInv); | ||
4324 | msg->nextBlockFast(_PREHASH_AgentData); | ||
4325 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
4326 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
4327 | msg->nextBlockFast(_PREHASH_HeaderData); | ||
4328 | msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id ); | ||
4329 | msg->addU8Fast(_PREHASH_TotalObjects, count ); | ||
4330 | // msg->addBOOLFast(_PREHASH_FirstDetachAll, remove ); | ||
4331 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a | ||
4332 | // This really should just *always* be FALSE since TRUE can result in loss of the current asset state | ||
4333 | msg->addBOOLFast(_PREHASH_FirstDetachAll, remove && (!gRlvHandler.hasLockedAttachment()) ); | ||
4334 | // [/RLVa:KB] | ||
4335 | } | ||
4336 | |||
4337 | LLInventoryItem* item = items.get(i); | ||
4338 | msg->nextBlockFast(_PREHASH_ObjectData ); | ||
4339 | msg->addUUIDFast(_PREHASH_ItemID, item->getUUID() ); | ||
4340 | msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); | ||
4341 | // msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point | ||
4342 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a | ||
4343 | msg->addU8Fast(_PREHASH_AttachmentPt, | ||
4344 | ( (!rlv_handler_t::isEnabled()) || (RlvSettings::getEnableWear()) || (!gRlvHandler.hasLockedAttachment()) ) | ||
4345 | ? 0 | ||
4346 | : gRlvHandler.getAttachPointIndex(gRlvHandler.getAttachPoint(item, true))); | ||
4347 | // [/RLVa:KB] | ||
4348 | pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); | ||
4349 | msg->addStringFast(_PREHASH_Name, item->getName()); | ||
4350 | msg->addStringFast(_PREHASH_Description, item->getDescription()); | ||
4351 | |||
4352 | if( (i+1 == count) || ((OBJECTS_PER_PACKET-1) == (i % OBJECTS_PER_PACKET)) ) | ||
4353 | { | ||
4354 | // End of message chunk | ||
4355 | msg->sendReliable( gAgent.getRegion()->getHost() ); | ||
4356 | } | ||
4357 | } | ||
4358 | } | ||
4359 | |||
4195 | void remove_inventory_category_from_avatar( LLInventoryCategory* category ) | 4360 | void remove_inventory_category_from_avatar( LLInventoryCategory* category ) |
4196 | { | 4361 | { |
4197 | if(!category) return; | 4362 | if(!category) return; |
@@ -4261,7 +4426,11 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata) | |||
4261 | { | 4426 | { |
4262 | for(i = 0; i < wearable_count; ++i) | 4427 | for(i = 0; i < wearable_count; ++i) |
4263 | { | 4428 | { |
4264 | if( gAgent.isWearingItem (item_array.get(i)->getUUID()) ) | 4429 | // if( gAgent.isWearingItem (item_array.get(i)->getUUID()) ) |
4430 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.2a | ||
4431 | LLWearable* pWearable = gAgent.getWearableFromWearableItem(item_array.get(i)->getUUID()); | ||
4432 | if ( (pWearable) && ( (!rlv_handler_t::isEnabled()) || (gRlvHandler.isRemovable(pWearable->getType()))) ) | ||
4433 | // [/RLVa:KB] | ||
4265 | { | 4434 | { |
4266 | gWearableList.getAsset(item_array.get(i)->getAssetUUID(), | 4435 | gWearableList.getAsset(item_array.get(i)->getAssetUUID(), |
4267 | item_array.get(i)->getName(), | 4436 | item_array.get(i)->getName(), |
@@ -4278,6 +4447,18 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata) | |||
4278 | { | 4447 | { |
4279 | for(i = 0; i < obj_count; ++i) | 4448 | for(i = 0; i < obj_count; ++i) |
4280 | { | 4449 | { |
4450 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.2a | ||
4451 | // TODO-RLVa: is there a reason why LL doesn't bother checking to see if you're actually wearing the object? | ||
4452 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
4453 | { | ||
4454 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
4455 | if ( (!pAvatar) || (!pAvatar->isWearingAttachment(obj_item_array.get(i)->getUUID())) || | ||
4456 | (!gRlvHandler.isDetachable(obj_item_array.get(i).get())) ) // Why does LLPointer have a cast to BOOL aka S32??? | ||
4457 | { | ||
4458 | continue; | ||
4459 | } | ||
4460 | } | ||
4461 | // [/RVLa:KB] | ||
4281 | gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); | 4462 | gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); |
4282 | gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); | 4463 | gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); |
4283 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); | 4464 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); |
@@ -4670,8 +4851,11 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, | |||
4670 | { | 4851 | { |
4671 | EWearableType type = wearable->getType(); | 4852 | EWearableType type = wearable->getType(); |
4672 | 4853 | ||
4673 | if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&& | 4854 | //if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&& |
4674 | //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) | 4855 | //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) |
4856 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.2a | SL big fix | ||
4857 | if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES) ) | ||
4858 | // [/RLVa:KB] | ||
4675 | { | 4859 | { |
4676 | gAgent.removeWearable( type ); | 4860 | gAgent.removeWearable( type ); |
4677 | } | 4861 | } |
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp index f98a3f9..5a6a26b 100644 --- a/linden/indra/newview/llinventorymodel.cpp +++ b/linden/indra/newview/llinventorymodel.cpp | |||
@@ -1500,6 +1500,8 @@ void LLInventoryModel::stopBackgroundFetch() | |||
1500 | //static | 1500 | //static |
1501 | void LLInventoryModel::backgroundFetch(void*) | 1501 | void LLInventoryModel::backgroundFetch(void*) |
1502 | { | 1502 | { |
1503 | if (gDisconnected) | ||
1504 | return; | ||
1503 | if (sBackgroundFetchActive && gAgent.getRegion()) | 1505 | if (sBackgroundFetchActive && gAgent.getRegion()) |
1504 | { | 1506 | { |
1505 | //If we'll be using the capability, we'll be sending batches and the background thing isn't as important. | 1507 | //If we'll be using the capability, we'll be sending batches and the background thing isn't as important. |
@@ -2877,6 +2879,14 @@ void LLInventoryModel::processSaveAssetIntoInventory(LLMessageSystem* msg, | |||
2877 | llinfos << "LLInventoryModel::processSaveAssetIntoInventory item" | 2879 | llinfos << "LLInventoryModel::processSaveAssetIntoInventory item" |
2878 | " not found: " << item_id << llendl; | 2880 | " not found: " << item_id << llendl; |
2879 | } | 2881 | } |
2882 | |||
2883 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0e | ||
2884 | if (rlv_handler_t::isEnabled()) | ||
2885 | { | ||
2886 | gRlvHandler.onSavedAssetIntoInventory(item_id); | ||
2887 | } | ||
2888 | // [/RLVa:KB] | ||
2889 | |||
2880 | if(gViewerWindow) | 2890 | if(gViewerWindow) |
2881 | { | 2891 | { |
2882 | gViewerWindow->getWindow()->decBusyCount(); | 2892 | gViewerWindow->getWindow()->decBusyCount(); |
@@ -2919,6 +2929,23 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**) | |||
2919 | // << llendl; | 2929 | // << llendl; |
2920 | if(tfolder->getUUID().notNull()) | 2930 | if(tfolder->getUUID().notNull()) |
2921 | { | 2931 | { |
2932 | // [RLVa:KB] - Checked: 2009-08-07 (RLVa-1.0.1f) | Added: RLVa-1.0.0f | ||
2933 | // TODO-RLVa: this really shouldn't go here, but if the inventory offer spans multiple BulkUpdateInventory messages | ||
2934 | // then the second message will cause the viewer to show the folder under its original name even though | ||
2935 | // it is renamed properly on the inventory server | ||
2936 | if ( (rlv_handler_t::isEnabled()) && (!RlvSettings::getForbidGiveToRLV()) ) | ||
2937 | { | ||
2938 | LLViewerInventoryCategory* pRlvRoot = gRlvHandler.getSharedRoot(); | ||
2939 | std::string strName = tfolder->getName(); | ||
2940 | if ((pRlvRoot) && (pRlvRoot->getUUID() == tfolder->getParentUUID() ) && (strName.find(RLV_PUTINV_PREFIX) == 0)) | ||
2941 | { | ||
2942 | strName.erase(0, strName.find(RLV_FOLDER_PREFIX_PUTINV)); // Strips the prefix while retaining while the '~' | ||
2943 | tfolder->rename(strName); | ||
2944 | tfolder->updateServer(FALSE); | ||
2945 | } | ||
2946 | } | ||
2947 | // [/RLVa:KB] | ||
2948 | |||
2922 | folders.push_back(tfolder); | 2949 | folders.push_back(tfolder); |
2923 | LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID()); | 2950 | LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID()); |
2924 | if(folderp) | 2951 | if(folderp) |
diff --git a/linden/indra/newview/llinventorymodel.h b/linden/indra/newview/llinventorymodel.h index d73fef7..74a2ec7 100644 --- a/linden/indra/newview/llinventorymodel.h +++ b/linden/indra/newview/llinventorymodel.h | |||
@@ -323,6 +323,8 @@ public: | |||
323 | // relations. | 323 | // relations. |
324 | void buildParentChildMap(); | 324 | void buildParentChildMap(); |
325 | 325 | ||
326 | // Empty the entire contents | ||
327 | void empty(); | ||
326 | // | 328 | // |
327 | // Category accounting. | 329 | // Category accounting. |
328 | // | 330 | // |
@@ -374,6 +376,7 @@ public: | |||
374 | static bool isEverythingFetched(); | 376 | static bool isEverythingFetched(); |
375 | static void backgroundFetch(void*); // background fetch idle function | 377 | static void backgroundFetch(void*); // background fetch idle function |
376 | static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; } | 378 | static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; } |
379 | |||
377 | protected: | 380 | protected: |
378 | 381 | ||
379 | // Internal methods which add inventory and make sure that all of | 382 | // Internal methods which add inventory and make sure that all of |
@@ -387,8 +390,7 @@ protected: | |||
387 | // preferred type. Returns LLUUID::null if not found | 390 | // preferred type. Returns LLUUID::null if not found |
388 | LLUUID findCatUUID(LLAssetType::EType preferred_type); | 391 | LLUUID findCatUUID(LLAssetType::EType preferred_type); |
389 | 392 | ||
390 | // Empty the entire contents | 393 | |
391 | void empty(); | ||
392 | 394 | ||
393 | // Given the current state of the inventory items, figure out the | 395 | // Given the current state of the inventory items, figure out the |
394 | // clone information. *FIX: This is sub-optimal, since we can | 396 | // clone information. *FIX: This is sub-optimal, since we can |
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 34409ff..f0bfa00 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp | |||
@@ -522,6 +522,16 @@ void LLInventoryView::init(LLInventoryModel* inventory) | |||
522 | addBoolControl("Inventory.FoldersAlwaysByName", sort_folders_by_name ); | 522 | addBoolControl("Inventory.FoldersAlwaysByName", sort_folders_by_name ); |
523 | addBoolControl("Inventory.SystemFoldersToTop", sort_system_folders_to_top ); | 523 | addBoolControl("Inventory.SystemFoldersToTop", sort_system_folders_to_top ); |
524 | 524 | ||
525 | //Search Controls | ||
526 | U32 search_type = gSavedSettings.getU32("InventorySearchType"); | ||
527 | BOOL search_by_name = (search_type == 0); | ||
528 | |||
529 | addBoolControl("Inventory.SearchByName", search_by_name); | ||
530 | addBoolControl("Inventory.SearchByCreator", !search_by_name); | ||
531 | addBoolControl("Inventory.SearchByDesc", !search_by_name); | ||
532 | |||
533 | addBoolControl("Inventory.SearchByAll", !search_by_name); | ||
534 | |||
525 | mSavedFolderState = new LLSaveFolderState(); | 535 | mSavedFolderState = new LLSaveFolderState(); |
526 | mSavedFolderState->setApply(FALSE); | 536 | mSavedFolderState->setApply(FALSE); |
527 | 537 | ||
@@ -766,7 +776,17 @@ void LLInventoryView::setVisible( BOOL visible ) | |||
766 | // Destroy all but the last floater, which is made invisible. | 776 | // Destroy all but the last floater, which is made invisible. |
767 | void LLInventoryView::onClose(bool app_quitting) | 777 | void LLInventoryView::onClose(bool app_quitting) |
768 | { | 778 | { |
769 | S32 count = sActiveViews.count(); | 779 | // S32 count = sActiveViews.count(); |
780 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
781 | // See LLInventoryView::closeAll() on why we're doing it this way | ||
782 | S32 count = 0; | ||
783 | for (S32 idx = 0, cnt = sActiveViews.count(); idx < cnt; idx++) | ||
784 | { | ||
785 | if (!sActiveViews.get(idx)->isDead()) | ||
786 | count++; | ||
787 | } | ||
788 | // [/RLVa:KB] | ||
789 | |||
770 | if (count > 1) | 790 | if (count > 1) |
771 | { | 791 | { |
772 | destroy(); | 792 | destroy(); |
@@ -844,6 +864,13 @@ LLInventoryView* LLInventoryView::showAgentInventory(BOOL take_keyboard_focus) | |||
844 | return NULL; | 864 | return NULL; |
845 | } | 865 | } |
846 | 866 | ||
867 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
868 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWINV)) | ||
869 | { | ||
870 | return NULL; | ||
871 | } | ||
872 | // [/RLVa:KB] | ||
873 | |||
847 | LLInventoryView* iv = LLInventoryView::getActiveInventory(); | 874 | LLInventoryView* iv = LLInventoryView::getActiveInventory(); |
848 | #if 0 && !LL_RELEASE_FOR_DOWNLOAD | 875 | #if 0 && !LL_RELEASE_FOR_DOWNLOAD |
849 | if (sActiveViews.count() == 1) | 876 | if (sActiveViews.count() == 1) |
@@ -942,6 +969,7 @@ void LLInventoryView::cleanup() | |||
942 | { | 969 | { |
943 | sActiveViews.get(i)->destroy(); | 970 | sActiveViews.get(i)->destroy(); |
944 | } | 971 | } |
972 | gInventory.empty(); | ||
945 | } | 973 | } |
946 | 974 | ||
947 | void LLInventoryView::toggleFindOptions() | 975 | void LLInventoryView::toggleFindOptions() |
diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h index 1f73d51..0c525c3 100644 --- a/linden/indra/newview/llinventoryview.h +++ b/linden/indra/newview/llinventoryview.h | |||
@@ -226,6 +226,34 @@ public: | |||
226 | static void toggleVisibility(); | 226 | static void toggleVisibility(); |
227 | static void toggleVisibility(void*) { toggleVisibility(); } | 227 | static void toggleVisibility(void*) { toggleVisibility(); } |
228 | 228 | ||
229 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
230 | static void closeAll() | ||
231 | { | ||
232 | // If there are mulitple inventory floaters open then clicking the "Inventory" button will close | ||
233 | // them one by one (see LLToolBar::onClickInventory() => toggleVisibility() ) until we get to the | ||
234 | // last one which will just be hidden instead of closed/destroyed (see LLInventoryView::onClose) | ||
235 | // | ||
236 | // However the view isn't removed from sActiveViews until its destructor is called and since | ||
237 | // 'LLMortician::sDestroyImmediate == FALSE' while the viewer is running the destructor won't be | ||
238 | // called right away | ||
239 | // | ||
240 | // Result: we can't call close() on the last (sActiveViews.count() will still be > 1) because | ||
241 | // onClose() would take the wrong branch and destroy() it as well | ||
242 | // | ||
243 | // Workaround: "fix" onClose() to count only views that aren't marked as "dead" | ||
244 | |||
245 | LLInventoryView* pView; U8 flagsSound; | ||
246 | for (S32 idx = sActiveViews.count() - 1; idx >= 0; idx--) | ||
247 | { | ||
248 | pView = sActiveViews.get(idx); | ||
249 | flagsSound = pView->getSoundFlags(); | ||
250 | pView->setSoundFlags(LLView::SILENT); // Suppress the window close sound | ||
251 | pView->close(); // onClose() protects against closing the last inventory floater | ||
252 | pView->setSoundFlags(flagsSound); // One view won't be destroy()'ed so it needs its sound flags restored | ||
253 | } | ||
254 | } | ||
255 | // [/RLVa:KB] | ||
256 | |||
229 | // Final cleanup, destroy all open inventory views. | 257 | // Final cleanup, destroy all open inventory views. |
230 | static void cleanup(); | 258 | static void cleanup(); |
231 | 259 | ||
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp index b1cdfe3..65f99ef 100644 --- a/linden/indra/newview/llmanipscale.cpp +++ b/linden/indra/newview/llmanipscale.cpp | |||
@@ -70,6 +70,8 @@ const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f; | |||
70 | const F32 SELECTED_MANIPULATOR_SCALE = 1.2f; | 70 | const F32 SELECTED_MANIPULATOR_SCALE = 1.2f; |
71 | const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; | 71 | const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; |
72 | const S32 NUM_MANIPULATORS = 14; | 72 | const S32 NUM_MANIPULATORS = 14; |
73 | const F32 DEFAULT_LL_MAX_PRIM_SCALE = 10.f; | ||
74 | const F32 DEFAULT_OPENSIM_MAX_PRIM_SCALE = 128.f; | ||
73 | 75 | ||
74 | const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] = | 76 | const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] = |
75 | { | 77 | { |
@@ -174,6 +176,7 @@ LLManipScale::LLManipScale( LLToolComposite* composite ) | |||
174 | mScaledBoxHandleSize( 1.f ), | 176 | mScaledBoxHandleSize( 1.f ), |
175 | mLastMouseX( -1 ), | 177 | mLastMouseX( -1 ), |
176 | mLastMouseY( -1 ), | 178 | mLastMouseY( -1 ), |
179 | mMaxPrimSize(0.f), | ||
177 | mSendUpdateOnMouseUp( FALSE ), | 180 | mSendUpdateOnMouseUp( FALSE ), |
178 | mLastUpdateFlags( 0 ), | 181 | mLastUpdateFlags( 0 ), |
179 | mScaleSnapUnit1(1.f), | 182 | mScaleSnapUnit1(1.f), |
@@ -202,6 +205,7 @@ void LLManipScale::render() | |||
202 | LLGLDepthTest gls_depth(GL_TRUE); | 205 | LLGLDepthTest gls_depth(GL_TRUE); |
203 | LLGLEnable gl_blend(GL_BLEND); | 206 | LLGLEnable gl_blend(GL_BLEND); |
204 | LLGLEnable gls_alpha_test(GL_ALPHA_TEST); | 207 | LLGLEnable gls_alpha_test(GL_ALPHA_TEST); |
208 | mMaxPrimSize = gSavedSettings.getBOOL("LoggedIntoOpenSim") ? DEFAULT_OPENSIM_MAX_PRIM_SCALE : DEFAULT_LL_MAX_PRIM_SCALE; | ||
205 | 209 | ||
206 | if( canAffectSelection() ) | 210 | if( canAffectSelection() ) |
207 | { | 211 | { |
@@ -953,8 +957,8 @@ void LLManipScale::dragCorner( S32 x, S32 y ) | |||
953 | mInSnapRegime = FALSE; | 957 | mInSnapRegime = FALSE; |
954 | } | 958 | } |
955 | 959 | ||
956 | F32 max_scale_factor = DEFAULT_MAX_PRIM_SCALE / MIN_PRIM_SCALE; | 960 | F32 max_scale_factor = mMaxPrimSize / MIN_PRIM_SCALE; |
957 | F32 min_scale_factor = MIN_PRIM_SCALE / DEFAULT_MAX_PRIM_SCALE; | 961 | F32 min_scale_factor = MIN_PRIM_SCALE / mMaxPrimSize; |
958 | 962 | ||
959 | // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale | 963 | // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale |
960 | for (LLObjectSelection::iterator iter = mObjectSelection->begin(); | 964 | for (LLObjectSelection::iterator iter = mObjectSelection->begin(); |
@@ -966,7 +970,7 @@ void LLManipScale::dragCorner( S32 x, S32 y ) | |||
966 | { | 970 | { |
967 | const LLVector3& scale = selectNode->mSavedScale; | 971 | const LLVector3& scale = selectNode->mSavedScale; |
968 | 972 | ||
969 | F32 cur_max_scale_factor = llmin( DEFAULT_MAX_PRIM_SCALE / scale.mV[VX], DEFAULT_MAX_PRIM_SCALE / scale.mV[VY], DEFAULT_MAX_PRIM_SCALE / scale.mV[VZ] ); | 973 | F32 cur_max_scale_factor = llmin( mMaxPrimSize / scale.mV[VX], mMaxPrimSize / scale.mV[VY], mMaxPrimSize / scale.mV[VZ] ); |
970 | max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); | 974 | max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); |
971 | 975 | ||
972 | F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); | 976 | F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); |
@@ -1263,7 +1267,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto | |||
1263 | 1267 | ||
1264 | F32 denom = axis * dir_local; | 1268 | F32 denom = axis * dir_local; |
1265 | F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters | 1269 | F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters |
1266 | F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); | 1270 | F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, mMaxPrimSize); |
1267 | // propagate scale constraint back to position offset | 1271 | // propagate scale constraint back to position offset |
1268 | desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position | 1272 | desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position |
1269 | 1273 | ||
@@ -1963,7 +1967,7 @@ F32 LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const | |||
1963 | max_extent = bbox_extents.mV[i]; | 1967 | max_extent = bbox_extents.mV[i]; |
1964 | } | 1968 | } |
1965 | } | 1969 | } |
1966 | max_scale_factor = bbox_extents.magVec() * DEFAULT_MAX_PRIM_SCALE / max_extent; | 1970 | max_scale_factor = bbox_extents.magVec() * mMaxPrimSize / max_extent; |
1967 | 1971 | ||
1968 | if (getUniform()) | 1972 | if (getUniform()) |
1969 | { | 1973 | { |
@@ -1978,7 +1982,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const | |||
1978 | { | 1982 | { |
1979 | LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); | 1983 | LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); |
1980 | bbox_extents.abs(); | 1984 | bbox_extents.abs(); |
1981 | F32 min_extent = DEFAULT_MAX_PRIM_SCALE; | 1985 | F32 min_extent = mMaxPrimSize; |
1982 | for (U32 i = VX; i <= VZ; i++) | 1986 | for (U32 i = VX; i <= VZ; i++) |
1983 | { | 1987 | { |
1984 | if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) | 1988 | if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) |
@@ -2053,3 +2057,13 @@ BOOL LLManipScale::canAffectSelection() | |||
2053 | } | 2057 | } |
2054 | return can_scale; | 2058 | return can_scale; |
2055 | } | 2059 | } |
2060 | |||
2061 | //static | ||
2062 | F32 LLManipScale::getMaxPrimSize() | ||
2063 | { | ||
2064 | if (gSavedSettings.getBOOL("LoggedIntoOpenSim")) | ||
2065 | { | ||
2066 | return DEFAULT_OPENSIM_MAX_PRIM_SCALE; | ||
2067 | } | ||
2068 | return DEFAULT_LL_MAX_PRIM_SCALE; | ||
2069 | } | ||
diff --git a/linden/indra/newview/llmanipscale.h b/linden/indra/newview/llmanipscale.h index 1de0459..c6545fd 100644 --- a/linden/indra/newview/llmanipscale.h +++ b/linden/indra/newview/llmanipscale.h | |||
@@ -89,6 +89,8 @@ public: | |||
89 | static void setShowAxes( BOOL b ); | 89 | static void setShowAxes( BOOL b ); |
90 | static BOOL getShowAxes(); | 90 | static BOOL getShowAxes(); |
91 | 91 | ||
92 | static F32 getMaxPrimSize(); | ||
93 | |||
92 | private: | 94 | private: |
93 | void renderCorners( const LLBBox& local_bbox ); | 95 | void renderCorners( const LLBBox& local_bbox ); |
94 | void renderFaces( const LLBBox& local_bbox ); | 96 | void renderFaces( const LLBBox& local_bbox ); |
@@ -166,6 +168,7 @@ private: | |||
166 | F32 mScaleSnapValue; | 168 | F32 mScaleSnapValue; |
167 | BOOL mInSnapRegime; | 169 | BOOL mInSnapRegime; |
168 | F32* mManipulatorScales; | 170 | F32* mManipulatorScales; |
171 | F32 mMaxPrimSize; | ||
169 | }; | 172 | }; |
170 | 173 | ||
171 | #endif // LL_MANIPSCALE_H | 174 | #endif // LL_MANIPSCALE_H |
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp index f2585c8..8d23e40 100644 --- a/linden/indra/newview/llmaniptranslate.cpp +++ b/linden/indra/newview/llmaniptranslate.cpp | |||
@@ -463,8 +463,15 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) | |||
463 | if (mask == MASK_COPY) | 463 | if (mask == MASK_COPY) |
464 | { | 464 | { |
465 | // ...we're trying to make a copy | 465 | // ...we're trying to make a copy |
466 | LLSelectMgr::getInstance()->selectDuplicate(LLVector3::zero, FALSE); | 466 | // LLSelectMgr::getInstance()->selectDuplicate(LLVector3::zero, FALSE); |
467 | mCopyMadeThisDrag = TRUE; | 467 | // mCopyMadeThisDrag = TRUE; |
468 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
469 | if (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
470 | { | ||
471 | LLSelectMgr::getInstance()->selectDuplicate(LLVector3::zero, FALSE); | ||
472 | mCopyMadeThisDrag = TRUE; | ||
473 | } | ||
474 | // [/RLVa:KB] | ||
468 | 475 | ||
469 | // When we make the copy, we don't want to do any other processing. | 476 | // When we make the copy, we don't want to do any other processing. |
470 | // If so, the object will also be moved, and the copy will be offset. | 477 | // If so, the object will also be moved, and the copy will be offset. |
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp index b0cce23..73f19d5 100644 --- a/linden/indra/newview/llnetmap.cpp +++ b/linden/indra/newview/llnetmap.cpp | |||
@@ -46,6 +46,7 @@ | |||
46 | #include "llcolorscheme.h" | 46 | #include "llcolorscheme.h" |
47 | #include "llviewercontrol.h" | 47 | #include "llviewercontrol.h" |
48 | #include "llfloateravatarinfo.h" | 48 | #include "llfloateravatarinfo.h" |
49 | #include "llfloatermap.h" | ||
49 | #include "llfloaterworldmap.h" | 50 | #include "llfloaterworldmap.h" |
50 | #include "llframetimer.h" | 51 | #include "llframetimer.h" |
51 | #include "llmutelist.h" | 52 | #include "llmutelist.h" |
@@ -70,13 +71,15 @@ | |||
70 | #include "llglheaders.h" | 71 | #include "llglheaders.h" |
71 | 72 | ||
72 | const F32 MAP_SCALE_MIN = 32; | 73 | const F32 MAP_SCALE_MIN = 32; |
73 | const F32 MAP_SCALE_MID = 172; | 74 | const F32 MAP_SCALE_MID = 1024; |
74 | const F32 MAP_SCALE_MAX = 512; | 75 | const F32 MAP_SCALE_MAX = 4096; |
75 | const F32 MAP_SCALE_INCREMENT = 16; | 76 | const F32 MAP_SCALE_INCREMENT = 16; |
76 | const F32 MAP_MIN_PICK_DIST = 4; | 77 | const F32 MAP_SCALE_ZOOM_FACTOR = 1.25f; // Zoom in factor per click of the scroll wheel (25%) |
77 | const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f; | 78 | const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f; |
79 | const F32 MIN_DOT_RADIUS = 3.5f; | ||
80 | const F32 DOT_SCALE = 0.75f; | ||
81 | const F32 MIN_PICK_SCALE = 2.f; | ||
78 | const S32 SLOP = 2; | 82 | const S32 SLOP = 2; |
79 | |||
80 | const S32 TRACKING_RADIUS = 3; | 83 | const S32 TRACKING_RADIUS = 3; |
81 | 84 | ||
82 | LLNetMap::LLNetMap(const std::string& name) : | 85 | LLNetMap::LLNetMap(const std::string& name) : |
@@ -92,6 +95,7 @@ LLNetMap::LLNetMap(const std::string& name) : | |||
92 | { | 95 | { |
93 | mScale = gSavedSettings.getF32("MiniMapScale"); | 96 | mScale = gSavedSettings.getF32("MiniMapScale"); |
94 | mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); | 97 | mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); |
98 | mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); | ||
95 | 99 | ||
96 | mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal(); | 100 | mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal(); |
97 | 101 | ||
@@ -99,6 +103,8 @@ LLNetMap::LLNetMap(const std::string& name) : | |||
99 | (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel"); | 103 | (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel"); |
100 | (new LLCenterMap())->registerListener(this, "MiniMap.Center"); | 104 | (new LLCenterMap())->registerListener(this, "MiniMap.Center"); |
101 | (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter"); | 105 | (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter"); |
106 | (new LLRotateMap())->registerListener(this, "MiniMap.Rotate"); | ||
107 | (new LLCheckRotateMap())->registerListener(this, "MiniMap.CheckRotate"); | ||
102 | (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap"); | 108 | (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap"); |
103 | (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking"); | 109 | (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking"); |
104 | (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking"); | 110 | (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking"); |
@@ -118,6 +124,11 @@ LLNetMap::LLNetMap(const std::string& name) : | |||
118 | mPopupMenuHandle = menu->getHandle(); | 124 | mPopupMenuHandle = menu->getHandle(); |
119 | } | 125 | } |
120 | 126 | ||
127 | BOOL LLNetMap::postBuild() | ||
128 | { | ||
129 | return TRUE; | ||
130 | } | ||
131 | |||
121 | LLNetMap::~LLNetMap() | 132 | LLNetMap::~LLNetMap() |
122 | { | 133 | { |
123 | } | 134 | } |
@@ -144,6 +155,7 @@ void LLNetMap::setScale( F32 scale ) | |||
144 | } | 155 | } |
145 | 156 | ||
146 | mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); | 157 | mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); |
158 | mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); | ||
147 | 159 | ||
148 | mUpdateNow = TRUE; | 160 | mUpdateNow = TRUE; |
149 | } | 161 | } |
@@ -326,12 +338,16 @@ void LLNetMap::draw() | |||
326 | LLUI::getCursorPositionLocal(this, &local_mouse_x, &local_mouse_y); | 338 | LLUI::getCursorPositionLocal(this, &local_mouse_x, &local_mouse_y); |
327 | mClosestAgentToCursor.setNull(); | 339 | mClosestAgentToCursor.setNull(); |
328 | F32 closest_dist = F32_MAX; | 340 | F32 closest_dist = F32_MAX; |
341 | F32 min_pick_dist = mDotRadius * MIN_PICK_SCALE; | ||
329 | 342 | ||
330 | // Draw avatars | 343 | // Draw avatars |
331 | LLColor4 avatar_color = gColors.getColor( "MapAvatar" ); | 344 | LLColor4 avatar_color = gColors.getColor( "MapAvatar" ); |
332 | LLColor4 friend_color = gColors.getColor( "MapFriend" ); | 345 | LLColor4 friend_color = gColors.getColor( "MapFriend" ); |
333 | LLColor4 muted_color = gColors.getColor( "MapMuted" ); | 346 | LLColor4 muted_color = gColors.getColor( "MapMuted" ); |
347 | LLColor4 selected_color = gColors.getColor( "MapSelected" ); | ||
348 | LLColor4 imp_dev_color = gColors.getColor( "MapImpDev" ); | ||
334 | LLColor4 glyph_color; | 349 | LLColor4 glyph_color; |
350 | int selected = -1; | ||
335 | 351 | ||
336 | std::vector<LLUUID> avatar_ids; | 352 | std::vector<LLUUID> avatar_ids; |
337 | std::vector<LLVector3d> positions; | 353 | std::vector<LLVector3d> positions; |
@@ -341,34 +357,78 @@ void LLNetMap::draw() | |||
341 | // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest. | 357 | // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest. |
342 | // just be careful to sort the avatar IDs along with the positions. -MG | 358 | // just be careful to sort the avatar IDs along with the positions. -MG |
343 | pos_map = globalPosToView(positions[i], rotate_map); | 359 | pos_map = globalPosToView(positions[i], rotate_map); |
344 | 360 | ||
345 | // Show them muted even if they're friends | 361 | // Save this entry to draw last |
346 | if (LLMuteList::getInstance()->isMuted(avatar_ids[i])) | 362 | if (LLFloaterMap::getSelected() == avatar_ids[i]) |
347 | { | 363 | { |
348 | glyph_color = muted_color; | 364 | selected = i; |
365 | continue; | ||
349 | } | 366 | } |
350 | else if (is_agent_friend(avatar_ids[i])) | 367 | else |
351 | { | 368 | { |
352 | glyph_color = friend_color; | 369 | // Show them muted even if they're friends |
370 | if (LLMuteList::getInstance()->isMuted(avatar_ids[i])) | ||
371 | { | ||
372 | glyph_color = muted_color; | ||
373 | } | ||
374 | else if (LLFloaterMap::isImpDev(avatar_ids[i])) | ||
375 | { | ||
376 | glyph_color = imp_dev_color; | ||
377 | } | ||
378 | else if (is_agent_friend(avatar_ids[i])) | ||
379 | { | ||
380 | glyph_color = friend_color; | ||
381 | } | ||
382 | else | ||
383 | { | ||
384 | glyph_color = avatar_color; | ||
385 | } | ||
353 | } | 386 | } |
354 | else | 387 | |
388 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
389 | if ( gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ) | ||
355 | { | 390 | { |
391 | // User is not allowed to see who it is, or even if it's a friend, | ||
392 | // due to RLV settings. | ||
356 | glyph_color = avatar_color; | 393 | glyph_color = avatar_color; |
357 | } | 394 | } |
395 | // [/RLVa:KB] | ||
358 | 396 | ||
359 | LLWorldMapView::drawAvatar( | 397 | LLWorldMapView::drawAvatar( |
360 | pos_map.mV[VX], pos_map.mV[VY], | 398 | pos_map.mV[VX], pos_map.mV[VY], |
361 | glyph_color, | 399 | glyph_color, |
362 | pos_map.mV[VZ]); | 400 | pos_map.mV[VZ], |
401 | mDotRadius); | ||
363 | 402 | ||
364 | F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); | 403 | F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); |
365 | if(dist_to_cursor < MAP_MIN_PICK_DIST && dist_to_cursor < closest_dist) | 404 | if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist) |
366 | { | 405 | { |
367 | closest_dist = dist_to_cursor; | 406 | closest_dist = dist_to_cursor; |
368 | mClosestAgentToCursor = avatar_ids[i]; | 407 | mClosestAgentToCursor = avatar_ids[i]; |
369 | } | 408 | } |
370 | } | 409 | } |
371 | 410 | ||
411 | // Draw dot for selected avatar last | ||
412 | if (selected >= 0 && avatar_ids[selected].notNull()) | ||
413 | { | ||
414 | pos_map = globalPosToView(positions[selected], rotate_map); | ||
415 | F32 glyph_radius = mDotRadius * 1.7f; | ||
416 | glyph_color = selected_color; | ||
417 | |||
418 | LLWorldMapView::drawAvatar( | ||
419 | pos_map.mV[VX], pos_map.mV[VY], | ||
420 | glyph_color, | ||
421 | pos_map.mV[VZ], | ||
422 | glyph_radius); | ||
423 | |||
424 | F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); | ||
425 | if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist) | ||
426 | { | ||
427 | closest_dist = dist_to_cursor; | ||
428 | mClosestAgentToCursor = avatar_ids[selected]; | ||
429 | } | ||
430 | } | ||
431 | |||
372 | // Draw dot for autopilot target | 432 | // Draw dot for autopilot target |
373 | if (gAgent.getAutoPilot()) | 433 | if (gAgent.getAutoPilot()) |
374 | { | 434 | { |
@@ -391,10 +451,13 @@ void LLNetMap::draw() | |||
391 | // Draw dot for self avatar position | 451 | // Draw dot for self avatar position |
392 | pos_global = gAgent.getPositionGlobal(); | 452 | pos_global = gAgent.getPositionGlobal(); |
393 | pos_map = globalPosToView(pos_global, rotate_map); | 453 | pos_map = globalPosToView(pos_global, rotate_map); |
394 | LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage; | 454 | LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage; |
455 | S32 dot_width = llround(mDotRadius * 2.f); | ||
395 | you->draw( | 456 | you->draw( |
396 | llround(pos_map.mV[VX]) - you->getWidth()/2, | 457 | llround(pos_map.mV[VX] - mDotRadius), |
397 | llround(pos_map.mV[VY]) - you->getHeight()/2); | 458 | llround(pos_map.mV[VY] - mDotRadius), |
459 | dot_width, | ||
460 | dot_width); | ||
398 | 461 | ||
399 | // Draw frustum | 462 | // Draw frustum |
400 | F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters(); | 463 | F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters(); |
@@ -451,6 +514,8 @@ void LLNetMap::draw() | |||
451 | setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2); | 514 | setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2); |
452 | 515 | ||
453 | LLView::draw(); | 516 | LLView::draw(); |
517 | |||
518 | LLFloaterMap::updateRadar(); | ||
454 | } | 519 | } |
455 | 520 | ||
456 | void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) | 521 | void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) |
@@ -533,8 +598,12 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y, BOOL rotated ) | |||
533 | 598 | ||
534 | BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks) | 599 | BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks) |
535 | { | 600 | { |
536 | // note that clicks are reversed from what you'd think | 601 | // note that clicks are reversed from what you'd think: i.e. > 0 means zoom out, < 0 means zoom in |
537 | setScale(llclamp(mScale - clicks*MAP_SCALE_INCREMENT, MAP_SCALE_MIN, MAP_SCALE_MAX)); | 602 | F32 scale = mScale; |
603 | |||
604 | scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks); | ||
605 | setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX)); | ||
606 | |||
538 | return TRUE; | 607 | return TRUE; |
539 | } | 608 | } |
540 | 609 | ||
@@ -552,11 +621,26 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec | |||
552 | std::string fullname; | 621 | std::string fullname; |
553 | if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) | 622 | if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) |
554 | { | 623 | { |
555 | msg.append(fullname); | 624 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 |
625 | // User is not allowed to see who it is, due to RLV settings. | ||
626 | msg.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? fullname : gRlvHandler.getAnonym(fullname) ); | ||
556 | msg.append("\n"); | 627 | msg.append("\n"); |
628 | // [/RLVa:KB] | ||
557 | } | 629 | } |
558 | msg.append( region->getName() ); | ||
559 | 630 | ||
631 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
632 | if ( gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) ) | ||
633 | { | ||
634 | // User is not allowed to see where they are, due to RLV settings. | ||
635 | msg.append( rlv_handler_t::cstrHidden ); | ||
636 | } | ||
637 | else | ||
638 | { | ||
639 | msg.append( region->getName() ); | ||
640 | } | ||
641 | // [/RLVa:KB] | ||
642 | |||
643 | |||
560 | msg.append("\n"); | 644 | msg.append("\n"); |
561 | gSavedSettings.getBOOL( "MiniMapTeleport" ) ? | 645 | gSavedSettings.getBOOL( "MiniMapTeleport" ) ? |
562 | msg.append(getString("tooltip_tp")) : msg.append(getString("tooltip_map")); | 646 | msg.append(getString("tooltip_tp")) : msg.append(getString("tooltip_map")); |
@@ -893,6 +977,22 @@ bool LLNetMap::LLScaleMap::handleEvent(LLPointer<LLEvent> event, const LLSD& use | |||
893 | return true; | 977 | return true; |
894 | } | 978 | } |
895 | 979 | ||
980 | bool LLNetMap::LLRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
981 | { | ||
982 | BOOL rotate = gSavedSettings.getBOOL("MiniMapRotate"); | ||
983 | gSavedSettings.setBOOL("MiniMapRotate", !rotate); | ||
984 | |||
985 | return true; | ||
986 | } | ||
987 | |||
988 | bool LLNetMap::LLCheckRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
989 | { | ||
990 | LLNetMap *self = mPtr; | ||
991 | BOOL enabled = gSavedSettings.getBOOL("MiniMapRotate"); | ||
992 | self->findControl(userdata["control"].asString())->setValue(enabled); | ||
993 | return true; | ||
994 | } | ||
995 | |||
896 | bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 996 | bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
897 | { | 997 | { |
898 | S32 center = userdata.asInteger(); | 998 | S32 center = userdata.asInteger(); |
@@ -940,6 +1040,13 @@ bool LLNetMap::LLEnableTracking::handleEvent(LLPointer<LLEvent> event, const LLS | |||
940 | 1040 | ||
941 | bool LLNetMap::LLShowAgentProfile::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 1041 | bool LLNetMap::LLShowAgentProfile::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
942 | { | 1042 | { |
1043 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
1044 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
1045 | { | ||
1046 | return true; | ||
1047 | } | ||
1048 | // [/RLVa:KB] | ||
1049 | |||
943 | LLNetMap *self = mPtr; | 1050 | LLNetMap *self = mPtr; |
944 | LLFloaterAvatarInfo::show(self->mClosestAgentAtLastRightClick); | 1051 | LLFloaterAvatarInfo::show(self->mClosestAgentAtLastRightClick); |
945 | return true; | 1052 | return true; |
@@ -948,6 +1055,9 @@ bool LLNetMap::LLShowAgentProfile::handleEvent(LLPointer<LLEvent> event, const L | |||
948 | bool LLNetMap::LLEnableProfile::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 1055 | bool LLNetMap::LLEnableProfile::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
949 | { | 1056 | { |
950 | LLNetMap *self = mPtr; | 1057 | LLNetMap *self = mPtr; |
951 | self->findControl(userdata["control"].asString())->setValue(self->isAgentUnderCursor()); | 1058 | //self->findControl(userdata["control"].asString())->setValue(self->isAgentUnderCursor()); |
1059 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
1060 | self->findControl(userdata["control"].asString())->setValue(self->isAgentUnderCursor() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
1061 | // [/RLVa:KB] | ||
952 | return true; | 1062 | return true; |
953 | } | 1063 | } |
diff --git a/linden/indra/newview/llnetmap.h b/linden/indra/newview/llnetmap.h index 4202e24..c0c19d5 100644 --- a/linden/indra/newview/llnetmap.h +++ b/linden/indra/newview/llnetmap.h | |||
@@ -53,6 +53,8 @@ class LLNetMap : public LLPanel | |||
53 | { | 53 | { |
54 | public: | 54 | public: |
55 | LLNetMap(const std::string& name); | 55 | LLNetMap(const std::string& name); |
56 | |||
57 | virtual BOOL postBuild(); | ||
56 | virtual ~LLNetMap(); | 58 | virtual ~LLNetMap(); |
57 | 59 | ||
58 | virtual void draw(); | 60 | virtual void draw(); |
@@ -94,7 +96,8 @@ private: | |||
94 | F32 mScale; // Size of a region in pixels | 96 | F32 mScale; // Size of a region in pixels |
95 | F32 mPixelsPerMeter; // world meters to map pixels | 97 | F32 mPixelsPerMeter; // world meters to map pixels |
96 | F32 mObjectMapTPM; // texels per meter on map | 98 | F32 mObjectMapTPM; // texels per meter on map |
97 | F32 mObjectMapPixels; // Width of object map in pixels; | 99 | F32 mObjectMapPixels; // Width of object map in pixels |
100 | F32 mDotRadius; // Size of avatar markers | ||
98 | F32 mTargetPanX; | 101 | F32 mTargetPanX; |
99 | F32 mTargetPanY; | 102 | F32 mTargetPanY; |
100 | F32 mCurPanX; | 103 | F32 mCurPanX; |
@@ -112,8 +115,8 @@ private: | |||
112 | LLPointer<LLImageGL> mObjectImagep; | 115 | LLPointer<LLImageGL> mObjectImagep; |
113 | 116 | ||
114 | private: | 117 | private: |
115 | LLUUID mClosestAgentToCursor; | 118 | LLUUID mClosestAgentToCursor; |
116 | LLUUID mClosestAgentAtLastRightClick; | 119 | LLUUID mClosestAgentAtLastRightClick; |
117 | 120 | ||
118 | static BOOL sRotateMap; | 121 | static BOOL sRotateMap; |
119 | static LLNetMap* sInstance; | 122 | static LLNetMap* sInstance; |
@@ -141,6 +144,18 @@ private: | |||
141 | /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); | 144 | /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); |
142 | }; | 145 | }; |
143 | 146 | ||
147 | class LLRotateMap : public LLMemberListener<LLNetMap> | ||
148 | { | ||
149 | public: | ||
150 | /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); | ||
151 | }; | ||
152 | |||
153 | class LLCheckRotateMap : public LLMemberListener<LLNetMap> | ||
154 | { | ||
155 | public: | ||
156 | /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); | ||
157 | }; | ||
158 | |||
144 | class LLShowWorldMap : public LLMemberListener<LLNetMap> | 159 | class LLShowWorldMap : public LLMemberListener<LLNetMap> |
145 | { | 160 | { |
146 | public: | 161 | public: |
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp index a119dc4..6820622 100644 --- a/linden/indra/newview/llnotify.cpp +++ b/linden/indra/newview/llnotify.cpp | |||
@@ -55,7 +55,10 @@ | |||
55 | #include "lloverlaybar.h" // for gOverlayBar | 55 | #include "lloverlaybar.h" // for gOverlayBar |
56 | #include "lluictrlfactory.h" | 56 | #include "lluictrlfactory.h" |
57 | 57 | ||
58 | 58 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b | |
59 | #include "rlvhandler.h" | ||
60 | // [/RLVa:KB] | ||
61 | |||
59 | // Globals | 62 | // Globals |
60 | LLNotifyBoxView* gNotifyBoxView = NULL; | 63 | LLNotifyBoxView* gNotifyBoxView = NULL; |
61 | 64 | ||
@@ -270,6 +273,13 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, | |||
270 | // TODO: Make a separate archive for these. | 273 | // TODO: Make a separate archive for these. |
271 | LLChat chat(mMessage); | 274 | LLChat chat(mMessage); |
272 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | 275 | chat.mSourceType = CHAT_SOURCE_SYSTEM; |
276 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b | ||
277 | if (rlv_handler_t::isEnabled()) | ||
278 | { | ||
279 | // Notices should already have their contents filtered where necessary | ||
280 | chat.mRlvLocFiltered = chat.mRlvNamesFiltered = TRUE; | ||
281 | } | ||
282 | // [/RLVa:KB] | ||
273 | LLFloaterChat::getInstance(LLSD())->addChatHistory(chat); | 283 | LLFloaterChat::getInstance(LLSD())->addChatHistory(chat); |
274 | } | 284 | } |
275 | else | 285 | else |
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp index 24b1474..599d736 100644 --- a/linden/indra/newview/lloverlaybar.cpp +++ b/linden/indra/newview/lloverlaybar.cpp | |||
@@ -42,6 +42,7 @@ | |||
42 | #include "llagent.h" | 42 | #include "llagent.h" |
43 | #include "llbutton.h" | 43 | #include "llbutton.h" |
44 | #include "llchatbar.h" | 44 | #include "llchatbar.h" |
45 | #include "llfloaterchat.h" | ||
45 | #include "llfocusmgr.h" | 46 | #include "llfocusmgr.h" |
46 | #include "llimview.h" | 47 | #include "llimview.h" |
47 | #include "llmediaremotectrl.h" | 48 | #include "llmediaremotectrl.h" |
@@ -63,6 +64,7 @@ | |||
63 | #include "llvoavatar.h" | 64 | #include "llvoavatar.h" |
64 | #include "llvoiceremotectrl.h" | 65 | #include "llvoiceremotectrl.h" |
65 | #include "llwebbrowserctrl.h" | 66 | #include "llwebbrowserctrl.h" |
67 | #include "llwindlightremotectrl.h" | ||
66 | #include "llselectmgr.h" | 68 | #include "llselectmgr.h" |
67 | 69 | ||
68 | // | 70 | // |
@@ -73,6 +75,53 @@ LLOverlayBar *gOverlayBar = NULL; | |||
73 | 75 | ||
74 | extern S32 MENU_BAR_HEIGHT; | 76 | extern S32 MENU_BAR_HEIGHT; |
75 | 77 | ||
78 | |||
79 | class LLTitleObserver | ||
80 | : public LLMediaObserver | ||
81 | { | ||
82 | public: | ||
83 | void init(std::string url); | ||
84 | /*virtual*/ void onMediaTitleChange(const EventType& event_in); | ||
85 | private: | ||
86 | LLMediaBase* mMediaSource; | ||
87 | }; | ||
88 | |||
89 | static LLTitleObserver sTitleObserver; | ||
90 | |||
91 | static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote"); | ||
92 | |||
93 | void LLTitleObserver::init(std::string url) | ||
94 | { | ||
95 | |||
96 | if (!gAudiop) | ||
97 | { | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | mMediaSource = gAudiop->getStreamMedia(); // LLViewerMedia::getSource(); | ||
102 | |||
103 | if ( mMediaSource ) | ||
104 | { | ||
105 | mMediaSource->addObserver(this); | ||
106 | } | ||
107 | } | ||
108 | |||
109 | //virtual | ||
110 | void LLTitleObserver::onMediaTitleChange(const EventType& event_in) | ||
111 | { | ||
112 | if ( !gSavedSettings.getBOOL("ShowStreamTitle") ) | ||
113 | { | ||
114 | return; | ||
115 | } | ||
116 | |||
117 | LLChat chat; | ||
118 | //TODO: set this in XUI | ||
119 | std::string playing_msg = "Playing: " + event_in.getStringValue(); | ||
120 | chat.mText = playing_msg; | ||
121 | LLFloaterChat::addChat(chat, FALSE, FALSE); | ||
122 | } | ||
123 | |||
124 | |||
76 | // | 125 | // |
77 | // Functions | 126 | // Functions |
78 | // | 127 | // |
@@ -93,6 +142,13 @@ void* LLOverlayBar::createVoiceRemote(void* userdata) | |||
93 | return self->mVoiceRemote; | 142 | return self->mVoiceRemote; |
94 | } | 143 | } |
95 | 144 | ||
145 | void* LLOverlayBar::createWindlightRemote(void* userdata) | ||
146 | { | ||
147 | LLOverlayBar *self = (LLOverlayBar*)userdata; | ||
148 | self->mWindlightRemote = new LLWindlightRemoteCtrl(); | ||
149 | return self->mWindlightRemote; | ||
150 | } | ||
151 | |||
96 | void* LLOverlayBar::createChatBar(void* userdata) | 152 | void* LLOverlayBar::createChatBar(void* userdata) |
97 | { | 153 | { |
98 | gChatBar = new LLChatBar(); | 154 | gChatBar = new LLChatBar(); |
@@ -103,6 +159,7 @@ LLOverlayBar::LLOverlayBar() | |||
103 | : LLPanel(), | 159 | : LLPanel(), |
104 | mMediaRemote(NULL), | 160 | mMediaRemote(NULL), |
105 | mVoiceRemote(NULL), | 161 | mVoiceRemote(NULL), |
162 | mWindlightRemote(NULL), | ||
106 | mMusicState(STOPPED), | 163 | mMusicState(STOPPED), |
107 | mOriginalIMLabel("") | 164 | mOriginalIMLabel("") |
108 | { | 165 | { |
@@ -114,6 +171,7 @@ LLOverlayBar::LLOverlayBar() | |||
114 | LLCallbackMap::map_t factory_map; | 171 | LLCallbackMap::map_t factory_map; |
115 | factory_map["media_remote"] = LLCallbackMap(LLOverlayBar::createMediaRemote, this); | 172 | factory_map["media_remote"] = LLCallbackMap(LLOverlayBar::createMediaRemote, this); |
116 | factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this); | 173 | factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this); |
174 | factory_map["windlight_remote"] = LLCallbackMap(LLOverlayBar::createWindlightRemote, this); | ||
117 | factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this); | 175 | factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this); |
118 | 176 | ||
119 | LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map); | 177 | LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map); |
@@ -258,7 +316,10 @@ void LLOverlayBar::refresh() | |||
258 | BOOL sitting = FALSE; | 316 | BOOL sitting = FALSE; |
259 | if (gAgent.getAvatarObject()) | 317 | if (gAgent.getAvatarObject()) |
260 | { | 318 | { |
261 | sitting = gAgent.getAvatarObject()->mIsSitting; | 319 | // sitting = gAgent.getAvatarObject()->mIsSitting; |
320 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
321 | sitting = gAgent.getAvatarObject()->mIsSitting && !gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT); | ||
322 | // [/RLVa:KB] | ||
262 | } | 323 | } |
263 | button = getChild<LLButton>("Stand Up"); | 324 | button = getChild<LLButton>("Stand Up"); |
264 | 325 | ||
@@ -271,6 +332,7 @@ void LLOverlayBar::refresh() | |||
271 | } | 332 | } |
272 | 333 | ||
273 | 334 | ||
335 | moveChildToBackOfTabGroup(mWindlightRemote); | ||
274 | moveChildToBackOfTabGroup(mMediaRemote); | 336 | moveChildToBackOfTabGroup(mMediaRemote); |
275 | moveChildToBackOfTabGroup(mVoiceRemote); | 337 | moveChildToBackOfTabGroup(mVoiceRemote); |
276 | 338 | ||
@@ -279,6 +341,7 @@ void LLOverlayBar::refresh() | |||
279 | { | 341 | { |
280 | childSetVisible("media_remote_container", FALSE); | 342 | childSetVisible("media_remote_container", FALSE); |
281 | childSetVisible("voice_remote_container", FALSE); | 343 | childSetVisible("voice_remote_container", FALSE); |
344 | childSetVisible("windlight_remote_container", FALSE); | ||
282 | childSetVisible("state_buttons", FALSE); | 345 | childSetVisible("state_buttons", FALSE); |
283 | } | 346 | } |
284 | else | 347 | else |
@@ -286,6 +349,7 @@ void LLOverlayBar::refresh() | |||
286 | // update "remotes" | 349 | // update "remotes" |
287 | childSetVisible("media_remote_container", TRUE); | 350 | childSetVisible("media_remote_container", TRUE); |
288 | childSetVisible("voice_remote_container", LLVoiceClient::voiceEnabled()); | 351 | childSetVisible("voice_remote_container", LLVoiceClient::voiceEnabled()); |
352 | childSetVisible("windlight_remote_container", gSavedSettings.getBOOL("EnableWindlightRemote")); | ||
289 | childSetVisible("state_buttons", TRUE); | 353 | childSetVisible("state_buttons", TRUE); |
290 | } | 354 | } |
291 | 355 | ||
@@ -338,6 +402,13 @@ void LLOverlayBar::onClickMouselook(void*) | |||
338 | //static | 402 | //static |
339 | void LLOverlayBar::onClickStandUp(void*) | 403 | void LLOverlayBar::onClickStandUp(void*) |
340 | { | 404 | { |
405 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
406 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) && (gAgent.getAvatarObject()->mIsSitting) ) | ||
407 | { | ||
408 | return; | ||
409 | } | ||
410 | // [/RLVa:KB] | ||
411 | |||
341 | LLSelectMgr::getInstance()->deselectAllForStandingUp(); | 412 | LLSelectMgr::getInstance()->deselectAllForStandingUp(); |
342 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | 413 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); |
343 | } | 414 | } |
@@ -408,6 +479,7 @@ void LLOverlayBar::toggleMusicPlay(void*) | |||
408 | // if ( gAudiop->isInternetStreamPlaying() == 0 ) | 479 | // if ( gAudiop->isInternetStreamPlaying() == 0 ) |
409 | { | 480 | { |
410 | gAudiop->startInternetStream(parcel->getMusicURL()); | 481 | gAudiop->startInternetStream(parcel->getMusicURL()); |
482 | sTitleObserver.init(parcel->getMusicURL()); | ||
411 | } | 483 | } |
412 | } | 484 | } |
413 | } | 485 | } |
diff --git a/linden/indra/newview/lloverlaybar.h b/linden/indra/newview/lloverlaybar.h index 1d55cc4..50ad3d1 100644 --- a/linden/indra/newview/lloverlaybar.h +++ b/linden/indra/newview/lloverlaybar.h | |||
@@ -41,6 +41,7 @@ extern S32 STATUS_BAR_HEIGHT; | |||
41 | class LLButton; | 41 | class LLButton; |
42 | class LLLineEditor; | 42 | class LLLineEditor; |
43 | class LLMediaRemoteCtrl; | 43 | class LLMediaRemoteCtrl; |
44 | |||
44 | class LLMessageSystem; | 45 | class LLMessageSystem; |
45 | class LLTextBox; | 46 | class LLTextBox; |
46 | class LLTextEditor; | 47 | class LLTextEditor; |
@@ -50,6 +51,7 @@ class LLFrameTimer; | |||
50 | class LLStatGraph; | 51 | class LLStatGraph; |
51 | class LLSlider; | 52 | class LLSlider; |
52 | class LLVoiceRemoteCtrl; | 53 | class LLVoiceRemoteCtrl; |
54 | class LLWindlightRemoteCtrl; | ||
53 | 55 | ||
54 | class LLOverlayBar | 56 | class LLOverlayBar |
55 | : public LLPanel | 57 | : public LLPanel |
@@ -89,13 +91,15 @@ public: | |||
89 | protected: | 91 | protected: |
90 | static void* createMediaRemote(void* userdata); | 92 | static void* createMediaRemote(void* userdata); |
91 | static void* createVoiceRemote(void* userdata); | 93 | static void* createVoiceRemote(void* userdata); |
94 | static void* createWindlightRemote(void* userdata); | ||
92 | static void* createChatBar(void* userdata); | 95 | static void* createChatBar(void* userdata); |
93 | 96 | ||
94 | void enableMediaButtons(); | 97 | void enableMediaButtons(); |
95 | 98 | ||
96 | protected: | 99 | protected: |
97 | LLMediaRemoteCtrl* mMediaRemote; | 100 | LLMediaRemoteCtrl* mMediaRemote; |
98 | LLVoiceRemoteCtrl* mVoiceRemote; | 101 | LLVoiceRemoteCtrl* mVoiceRemote; |
102 | LLWindlightRemoteCtrl* mWindlightRemote; | ||
99 | bool mBuilt; // dialog constructed yet? | 103 | bool mBuilt; // dialog constructed yet? |
100 | S32 mMusicState; | 104 | S32 mMusicState; |
101 | std::string mOriginalIMLabel; | 105 | std::string mOriginalIMLabel; |
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp index ed7a71b..489f0d3 100644 --- a/linden/indra/newview/llpanelavatar.cpp +++ b/linden/indra/newview/llpanelavatar.cpp | |||
@@ -52,6 +52,7 @@ | |||
52 | 52 | ||
53 | #include "llfloaterfriends.h" | 53 | #include "llfloaterfriends.h" |
54 | #include "llfloatergroupinfo.h" | 54 | #include "llfloatergroupinfo.h" |
55 | #include "llfloatergroups.h" | ||
55 | #include "llfloaterworldmap.h" | 56 | #include "llfloaterworldmap.h" |
56 | #include "llfloatermute.h" | 57 | #include "llfloatermute.h" |
57 | #include "llfloateravatarinfo.h" | 58 | #include "llfloateravatarinfo.h" |
@@ -84,6 +85,7 @@ | |||
84 | std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels; | 85 | std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels; |
85 | BOOL LLPanelAvatar::sAllowFirstLife = FALSE; | 86 | BOOL LLPanelAvatar::sAllowFirstLife = FALSE; |
86 | 87 | ||
88 | extern void callback_invite_to_group(LLUUID group_id, void *user_data); | ||
87 | extern void handle_lure(const LLUUID& invitee); | 89 | extern void handle_lure(const LLUUID& invitee); |
88 | extern void handle_pay_by_id(const LLUUID& payee); | 90 | extern void handle_pay_by_id(const LLUUID& payee); |
89 | 91 | ||
@@ -365,6 +367,7 @@ BOOL LLPanelAvatarSecondLife::postBuild(void) | |||
365 | 367 | ||
366 | childSetAction("Find on Map", LLPanelAvatar::onClickTrack, getPanelAvatar()); | 368 | childSetAction("Find on Map", LLPanelAvatar::onClickTrack, getPanelAvatar()); |
367 | childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar()); | 369 | childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar()); |
370 | childSetAction("Invite to Group...", LLPanelAvatar::onClickGroupInvite, getPanelAvatar()); | ||
368 | 371 | ||
369 | childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar()); | 372 | childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar()); |
370 | childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar()); | 373 | childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar()); |
@@ -731,6 +734,9 @@ void LLPanelAvatarClassified::refresh() | |||
731 | S32 tab_count = tabs ? tabs->getTabCount() : 0; | 734 | S32 tab_count = tabs ? tabs->getTabCount() : 0; |
732 | 735 | ||
733 | bool allow_new = tab_count < MAX_CLASSIFIEDS; | 736 | bool allow_new = tab_count < MAX_CLASSIFIEDS; |
737 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
738 | allow_new &= !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); | ||
739 | // [/RLVa:KB] | ||
734 | bool allow_delete = (tab_count > 0); | 740 | bool allow_delete = (tab_count > 0); |
735 | bool show_help = (tab_count == 0); | 741 | bool show_help = (tab_count == 0); |
736 | 742 | ||
@@ -866,6 +872,12 @@ void LLPanelAvatarClassified::processAvatarClassifiedReply(LLMessageSystem* msg, | |||
866 | // static | 872 | // static |
867 | void LLPanelAvatarClassified::onClickNew(void* data) | 873 | void LLPanelAvatarClassified::onClickNew(void* data) |
868 | { | 874 | { |
875 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-04 (RLVa-1.0.0a) | ||
876 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
877 | { | ||
878 | return; | ||
879 | } | ||
880 | // [/RLVa:KB] | ||
869 | LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data; | 881 | LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data; |
870 | 882 | ||
871 | LLNotifications::instance().add("AddClassified", LLSD(), LLSD(), boost::bind(&LLPanelAvatarClassified::callbackNew, self, _1, _2)); | 883 | LLNotifications::instance().add("AddClassified", LLSD(), LLSD(), boost::bind(&LLPanelAvatarClassified::callbackNew, self, _1, _2)); |
@@ -961,7 +973,10 @@ void LLPanelAvatarPicks::refresh() | |||
961 | BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID()); | 973 | BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID()); |
962 | LLTabContainer* tabs = getChild<LLTabContainer>("picks tab"); | 974 | LLTabContainer* tabs = getChild<LLTabContainer>("picks tab"); |
963 | S32 tab_count = tabs ? tabs->getTabCount() : 0; | 975 | S32 tab_count = tabs ? tabs->getTabCount() : 0; |
964 | childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS); | 976 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) |
977 | childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ); | ||
978 | // [/RLVa:KB] | ||
979 | //childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS); | ||
965 | childSetEnabled("Delete...", self && tab_count > 0); | 980 | childSetEnabled("Delete...", self && tab_count > 0); |
966 | childSetVisible("New...", self && getPanelAvatar()->isEditable()); | 981 | childSetVisible("New...", self && getPanelAvatar()->isEditable()); |
967 | childSetVisible("Delete...", self && getPanelAvatar()->isEditable()); | 982 | childSetVisible("Delete...", self && getPanelAvatar()->isEditable()); |
@@ -1039,6 +1054,12 @@ void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**) | |||
1039 | // static | 1054 | // static |
1040 | void LLPanelAvatarPicks::onClickNew(void* data) | 1055 | void LLPanelAvatarPicks::onClickNew(void* data) |
1041 | { | 1056 | { |
1057 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
1058 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
1059 | { | ||
1060 | return; | ||
1061 | } | ||
1062 | // [/RLVa:KB] | ||
1042 | LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data; | 1063 | LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data; |
1043 | LLPanelPick* panel_pick = new LLPanelPick(FALSE); | 1064 | LLPanelPick* panel_pick = new LLPanelPick(FALSE); |
1044 | LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab"); | 1065 | LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab"); |
@@ -1238,14 +1259,6 @@ void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status) | |||
1238 | 1259 | ||
1239 | mPanelSecondLife->childSetVisible("online_yes", (online_status == ONLINE_STATUS_YES)); | 1260 | mPanelSecondLife->childSetVisible("online_yes", (online_status == ONLINE_STATUS_YES)); |
1240 | 1261 | ||
1241 | // Since setOnlineStatus gets called after setAvatarID | ||
1242 | // need to make sure that "Offer Teleport" doesn't get set | ||
1243 | // to TRUE again for yourself | ||
1244 | if (mAvatarID != gAgent.getID()) | ||
1245 | { | ||
1246 | childSetVisible("Offer Teleport...",TRUE); | ||
1247 | } | ||
1248 | |||
1249 | BOOL in_prelude = gAgent.inPrelude(); | 1262 | BOOL in_prelude = gAgent.inPrelude(); |
1250 | if(gAgent.isGodlike()) | 1263 | if(gAgent.isGodlike()) |
1251 | { | 1264 | { |
@@ -1262,6 +1275,18 @@ void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status) | |||
1262 | childSetEnabled("Offer Teleport...", TRUE); | 1275 | childSetEnabled("Offer Teleport...", TRUE); |
1263 | childSetToolTip("Offer Teleport...", childGetValue("TeleportNormal").asString()); | 1276 | childSetToolTip("Offer Teleport...", childGetValue("TeleportNormal").asString()); |
1264 | } | 1277 | } |
1278 | |||
1279 | // Since setOnlineStatus gets called after setAvatarID | ||
1280 | // need to make sure that "Offer Teleport" doesn't get set | ||
1281 | // to TRUE again for yourself | ||
1282 | if (mAvatarID != gAgent.getID()) | ||
1283 | { | ||
1284 | childSetVisible("Offer Teleport...",TRUE); | ||
1285 | } | ||
1286 | else | ||
1287 | { | ||
1288 | childSetEnabled("Offer Teleport...", FALSE); | ||
1289 | } | ||
1265 | } | 1290 | } |
1266 | 1291 | ||
1267 | void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name, | 1292 | void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name, |
@@ -1354,20 +1379,30 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name | |||
1354 | childSetVisible("Cancel",FALSE); | 1379 | childSetVisible("Cancel",FALSE); |
1355 | childSetEnabled("Cancel",FALSE); | 1380 | childSetEnabled("Cancel",FALSE); |
1356 | } | 1381 | } |
1357 | childSetVisible("Instant Message...",FALSE); | 1382 | //childSetVisible("Instant Message...",FALSE); |
1358 | childSetEnabled("Instant Message...",FALSE); | 1383 | childSetEnabled("Instant Message...",FALSE); |
1359 | childSetVisible("Mute",FALSE); | 1384 | //childSetVisible("Invite to Group...",FALSE); |
1385 | childSetEnabled("Invite to Group...",FALSE); | ||
1386 | //childSetVisible("Mute",FALSE); | ||
1360 | childSetEnabled("Mute",FALSE); | 1387 | childSetEnabled("Mute",FALSE); |
1361 | childSetVisible("Offer Teleport...",FALSE); | 1388 | //childSetVisible("Offer Teleport...",FALSE); |
1362 | childSetEnabled("Offer Teleport...",FALSE); | 1389 | childSetEnabled("Offer Teleport...",FALSE); |
1363 | childSetVisible("drop target",FALSE); | 1390 | //childSetVisible("drop target",FALSE); |
1364 | childSetEnabled("drop target",FALSE); | 1391 | childSetEnabled("drop target",FALSE); |
1365 | childSetVisible("Find on Map",FALSE); | 1392 | //childSetVisible("Find on Map",FALSE); |
1366 | childSetEnabled("Find on Map",FALSE); | 1393 | childSetEnabled("Find on Map",FALSE); |
1367 | childSetVisible("Add Friend...",FALSE); | 1394 | //childSetVisible("Add Friend...",FALSE); |
1368 | childSetEnabled("Add Friend...",FALSE); | 1395 | childSetEnabled("Add Friend...",FALSE); |
1369 | childSetVisible("Pay...",FALSE); | 1396 | //childSetVisible("Pay...",FALSE); |
1370 | childSetEnabled("Pay...",FALSE); | 1397 | childSetEnabled("Pay...",FALSE); |
1398 | childSetVisible("Kick",FALSE); | ||
1399 | childSetEnabled("Kick",FALSE); | ||
1400 | childSetVisible("Freeze",FALSE); | ||
1401 | childSetEnabled("Freeze",FALSE); | ||
1402 | childSetVisible("Unfreeze",FALSE); | ||
1403 | childSetEnabled("Unfreeze",FALSE); | ||
1404 | childSetVisible("csr_btn", FALSE); | ||
1405 | childSetEnabled("csr_btn", FALSE); | ||
1371 | } | 1406 | } |
1372 | else | 1407 | else |
1373 | { | 1408 | { |
@@ -1379,6 +1414,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name | |||
1379 | 1414 | ||
1380 | childSetVisible("Instant Message...",TRUE); | 1415 | childSetVisible("Instant Message...",TRUE); |
1381 | childSetEnabled("Instant Message...",FALSE); | 1416 | childSetEnabled("Instant Message...",FALSE); |
1417 | childSetVisible("Invite to Group...",TRUE); | ||
1418 | childSetEnabled("Invite to Group...",FALSE); | ||
1382 | childSetVisible("Mute",TRUE); | 1419 | childSetVisible("Mute",TRUE); |
1383 | childSetEnabled("Mute",FALSE); | 1420 | childSetEnabled("Mute",FALSE); |
1384 | 1421 | ||
@@ -1405,20 +1442,20 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name | |||
1405 | childSetEnabled("Add Friend...", !avatar_is_friend); | 1442 | childSetEnabled("Add Friend...", !avatar_is_friend); |
1406 | childSetVisible("Pay...",TRUE); | 1443 | childSetVisible("Pay...",TRUE); |
1407 | childSetEnabled("Pay...",FALSE); | 1444 | childSetEnabled("Pay...",FALSE); |
1445 | |||
1446 | BOOL is_god = FALSE; | ||
1447 | if (gAgent.isGodlike()) is_god = TRUE; | ||
1448 | |||
1449 | childSetVisible("Kick", is_god); | ||
1450 | childSetEnabled("Kick", is_god); | ||
1451 | childSetVisible("Freeze", is_god); | ||
1452 | childSetEnabled("Freeze", is_god); | ||
1453 | childSetVisible("Unfreeze", is_god); | ||
1454 | childSetEnabled("Unfreeze", is_god); | ||
1455 | childSetVisible("csr_btn", is_god); | ||
1456 | childSetEnabled("csr_btn", is_god); | ||
1408 | } | 1457 | } |
1409 | } | 1458 | } |
1410 | |||
1411 | BOOL is_god = FALSE; | ||
1412 | if (gAgent.isGodlike()) is_god = TRUE; | ||
1413 | |||
1414 | childSetVisible("Kick", is_god); | ||
1415 | childSetEnabled("Kick", is_god); | ||
1416 | childSetVisible("Freeze", is_god); | ||
1417 | childSetEnabled("Freeze", is_god); | ||
1418 | childSetVisible("Unfreeze", is_god); | ||
1419 | childSetEnabled("Unfreeze", is_god); | ||
1420 | childSetVisible("csr_btn", is_god); | ||
1421 | childSetEnabled("csr_btn", is_god); | ||
1422 | } | 1459 | } |
1423 | 1460 | ||
1424 | 1461 | ||
@@ -1461,9 +1498,18 @@ void LLPanelAvatar::resetGroupList() | |||
1461 | LLSD row; | 1498 | LLSD row; |
1462 | 1499 | ||
1463 | row["id"] = id ; | 1500 | row["id"] = id ; |
1464 | row["columns"][0]["value"] = group_string; | ||
1465 | row["columns"][0]["font"] = "SANSSERIF_SMALL"; | 1501 | row["columns"][0]["font"] = "SANSSERIF_SMALL"; |
1466 | row["columns"][0]["width"] = 0; | 1502 | row["columns"][0]["width"] = 0; |
1503 | if (group_data.mListInProfile) | ||
1504 | { | ||
1505 | row["columns"][0]["value"] = group_string; | ||
1506 | row["columns"][0]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
1507 | } | ||
1508 | else | ||
1509 | { | ||
1510 | row["columns"][0]["value"] = group_string + " " + getString("HiddenLabel"); | ||
1511 | row["columns"][0]["color"] = gColors.getColor("ScrollReadOnlyColor").getValue(); | ||
1512 | } | ||
1467 | group_list->addElement(row); | 1513 | group_list->addElement(row); |
1468 | } | 1514 | } |
1469 | group_list->sortByColumnIndex(0, TRUE); | 1515 | group_list->sortByColumnIndex(0, TRUE); |
@@ -1486,6 +1532,22 @@ void LLPanelAvatar::onClickIM(void* userdata) | |||
1486 | gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID); | 1532 | gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID); |
1487 | } | 1533 | } |
1488 | 1534 | ||
1535 | void LLPanelAvatar::onClickGroupInvite(void* userdata) | ||
1536 | { | ||
1537 | LLPanelAvatar* self = (LLPanelAvatar*) userdata; | ||
1538 | if (self->getAvatarID().notNull()) | ||
1539 | { | ||
1540 | LLFloaterGroupPicker* widget; | ||
1541 | widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID())); | ||
1542 | if (widget) | ||
1543 | { | ||
1544 | widget->center(); | ||
1545 | widget->setPowersMask(GP_MEMBER_INVITE); | ||
1546 | widget->setSelectCallback(callback_invite_to_group, (void *)&(self->getAvatarID())); | ||
1547 | } | ||
1548 | } | ||
1549 | } | ||
1550 | |||
1489 | 1551 | ||
1490 | // static | 1552 | // static |
1491 | //----------------------------------------------------------------------------- | 1553 | //----------------------------------------------------------------------------- |
@@ -1702,11 +1764,27 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) | |||
1702 | { | 1764 | { |
1703 | continue; | 1765 | continue; |
1704 | } | 1766 | } |
1705 | self->childSetEnabled("Instant Message...",TRUE); | ||
1706 | self->childSetEnabled("Pay...",TRUE); | ||
1707 | self->childSetEnabled("Mute",TRUE); | ||
1708 | 1767 | ||
1709 | self->childSetEnabled("drop target",TRUE); | 1768 | if (self->mAvatarID == agent_id) |
1769 | { | ||
1770 | self->childSetEnabled("Instant Message...",FALSE); | ||
1771 | self->childSetEnabled("Invite to Group...",FALSE); | ||
1772 | self->childSetEnabled("Pay...",FALSE); | ||
1773 | self->childSetEnabled("Mute",FALSE); | ||
1774 | |||
1775 | self->childSetVisible("drop target",FALSE); | ||
1776 | self->childSetEnabled("drop target",FALSE); | ||
1777 | } | ||
1778 | else | ||
1779 | { | ||
1780 | self->childSetEnabled("Instant Message...",TRUE); | ||
1781 | self->childSetEnabled("Invite to Group...",TRUE); | ||
1782 | self->childSetEnabled("Pay...",TRUE); | ||
1783 | self->childSetEnabled("Mute",TRUE); | ||
1784 | |||
1785 | self->childSetVisible("drop target",TRUE); | ||
1786 | self->childSetEnabled("drop target",TRUE); | ||
1787 | } | ||
1710 | 1788 | ||
1711 | self->mHaveProperties = TRUE; | 1789 | self->mHaveProperties = TRUE; |
1712 | self->enableOKIfReady(); | 1790 | self->enableOKIfReady(); |
@@ -1923,8 +2001,34 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**) | |||
1923 | 2001 | ||
1924 | LLSD row; | 2002 | LLSD row; |
1925 | row["id"] = group_id; | 2003 | row["id"] = group_id; |
1926 | row["columns"][0]["value"] = group_string; | ||
1927 | row["columns"][0]["font"] = "SANSSERIF_SMALL"; | 2004 | row["columns"][0]["font"] = "SANSSERIF_SMALL"; |
2005 | |||
2006 | LLGroupData *group_data = NULL; | ||
2007 | |||
2008 | if (avatar_id == agent_id) // own avatar | ||
2009 | { | ||
2010 | // Search for this group in the agent's groups list | ||
2011 | LLDynamicArray<LLGroupData>::iterator i; | ||
2012 | for (i = gAgent.mGroups.begin(); i != gAgent.mGroups.end(); i++) | ||
2013 | { | ||
2014 | if (i->mID == group_id) | ||
2015 | { | ||
2016 | group_data = &*i; | ||
2017 | break; | ||
2018 | } | ||
2019 | } | ||
2020 | } | ||
2021 | // Set normal color if not found or if group is visible in profile | ||
2022 | if (!group_data || group_data->mListInProfile) | ||
2023 | { | ||
2024 | row["columns"][0]["value"] = group_string; | ||
2025 | row["columns"][0]["color"] = gColors.getColor("ScrollUnselectedColor").getValue(); | ||
2026 | } | ||
2027 | else | ||
2028 | { | ||
2029 | row["columns"][0]["value"] = group_string + " " + self->getString("HiddenLabel"); | ||
2030 | row["columns"][0]["color"] = gColors.getColor("ScrollReadOnlyColor").getValue(); | ||
2031 | } | ||
1928 | if (group_list) | 2032 | if (group_list) |
1929 | { | 2033 | { |
1930 | group_list->addElement(row); | 2034 | group_list->addElement(row); |
diff --git a/linden/indra/newview/llpanelavatar.h b/linden/indra/newview/llpanelavatar.h index 041d503..01653d8 100644 --- a/linden/indra/newview/llpanelavatar.h +++ b/linden/indra/newview/llpanelavatar.h | |||
@@ -312,6 +312,7 @@ public: | |||
312 | 312 | ||
313 | static void onClickTrack( void *userdata); | 313 | static void onClickTrack( void *userdata); |
314 | static void onClickIM( void *userdata); | 314 | static void onClickIM( void *userdata); |
315 | static void onClickGroupInvite( void *userdata); | ||
315 | static void onClickOfferTeleport( void *userdata); | 316 | static void onClickOfferTeleport( void *userdata); |
316 | static void onClickPay( void *userdata); | 317 | static void onClickPay( void *userdata); |
317 | static void onClickAddFriend(void* userdata); | 318 | static void onClickAddFriend(void* userdata); |
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp index 9e4f970..4428133 100644 --- a/linden/indra/newview/llpanelclassified.cpp +++ b/linden/indra/newview/llpanelclassified.cpp | |||
@@ -777,7 +777,10 @@ void LLPanelClassified::refresh() | |||
777 | mClickThroughText->setVisible(is_self); | 777 | mClickThroughText->setVisible(is_self); |
778 | 778 | ||
779 | mSetBtn->setVisible(is_self); | 779 | mSetBtn->setVisible(is_self); |
780 | mSetBtn->setEnabled(is_self); | 780 | //mSetBtn->setEnabled(is_self); |
781 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
782 | mSetBtn->setEnabled(is_self && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ); | ||
783 | // [/RLVa:KB] | ||
781 | 784 | ||
782 | mUpdateBtn->setEnabled(is_self && checkDirty()); | 785 | mUpdateBtn->setEnabled(is_self && checkDirty()); |
783 | mUpdateBtn->setVisible(is_self); | 786 | mUpdateBtn->setVisible(is_self); |
@@ -978,6 +981,12 @@ void LLPanelClassified::onClickLandmark(void* data) | |||
978 | // static | 981 | // static |
979 | void LLPanelClassified::onClickSet(void* data) | 982 | void LLPanelClassified::onClickSet(void* data) |
980 | { | 983 | { |
984 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
985 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
986 | { | ||
987 | return; | ||
988 | } | ||
989 | // [/RLVa:KB] | ||
981 | LLPanelClassified* self = (LLPanelClassified*)data; | 990 | LLPanelClassified* self = (LLPanelClassified*)data; |
982 | 991 | ||
983 | // Save location for later. | 992 | // Save location for later. |
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp index a2f3d9e..d576a20 100644 --- a/linden/indra/newview/llpanelcontents.cpp +++ b/linden/indra/newview/llpanelcontents.cpp | |||
@@ -68,6 +68,10 @@ | |||
68 | #include "lltoolcomp.h" | 68 | #include "lltoolcomp.h" |
69 | #include "llpanelinventory.h" | 69 | #include "llpanelinventory.h" |
70 | 70 | ||
71 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
72 | #include "llvoavatar.h" | ||
73 | // [/RLVa:KB] | ||
74 | |||
71 | // | 75 | // |
72 | // Imported globals | 76 | // Imported globals |
73 | // | 77 | // |
@@ -153,6 +157,22 @@ void LLPanelContents::onClickNewScript(void *userdata) | |||
153 | LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok); | 157 | LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok); |
154 | if(object) | 158 | if(object) |
155 | { | 159 | { |
160 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
161 | if (rlv_handler_t::isEnabled()) // Fallback code [see LLPanelContents::getState()] | ||
162 | { | ||
163 | if (!gRlvHandler.isDetachable(object)) | ||
164 | { | ||
165 | return; // Disallow creating new scripts in a locked attachment | ||
166 | } | ||
167 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP)) ) | ||
168 | { | ||
169 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
170 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == object->getRootEdit()) ) | ||
171 | return; // .. or in a linkset the avie is sitting on under @unsit=n/@sittp=n | ||
172 | } | ||
173 | } | ||
174 | // [/RLVa:KB] | ||
175 | |||
156 | LLPermissions perm; | 176 | LLPermissions perm; |
157 | perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, LLUUID::null); | 177 | perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, LLUUID::null); |
158 | perm.initMasks( | 178 | perm.initMasks( |
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index 035b43f..7d88cf9 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp | |||
@@ -319,6 +319,9 @@ BOOL LLPanelDisplay::postBuild() | |||
319 | mLightingText = getChild<LLTextBox>("LightingDetailText"); | 319 | mLightingText = getChild<LLTextBox>("LightingDetailText"); |
320 | mMeshDetailText = getChild<LLTextBox>("MeshDetailText"); | 320 | mMeshDetailText = getChild<LLTextBox>("MeshDetailText"); |
321 | 321 | ||
322 | childSetValue("toggle_windlight_control", gSavedSettings.getBOOL("EnableWindlightRemote")); | ||
323 | mWLControl = gSavedSettings.getBOOL("EnableWindlightRemote"); | ||
324 | |||
322 | refresh(); | 325 | refresh(); |
323 | 326 | ||
324 | return TRUE; | 327 | return TRUE; |
@@ -476,7 +479,12 @@ void LLPanelDisplay::refreshEnabledState() | |||
476 | } | 479 | } |
477 | 480 | ||
478 | // Vertex Shaders | 481 | // Vertex Shaders |
479 | mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")); | 482 | // mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")); |
483 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a | ||
484 | // "Basic Shaders" can't be disabled - but can be enabled - under @setenv=n | ||
485 | bool fCtrlShaderEnable = LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"); | ||
486 | mCtrlShaderEnable->setEnabled(fCtrlShaderEnable && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) || !mShaderEnable)); | ||
487 | // [/RLVa:KB] | ||
480 | 488 | ||
481 | BOOL shaders = mCtrlShaderEnable->get(); | 489 | BOOL shaders = mCtrlShaderEnable->get(); |
482 | if (shaders) | 490 | if (shaders) |
@@ -491,7 +499,12 @@ void LLPanelDisplay::refreshEnabledState() | |||
491 | 499 | ||
492 | // *HACK just checks to see if we can use shaders... | 500 | // *HACK just checks to see if we can use shaders... |
493 | // maybe some cards that use shaders, but don't support windlight | 501 | // maybe some cards that use shaders, but don't support windlight |
494 | mCtrlWindLight->setEnabled(mCtrlShaderEnable->getEnabled() && shaders); | 502 | // mCtrlWindLight->setEnabled(mCtrlShaderEnable->getEnabled() && shaders); |
503 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a | ||
504 | // "Atmospheric Shaders" can't be disabled - but can be enabled - under @setenv=n | ||
505 | bool fCtrlWindLightEnable = fCtrlShaderEnable && shaders; | ||
506 | mCtrlWindLight->setEnabled(fCtrlWindLightEnable && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) || !mWindLight)); | ||
507 | // [/RLVa:KB] | ||
495 | 508 | ||
496 | // turn off sky detail if atmostpherics isn't on | 509 | // turn off sky detail if atmostpherics isn't on |
497 | mCtrlSkyFactor->setEnabled(gSavedSettings.getBOOL("WindLightUseAtmosShaders")); | 510 | mCtrlSkyFactor->setEnabled(gSavedSettings.getBOOL("WindLightUseAtmosShaders")); |
@@ -691,6 +704,8 @@ void LLPanelDisplay::cancel() | |||
691 | gSavedSettings.setU32("WLSkyDetail", mSkyLOD); | 704 | gSavedSettings.setU32("WLSkyDetail", mSkyLOD); |
692 | gSavedSettings.setS32("RenderMaxPartCount", mParticleCount); | 705 | gSavedSettings.setS32("RenderMaxPartCount", mParticleCount); |
693 | gSavedSettings.setS32("RenderGlowResolutionPow", mPostProcess); | 706 | gSavedSettings.setS32("RenderGlowResolutionPow", mPostProcess); |
707 | |||
708 | gSavedSettings.setBOOL("EnableWindlightRemote", mWLControl); | ||
694 | } | 709 | } |
695 | 710 | ||
696 | void LLPanelDisplay::apply() | 711 | void LLPanelDisplay::apply() |
@@ -702,6 +717,8 @@ void LLPanelDisplay::apply() | |||
702 | { | 717 | { |
703 | applyWindowSize(); | 718 | applyWindowSize(); |
704 | } | 719 | } |
720 | |||
721 | gSavedSettings.setBOOL("EnableWindlightRemote", childGetValue("toggle_windlight_control").asBoolean()); | ||
705 | } | 722 | } |
706 | 723 | ||
707 | void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) | 724 | void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) |
diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h index 1aedee4..1cbdbba 100644 --- a/linden/indra/newview/llpaneldisplay.h +++ b/linden/indra/newview/llpaneldisplay.h | |||
@@ -171,6 +171,8 @@ protected: | |||
171 | S32 mParticleCount; | 171 | S32 mParticleCount; |
172 | S32 mPostProcess; | 172 | S32 mPostProcess; |
173 | 173 | ||
174 | BOOL mWLControl; | ||
175 | |||
174 | static void setGraphicsSettings(LLControlGroup& group); | 176 | static void setGraphicsSettings(LLControlGroup& group); |
175 | static void createGroup(); | 177 | static void createGroup(); |
176 | 178 | ||
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp index ddd3781..51cac4b 100644 --- a/linden/indra/newview/llpanelgeneral.cpp +++ b/linden/indra/newview/llpanelgeneral.cpp | |||
@@ -64,6 +64,8 @@ BOOL LLPanelGeneral::postBuild() | |||
64 | childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); | 64 | childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); |
65 | childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); | 65 | childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); |
66 | childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); | 66 | childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); |
67 | childSetValue("mini_map_notify_chat", gSavedSettings.getBOOL("MiniMapNotifyChatRange")); | ||
68 | childSetValue("mini_map_notify_sim", gSavedSettings.getBOOL("MiniMapNotifySimRange")); | ||
67 | childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); | 69 | childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); |
68 | 70 | ||
69 | getChild<LLColorSwatchCtrl>("effect_color_swatch")->set(gSavedSettings.getColor4("EffectColor")); | 71 | getChild<LLColorSwatchCtrl>("effect_color_swatch")->set(gSavedSettings.getColor4("EffectColor")); |
@@ -76,6 +78,7 @@ BOOL LLPanelGeneral::postBuild() | |||
76 | 78 | ||
77 | childSetValue("language_combobox", gSavedSettings.getString("Language")); | 79 | childSetValue("language_combobox", gSavedSettings.getString("Language")); |
78 | 80 | ||
81 | childSetAction("reset_ui_size", onClickResetUISize, this); | ||
79 | 82 | ||
80 | // if we have no agent, we can't let them choose anything | 83 | // if we have no agent, we can't let them choose anything |
81 | // if we have an agent, then we only let them choose if they have a choice | 84 | // if we have an agent, then we only let them choose if they have a choice |
@@ -84,7 +87,6 @@ BOOL LLPanelGeneral::postBuild() | |||
84 | 87 | ||
85 | if (can_choose) | 88 | if (can_choose) |
86 | { | 89 | { |
87 | |||
88 | // if they're not adult or a god, they shouldn't see the adult selection, so delete it | 90 | // if they're not adult or a god, they shouldn't see the adult selection, so delete it |
89 | if (!gAgent.isAdult() && !gAgent.isGodlike()) | 91 | if (!gAgent.isAdult() && !gAgent.isGodlike()) |
90 | { | 92 | { |
@@ -125,6 +127,8 @@ void LLPanelGeneral::apply() | |||
125 | gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); | 127 | gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); |
126 | gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); | 128 | gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); |
127 | gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); | 129 | gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); |
130 | gSavedSettings.setBOOL("MiniMapNotifyChatRange", childGetValue("mini_map_notify_chat")); | ||
131 | gSavedSettings.setBOOL("MiniMapNotifySimRange", childGetValue("mini_map_notify_sim")); | ||
128 | gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); | 132 | gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); |
129 | gSavedSettings.setColor4("EffectColor", childGetValue("effect_color_swatch")); | 133 | gSavedSettings.setColor4("EffectColor", childGetValue("effect_color_swatch")); |
130 | gSavedSettings.setF32("UIScaleFactor", childGetValue("ui_scale_slider").asReal()); | 134 | gSavedSettings.setF32("UIScaleFactor", childGetValue("ui_scale_slider").asReal()); |
@@ -157,3 +161,9 @@ void LLPanelGeneral::cancel() | |||
157 | { | 161 | { |
158 | } | 162 | } |
159 | 163 | ||
164 | // static | ||
165 | void LLPanelGeneral::onClickResetUISize(void* user_data) | ||
166 | { | ||
167 | LLPanelGeneral* self = (LLPanelGeneral*)user_data; | ||
168 | self->childSetValue("ui_scale_slider", 1.0f); | ||
169 | } | ||
diff --git a/linden/indra/newview/llpanelgeneral.h b/linden/indra/newview/llpanelgeneral.h index 4afa5dd..c5a1f63 100644 --- a/linden/indra/newview/llpanelgeneral.h +++ b/linden/indra/newview/llpanelgeneral.h | |||
@@ -46,6 +46,9 @@ public: | |||
46 | 46 | ||
47 | void apply(); | 47 | void apply(); |
48 | void cancel(); | 48 | void cancel(); |
49 | |||
50 | private: | ||
51 | static void onClickResetUISize(void*); | ||
49 | }; | 52 | }; |
50 | 53 | ||
51 | #endif | 54 | #endif |
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp index 7ef7f45..bc7c60f 100644 --- a/linden/indra/newview/llpanelinventory.cpp +++ b/linden/indra/newview/llpanelinventory.cpp | |||
@@ -82,6 +82,10 @@ | |||
82 | #include "llviewerwindow.h" | 82 | #include "llviewerwindow.h" |
83 | #include "llwearable.h" | 83 | #include "llwearable.h" |
84 | 84 | ||
85 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
86 | #include "llvoavatar.h" | ||
87 | // [/RLVa:KB] | ||
88 | |||
85 | ///---------------------------------------------------------------------------- | 89 | ///---------------------------------------------------------------------------- |
86 | /// Local function declarations, constants, enums, and typedefs | 90 | /// Local function declarations, constants, enums, and typedefs |
87 | ///---------------------------------------------------------------------------- | 91 | ///---------------------------------------------------------------------------- |
@@ -368,8 +372,16 @@ void LLTaskInvFVBridge::previewItem() | |||
368 | 372 | ||
369 | BOOL LLTaskInvFVBridge::isItemRenameable() const | 373 | BOOL LLTaskInvFVBridge::isItemRenameable() const |
370 | { | 374 | { |
371 | if(gAgent.isGodlike()) return TRUE; | 375 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) |
372 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | 376 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); |
377 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
378 | { | ||
379 | return FALSE; | ||
380 | } | ||
381 | // [/RLVa:KB] | ||
382 | |||
383 | if(gAgent.isGodlike()) return TRUE; | ||
384 | // LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | ||
373 | if(object) | 385 | if(object) |
374 | { | 386 | { |
375 | LLInventoryItem* item; | 387 | LLInventoryItem* item; |
@@ -386,6 +398,12 @@ BOOL LLTaskInvFVBridge::isItemRenameable() const | |||
386 | BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name) | 398 | BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name) |
387 | { | 399 | { |
388 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | 400 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); |
401 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
402 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
403 | { | ||
404 | return TRUE; // Fallback code [see LLTaskInvFVBridge::isItemRenameable()] | ||
405 | } | ||
406 | // [/RLVa:KB] | ||
389 | if(object) | 407 | if(object) |
390 | { | 408 | { |
391 | LLViewerInventoryItem* item = NULL; | 409 | LLViewerInventoryItem* item = NULL; |
@@ -412,12 +430,47 @@ BOOL LLTaskInvFVBridge::isItemMovable() | |||
412 | // return TRUE; | 430 | // return TRUE; |
413 | //} | 431 | //} |
414 | //return FALSE; | 432 | //return FALSE; |
433 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0g | ||
434 | if (rlv_handler_t::isEnabled()) | ||
435 | { | ||
436 | LLViewerObject* pObj = gObjectList.findObject(mPanel->getTaskUUID()); | ||
437 | if (pObj) | ||
438 | { | ||
439 | if (!gRlvHandler.isDetachable(pObj)) | ||
440 | { | ||
441 | return FALSE; | ||
442 | } | ||
443 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP)) ) | ||
444 | { | ||
445 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
446 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == pObj->getRootEdit()) ) | ||
447 | return FALSE; | ||
448 | } | ||
449 | } | ||
450 | } | ||
451 | // [/RLVa:KB] | ||
415 | return TRUE; | 452 | return TRUE; |
416 | } | 453 | } |
417 | 454 | ||
418 | BOOL LLTaskInvFVBridge::isItemRemovable() | 455 | BOOL LLTaskInvFVBridge::isItemRemovable() |
419 | { | 456 | { |
420 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | 457 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); |
458 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0g | ||
459 | if ( (object) && (rlv_handler_t::isEnabled()) ) | ||
460 | { | ||
461 | if (!gRlvHandler.isDetachable(object)) | ||
462 | { | ||
463 | return FALSE; | ||
464 | } | ||
465 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP)) ) | ||
466 | { | ||
467 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
468 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == object->getRootEdit()) ) | ||
469 | return FALSE; | ||
470 | } | ||
471 | } | ||
472 | // [/RLVa:KB] | ||
473 | |||
421 | if(object | 474 | if(object |
422 | && (object->permModify() || object->permYouOwner())) | 475 | && (object->permModify() || object->permYouOwner())) |
423 | { | 476 | { |
@@ -565,6 +618,13 @@ BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const | |||
565 | const LLPermissions& perm = inv->getPermissions(); | 618 | const LLPermissions& perm = inv->getPermissions(); |
566 | bool can_copy = gAgent.allowOperation(PERM_COPY, perm, | 619 | bool can_copy = gAgent.allowOperation(PERM_COPY, perm, |
567 | GP_OBJECT_MANIPULATE); | 620 | GP_OBJECT_MANIPULATE); |
621 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
622 | // Kind of redundant due to the note below, but in case that ever gets fixed | ||
623 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
624 | { | ||
625 | return FALSE; | ||
626 | } | ||
627 | // [/RLVa:KB] | ||
568 | if (object->isAttachment() && !can_copy) | 628 | if (object->isAttachment() && !can_copy) |
569 | { | 629 | { |
570 | //RN: no copy contents of attachments cannot be dragged out | 630 | //RN: no copy contents of attachments cannot be dragged out |
@@ -687,6 +747,14 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) | |||
687 | { | 747 | { |
688 | disabled_items.push_back(std::string("Task Open")); | 748 | disabled_items.push_back(std::string("Task Open")); |
689 | } | 749 | } |
750 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
751 | else if ( (rlv_handler_t::isEnabled()) && | ||
752 | ((LLAssetType::AT_LSL_TEXT == item->getType()) || (LLAssetType::AT_NOTECARD == item->getType())) && | ||
753 | (!gRlvHandler.isDetachable(gObjectList.findObject(mPanel->getTaskUUID()))) ) | ||
754 | { | ||
755 | disabled_items.push_back(std::string("Task Open")); | ||
756 | } | ||
757 | // [/RLVa:KB] | ||
690 | } | 758 | } |
691 | items.push_back(std::string("Task Properties")); | 759 | items.push_back(std::string("Task Properties")); |
692 | if(isItemRenameable()) | 760 | if(isItemRenameable()) |
@@ -1192,12 +1260,20 @@ LLTaskLSLBridge::LLTaskLSLBridge( | |||
1192 | 1260 | ||
1193 | void LLTaskLSLBridge::openItem() | 1261 | void LLTaskLSLBridge::openItem() |
1194 | { | 1262 | { |
1263 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
1264 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | ||
1265 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
1266 | { | ||
1267 | return; | ||
1268 | } | ||
1269 | // [/RLVa:KB] | ||
1270 | |||
1195 | llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl; | 1271 | llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl; |
1196 | if(LLLiveLSLEditor::show(mUUID, mPanel->getTaskUUID())) | 1272 | if(LLLiveLSLEditor::show(mUUID, mPanel->getTaskUUID())) |
1197 | { | 1273 | { |
1198 | return; | 1274 | return; |
1199 | } | 1275 | } |
1200 | LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); | 1276 | // LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); |
1201 | if(!object || object->isInventoryPending()) | 1277 | if(!object || object->isInventoryPending()) |
1202 | { | 1278 | { |
1203 | return; | 1279 | return; |
@@ -1312,6 +1388,12 @@ void LLTaskNotecardBridge::openItem() | |||
1312 | { | 1388 | { |
1313 | return; | 1389 | return; |
1314 | } | 1390 | } |
1391 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
1392 | if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) || (!gRlvHandler.isDetachable(object))) ) | ||
1393 | { | ||
1394 | return; | ||
1395 | } | ||
1396 | // [/RLVa:KB] | ||
1315 | if(object->permModify() || gAgent.isGodlike()) | 1397 | if(object->permModify() || gAgent.isGodlike()) |
1316 | { | 1398 | { |
1317 | S32 left, top; | 1399 | S32 left, top; |
diff --git a/linden/indra/newview/llpanelland.cpp b/linden/indra/newview/llpanelland.cpp index 8bb100d..27bfaea 100644 --- a/linden/indra/newview/llpanelland.cpp +++ b/linden/indra/newview/llpanelland.cpp | |||
@@ -231,6 +231,12 @@ void LLPanelLandInfo::refresh() | |||
231 | //static | 231 | //static |
232 | void LLPanelLandInfo::onClickClaim(void*) | 232 | void LLPanelLandInfo::onClickClaim(void*) |
233 | { | 233 | { |
234 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
235 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
236 | { | ||
237 | return; | ||
238 | } | ||
239 | // [/RLVa:KB] | ||
234 | LLViewerParcelMgr::getInstance()->startBuyLand(); | 240 | LLViewerParcelMgr::getInstance()->startBuyLand(); |
235 | } | 241 | } |
236 | 242 | ||
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp index 8bb7152..feb85a7 100644 --- a/linden/indra/newview/llpanellogin.cpp +++ b/linden/indra/newview/llpanellogin.cpp | |||
@@ -36,6 +36,9 @@ | |||
36 | 36 | ||
37 | #include "llpanelgeneral.h" | 37 | #include "llpanelgeneral.h" |
38 | 38 | ||
39 | #include "hippoGridManager.h" | ||
40 | #include "floaterlogin.h" | ||
41 | |||
39 | #include "indra_constants.h" // for key and mask constants | 42 | #include "indra_constants.h" // for key and mask constants |
40 | #include "llfontgl.h" | 43 | #include "llfontgl.h" |
41 | #include "llmd5.h" | 44 | #include "llmd5.h" |
@@ -65,17 +68,24 @@ | |||
65 | #include "llviewernetwork.h" | 68 | #include "llviewernetwork.h" |
66 | #include "llviewerwindow.h" // to link into child list | 69 | #include "llviewerwindow.h" // to link into child list |
67 | #include "llnotify.h" | 70 | #include "llnotify.h" |
71 | #include "llappviewer.h" // for gHideLinks | ||
68 | #include "llurlsimstring.h" | 72 | #include "llurlsimstring.h" |
69 | #include "lluictrlfactory.h" | 73 | #include "lluictrlfactory.h" |
70 | #include "llhttpclient.h" | 74 | #include "llhttpclient.h" |
71 | #include "llweb.h" | 75 | #include "llweb.h" |
72 | #include "llwebbrowserctrl.h" | 76 | #include "llwebbrowserctrl.h" |
73 | 77 | ||
78 | #include "llfloaterhtml.h" | ||
79 | |||
74 | #include "llfloaterhtmlhelp.h" | 80 | #include "llfloaterhtmlhelp.h" |
75 | #include "llfloatertos.h" | 81 | #include "llfloatertos.h" |
76 | 82 | ||
77 | #include "llglheaders.h" | 83 | #include "llglheaders.h" |
78 | 84 | ||
85 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
86 | #include "rlvhandler.h" | ||
87 | // [/RLVa:KB] | ||
88 | |||
79 | #define USE_VIEWER_AUTH 0 | 89 | #define USE_VIEWER_AUTH 0 |
80 | 90 | ||
81 | const S32 BLACK_BORDER_HEIGHT = 160; | 91 | const S32 BLACK_BORDER_HEIGHT = 160; |
@@ -152,11 +162,6 @@ namespace { | |||
152 | boost::intrusive_ptr< LLIamHereLogin > gResponsePtr = 0; | 162 | boost::intrusive_ptr< LLIamHereLogin > gResponsePtr = 0; |
153 | }; | 163 | }; |
154 | 164 | ||
155 | void set_start_location(LLUICtrl* ctrl, void* data) | ||
156 | { | ||
157 | LLURLSimString::setString(ctrl->getValue().asString()); | ||
158 | } | ||
159 | |||
160 | //--------------------------------------------------------------------------- | 165 | //--------------------------------------------------------------------------- |
161 | // Public methods | 166 | // Public methods |
162 | //--------------------------------------------------------------------------- | 167 | //--------------------------------------------------------------------------- |
@@ -243,13 +248,13 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, | |||
243 | combo->setCurrentByIndex( 0 ); | 248 | combo->setCurrentByIndex( 0 ); |
244 | } | 249 | } |
245 | 250 | ||
246 | combo->setCommitCallback( &set_start_location ); | ||
247 | 251 | ||
248 | LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo"); | 252 | LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo"); |
249 | server_choice_combo->setCommitCallback(onSelectServer); | 253 | server_choice_combo->setCommitCallback(onSelectServer); |
250 | server_choice_combo->setFocusLostCallback(onServerComboLostFocus); | 254 | //server_choice_combo->setFocusLostCallback(onServerComboLostFocus); |
251 | 255 | ||
252 | childSetAction("connect_btn", onClickConnect, this); | 256 | childSetAction("connect_btn", onClickConnect, this); |
257 | childSetAction("grid_btn", onClickGrid, this); | ||
253 | 258 | ||
254 | setDefaultBtn("connect_btn"); | 259 | setDefaultBtn("connect_btn"); |
255 | 260 | ||
@@ -551,6 +556,7 @@ void LLPanelLogin::show(const LLRect &rect, | |||
551 | 556 | ||
552 | // Make sure that focus always goes here (and use the latest sInstance that was just created) | 557 | // Make sure that focus always goes here (and use the latest sInstance that was just created) |
553 | gFocusMgr.setDefaultKeyboardFocus(sInstance); | 558 | gFocusMgr.setDefaultKeyboardFocus(sInstance); |
559 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
554 | } | 560 | } |
555 | 561 | ||
556 | // static | 562 | // static |
@@ -594,7 +600,7 @@ void LLPanelLogin::setFields(const std::string& firstname, | |||
594 | 600 | ||
595 | 601 | ||
596 | // static | 602 | // static |
597 | void LLPanelLogin::addServer(const std::string& server, S32 domain_name) | 603 | void LLPanelLogin::addServer(const std::string& server) |
598 | { | 604 | { |
599 | if (!sInstance) | 605 | if (!sInstance) |
600 | { | 606 | { |
@@ -602,17 +608,29 @@ void LLPanelLogin::addServer(const std::string& server, S32 domain_name) | |||
602 | return; | 608 | return; |
603 | } | 609 | } |
604 | 610 | ||
605 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | 611 | const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); |
606 | combo->add(server, LLSD(domain_name) ); | ||
607 | combo->setCurrentByIndex(0); | ||
608 | } | ||
609 | 612 | ||
613 | LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo"); | ||
614 | S32 selectIndex = -1, i = 0; | ||
615 | grids->removeall(); | ||
616 | if (defaultGrid != "") { | ||
617 | grids->add(defaultGrid); | ||
618 | selectIndex = i++; | ||
619 | } | ||
620 | HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid(); | ||
621 | for (it = gHippoGridManager->beginGrid(); it != end; ++it) { | ||
622 | const std::string &grid = it->second->getGridNick(); | ||
623 | if (grid != defaultGrid) { | ||
624 | grids->add(grid); | ||
625 | //if (grid == mCurGrid) selectIndex = i; | ||
626 | i++; | ||
627 | } | ||
628 | } | ||
629 | grids->setCurrentByIndex(0); | ||
610 | 630 | ||
611 | // static | 631 | //LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); |
612 | void LLPanelLogin::setServer(S32 domain_name) | 632 | //combo->add(server, LLSD(domain_name) ); |
613 | { | 633 | //combo->setCurrentByIndex(0); |
614 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | ||
615 | combo->setCurrentByIndex(domain_name); | ||
616 | } | 634 | } |
617 | 635 | ||
618 | // static | 636 | // static |
@@ -690,10 +708,27 @@ void LLPanelLogin::refreshLocation( bool force_visible ) | |||
690 | if ( ! force_visible ) | 708 | if ( ! force_visible ) |
691 | show_start = gSavedSettings.getBOOL("ShowStartLocation"); | 709 | show_start = gSavedSettings.getBOOL("ShowStartLocation"); |
692 | 710 | ||
711 | |||
712 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
713 | // TODO-RLVa: figure out some way to make this work with RLV_EXTENSION_STARTLOCATION | ||
714 | #ifndef RLV_EXTENSION_STARTLOCATION | ||
715 | if (rlv_handler_t::isEnabled()) | ||
716 | { | ||
717 | show_start = FALSE; | ||
718 | } | ||
719 | #endif // RLV_EXTENSION_STARTLOCATION | ||
720 | // [/RLVa:KB] | ||
721 | |||
722 | |||
693 | sInstance->childSetVisible("start_location_combo", show_start); | 723 | sInstance->childSetVisible("start_location_combo", show_start); |
694 | sInstance->childSetVisible("start_location_text", show_start); | 724 | sInstance->childSetVisible("start_location_text", show_start); |
695 | 725 | ||
726 | /*#if LL_RELEASE_FOR_DOWNLOAD | ||
727 | BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid"); | ||
728 | sInstance->childSetVisible("server_combo", show_server); | ||
729 | #else*/ | ||
696 | sInstance->childSetVisible("server_combo", TRUE); | 730 | sInstance->childSetVisible("server_combo", TRUE); |
731 | //#endif | ||
697 | 732 | ||
698 | #endif | 733 | #endif |
699 | } | 734 | } |
@@ -726,18 +761,39 @@ void LLPanelLogin::setAlwaysRefresh(bool refresh) | |||
726 | } | 761 | } |
727 | 762 | ||
728 | 763 | ||
764 | // static | ||
765 | void LLPanelLogin::refreshLoginPage() | ||
766 | { | ||
767 | if (!sInstance) return; | ||
768 | |||
769 | sInstance->childSetVisible("create_new_account_text", | ||
770 | !gHippoGridManager->getConnectedGrid()->getRegisterUrl().empty()); | ||
771 | sInstance->childSetVisible("forgot_password_text", | ||
772 | !gHippoGridManager->getConnectedGrid()->getPasswordUrl().empty()); | ||
773 | |||
774 | // kick off a request to grab the url manually | ||
775 | gResponsePtr = LLIamHereLogin::build(sInstance); | ||
776 | std::string login_page = gHippoGridManager->getConnectedGrid()->getLoginPage(); | ||
777 | if (!login_page.empty()) { | ||
778 | LLHTTPClient::head(login_page, gResponsePtr); | ||
779 | } else { | ||
780 | sInstance->setSiteIsAlive(false); | ||
781 | } | ||
782 | } | ||
783 | |||
729 | 784 | ||
730 | void LLPanelLogin::loadLoginPage() | 785 | void LLPanelLogin::loadLoginPage() |
731 | { | 786 | { |
732 | if (!sInstance) return; | 787 | if (!sInstance) return; |
733 | 788 | ||
734 | std::ostringstream oStr; | ||
735 | 789 | ||
736 | std::string login_page = gSavedSettings.getString("LoginPage"); | 790 | std::string login_page = gHippoGridManager->getConnectedGrid()->getLoginPage(); |
737 | if (login_page.empty()) | 791 | if (login_page.empty()) { |
738 | { | 792 | sInstance->setSiteIsAlive(false); |
739 | login_page = sInstance->getString( "real_url" ); | 793 | return; |
740 | } | 794 | } |
795 | |||
796 | std::ostringstream oStr; | ||
741 | oStr << login_page; | 797 | oStr << login_page; |
742 | 798 | ||
743 | // Use the right delimeter depending on how LLURI parses the URL | 799 | // Use the right delimeter depending on how LLURI parses the URL |
@@ -772,11 +828,12 @@ void LLPanelLogin::loadLoginPage() | |||
772 | curl_free(curl_version); | 828 | curl_free(curl_version); |
773 | 829 | ||
774 | // Grid | 830 | // Grid |
775 | char* curl_grid = curl_escape(LLViewerLogin::getInstance()->getGridCodeName().c_str(), 0); | 831 | char* curl_grid = curl_escape(LLViewerLogin::getInstance()->getGridLabel().c_str(), 0); |
776 | oStr << "&grid=" << curl_grid; | 832 | oStr << "&grid=" << curl_grid; |
777 | curl_free(curl_grid); | 833 | curl_free(curl_grid); |
778 | 834 | ||
779 | gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid()); | 835 | gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid()); |
836 | //LLViewerLogin::getInstance()->setMenuColor(); | ||
780 | gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor()); | 837 | gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor()); |
781 | 838 | ||
782 | 839 | ||
@@ -915,7 +972,15 @@ void LLPanelLogin::onClickConnect(void *) | |||
915 | } | 972 | } |
916 | } | 973 | } |
917 | } | 974 | } |
975 | } | ||
918 | 976 | ||
977 | void LLPanelLogin::onClickGrid(void *) | ||
978 | { | ||
979 | if (sInstance && sInstance->mCallback) | ||
980 | { | ||
981 | LoginFloater::newShow(std::string("Test"), false); | ||
982 | } | ||
983 | } | ||
919 | 984 | ||
920 | // static | 985 | // static |
921 | bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD& response) | 986 | bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD& response) |
@@ -983,7 +1048,7 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) | |||
983 | } | 1048 | } |
984 | 1049 | ||
985 | // static | 1050 | // static |
986 | void LLPanelLogin::onSelectServer(LLUICtrl*, void*) | 1051 | void LLPanelLogin::onSelectServer(LLUICtrl* ctrl, void*) |
987 | { | 1052 | { |
988 | // *NOTE: The paramters for this method are ignored. | 1053 | // *NOTE: The paramters for this method are ignored. |
989 | // LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) | 1054 | // LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) |
@@ -992,46 +1057,29 @@ void LLPanelLogin::onSelectServer(LLUICtrl*, void*) | |||
992 | // The user twiddled with the grid choice ui. | 1057 | // The user twiddled with the grid choice ui. |
993 | // apply the selection to the grid setting. | 1058 | // apply the selection to the grid setting. |
994 | std::string grid_label; | 1059 | std::string grid_label; |
995 | S32 grid_index; | 1060 | //S32 grid_index; |
996 | 1061 | ||
997 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | 1062 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); |
998 | LLSD combo_val = combo->getValue(); | 1063 | LLSD combo_val = combo->getValue(); |
999 | 1064 | ||
1000 | if (LLSD::TypeInteger == combo_val.type()) | 1065 | std::string mCurGrid = ctrl->getValue().asString(); |
1001 | { | 1066 | //KOW |
1002 | grid_index = combo->getValue().asInteger(); | 1067 | gHippoGridManager->setCurrentGrid(mCurGrid); |
1003 | 1068 | // HippoGridInfo *gridInfo = gHippoGridManager->getGrid(mCurGrid); | |
1004 | if ((S32)GRID_INFO_OTHER == grid_index) | 1069 | // if (gridInfo) { |
1005 | { | 1070 | // //childSetText("gridnick", gridInfo->getGridNick()); |
1006 | // This happens if the user specifies a custom grid | 1071 | // //platform->setCurrentByIndex(gridInfo->getPlatform()); |
1007 | // via command line. | 1072 | // //childSetText("gridname", gridInfo->getGridName()); |
1008 | grid_label = combo->getSimple(); | 1073 | // LLPanelLogin::setFields( gridInfo->getFirstName(), gridInfo->getLastName(), gridInfo->getAvatarPassword(), 1 ); |
1009 | } | 1074 | // } |
1010 | } | ||
1011 | else | ||
1012 | { | ||
1013 | // no valid selection, return other | ||
1014 | grid_index = (S32)GRID_INFO_OTHER; | ||
1015 | grid_label = combo_val.asString(); | ||
1016 | } | ||
1017 | 1075 | ||
1018 | // This new seelction will override preset uris | 1076 | |
1019 | // from the command line. | 1077 | llwarns << "current grid = " << mCurGrid << llendl; |
1020 | LLViewerLogin* vl = LLViewerLogin::getInstance(); | ||
1021 | vl->resetURIs(); | ||
1022 | if(grid_index != GRID_INFO_OTHER) | ||
1023 | { | ||
1024 | vl->setGridChoice((EGridInfo)grid_index); | ||
1025 | } | ||
1026 | else | ||
1027 | { | ||
1028 | vl->setGridChoice(grid_label); | ||
1029 | } | ||
1030 | 1078 | ||
1031 | // grid changed so show new splash screen (possibly) | 1079 | // grid changed so show new splash screen (possibly) |
1032 | loadLoginPage(); | 1080 | loadLoginPage(); |
1033 | } | 1081 | } |
1034 | 1082 | /* | |
1035 | void LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) | 1083 | void LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) |
1036 | { | 1084 | { |
1037 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | 1085 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); |
@@ -1040,3 +1088,4 @@ void LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe, void*) | |||
1040 | onSelectServer(combo, NULL); | 1088 | onSelectServer(combo, NULL); |
1041 | } | 1089 | } |
1042 | } | 1090 | } |
1091 | */ | ||
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h index 8d5bf3a..f2c589d 100644 --- a/linden/indra/newview/llpanellogin.h +++ b/linden/indra/newview/llpanellogin.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * $LicenseInfo:firstyear=2002&license=viewergpl$ | 5 | * $LicenseInfo:firstyear=2002&license=viewergpl$ |
6 | * | 6 | * |
7 | * Copyright (c) 2002-2009, Linden Research, Inc. | 7 | * Copyright (c) 2002-2008, Linden Research, Inc. |
8 | * | 8 | * |
9 | * Second Life Viewer Source Code | 9 | * Second Life Viewer Source Code |
10 | * The source code in this file ("Source Code") is provided by Linden Lab | 10 | * The source code in this file ("Source Code") is provided by Linden Lab |
@@ -63,8 +63,7 @@ public: | |||
63 | static void setFields(const std::string& firstname, const std::string& lastname, | 63 | static void setFields(const std::string& firstname, const std::string& lastname, |
64 | const std::string& password); | 64 | const std::string& password); |
65 | 65 | ||
66 | static void addServer(const std::string& server, S32 domain_name); | 66 | static void addServer(const std::string& server); |
67 | static void setServer(S32 domain_name); | ||
68 | static void refreshLocation( bool force_visible ); | 67 | static void refreshLocation( bool force_visible ); |
69 | 68 | ||
70 | static void getFields(std::string *firstname, std::string *lastname, | 69 | static void getFields(std::string *firstname, std::string *lastname, |
@@ -78,12 +77,14 @@ public: | |||
78 | void setSiteIsAlive( bool alive ); | 77 | void setSiteIsAlive( bool alive ); |
79 | 78 | ||
80 | static void loadLoginPage(); | 79 | static void loadLoginPage(); |
80 | static void refreshLoginPage(); | ||
81 | static void giveFocus(); | 81 | static void giveFocus(); |
82 | static void setAlwaysRefresh(bool refresh); | 82 | static void setAlwaysRefresh(bool refresh); |
83 | static void mungePassword(LLUICtrl* caller, void* user_data); | 83 | static void mungePassword(LLUICtrl* caller, void* user_data); |
84 | 84 | ||
85 | private: | 85 | private: |
86 | static void onClickConnect(void*); | 86 | static void onClickConnect(void*); |
87 | static void onClickGrid(void*); | ||
87 | static void onClickNewAccount(void*); | 88 | static void onClickNewAccount(void*); |
88 | static bool newAccountAlertCallback(const LLSD& notification, const LLSD& response); | 89 | static bool newAccountAlertCallback(const LLSD& notification, const LLSD& response); |
89 | static void onClickQuit(void*); | 90 | static void onClickQuit(void*); |
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp index b0274e6..270a8ed 100644 --- a/linden/indra/newview/llpanelobject.cpp +++ b/linden/indra/newview/llpanelobject.cpp | |||
@@ -76,6 +76,10 @@ | |||
76 | 76 | ||
77 | #include "lldrawpool.h" | 77 | #include "lldrawpool.h" |
78 | 78 | ||
79 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
80 | #include "llvoavatar.h" | ||
81 | // [/RLVa:KB] | ||
82 | |||
79 | // | 83 | // |
80 | // Constants | 84 | // Constants |
81 | // | 85 | // |
@@ -386,6 +390,15 @@ void LLPanelObject::getState( ) | |||
386 | enable_rotate = FALSE; | 390 | enable_rotate = FALSE; |
387 | } | 391 | } |
388 | 392 | ||
393 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
394 | if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP))) ) | ||
395 | { | ||
396 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
397 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == objectp->getRootEdit()) ) | ||
398 | enable_move = enable_scale = enable_rotate = FALSE; | ||
399 | } | ||
400 | // [/RLVa:KB] | ||
401 | |||
389 | LLVector3 vec; | 402 | LLVector3 vec; |
390 | if (enable_move) | 403 | if (enable_move) |
391 | { | 404 | { |
@@ -619,6 +632,10 @@ void LLPanelObject::getState( ) | |||
619 | } | 632 | } |
620 | else | 633 | else |
621 | { | 634 | { |
635 | mCtrlScaleX->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
636 | mCtrlScaleY->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
637 | mCtrlScaleZ->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
638 | |||
622 | // Only allowed to change these parameters for objects | 639 | // Only allowed to change these parameters for objects |
623 | // that you have permissions on AND are not attachments. | 640 | // that you have permissions on AND are not attachments. |
624 | enabled = root_objectp->permModify(); | 641 | enabled = root_objectp->permModify(); |
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp index da8c9a9..0cb5b9e 100644 --- a/linden/indra/newview/llpanelpermissions.cpp +++ b/linden/indra/newview/llpanelpermissions.cpp | |||
@@ -85,6 +85,7 @@ BOOL LLPanelPermissions::postBuild() | |||
85 | 85 | ||
86 | 86 | ||
87 | this->childSetAction("button owner profile",LLPanelPermissions::onClickOwner,this); | 87 | this->childSetAction("button owner profile",LLPanelPermissions::onClickOwner,this); |
88 | this->childSetAction("button last owner profile",LLPanelPermissions::onClickLastOwner,this); | ||
88 | this->childSetAction("button creator profile",LLPanelPermissions::onClickCreator,this); | 89 | this->childSetAction("button creator profile",LLPanelPermissions::onClickCreator,this); |
89 | 90 | ||
90 | this->childSetAction("button set group",LLPanelPermissions::onClickGroup,this); | 91 | this->childSetAction("button set group",LLPanelPermissions::onClickGroup,this); |
@@ -178,6 +179,11 @@ void LLPanelPermissions::refresh() | |||
178 | childSetEnabled("Owner Name",false); | 179 | childSetEnabled("Owner Name",false); |
179 | childSetEnabled("button owner profile",false); | 180 | childSetEnabled("button owner profile",false); |
180 | 181 | ||
182 | childSetEnabled("Last Owner:",false); | ||
183 | childSetText("Last Owner Name",LLStringUtil::null); | ||
184 | childSetEnabled("Last Owner Name",false); | ||
185 | childSetEnabled("button last owner profile",false); | ||
186 | |||
181 | childSetEnabled("Group:",false); | 187 | childSetEnabled("Group:",false); |
182 | childSetText("Group Name",LLStringUtil::null); | 188 | childSetText("Group Name",LLStringUtil::null); |
183 | childSetEnabled("Group Name",false); | 189 | childSetEnabled("Group Name",false); |
@@ -297,6 +303,8 @@ void LLPanelPermissions::refresh() | |||
297 | owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); | 303 | owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); |
298 | 304 | ||
299 | // llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl; | 305 | // llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl; |
306 | std::string last_owner_name; | ||
307 | LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); | ||
300 | 308 | ||
301 | if (mOwnerID.isNull()) | 309 | if (mOwnerID.isNull()) |
302 | { | 310 | { |
@@ -307,8 +315,8 @@ void LLPanelPermissions::refresh() | |||
307 | else | 315 | else |
308 | { | 316 | { |
309 | // Display last owner if public | 317 | // Display last owner if public |
310 | std::string last_owner_name; | 318 | //std::string last_owner_name; |
311 | LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); | 319 | //LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); |
312 | 320 | ||
313 | // It should never happen that the last owner is null and the owner | 321 | // It should never happen that the last owner is null and the owner |
314 | // is null, but it seems to be a bug in the simulator right now. JC | 322 | // is null, but it seems to be a bug in the simulator right now. JC |
@@ -320,9 +328,44 @@ void LLPanelPermissions::refresh() | |||
320 | } | 328 | } |
321 | } | 329 | } |
322 | 330 | ||
331 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
332 | bool fRlvEnableOwner = true; | ||
333 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ) | ||
334 | { | ||
335 | // Only filter the owner name if: the selection is all owned by the same avie and not group owned | ||
336 | if ( (owners_identical) && (!LLSelectMgr::getInstance()->selectIsGroupOwned()) ) | ||
337 | { | ||
338 | owner_name = gRlvHandler.getAnonym(owner_name); | ||
339 | fRlvEnableOwner = false; | ||
340 | } | ||
341 | } | ||
342 | // [/RLVa:KB] | ||
343 | |||
323 | childSetText("Owner Name",owner_name); | 344 | childSetText("Owner Name",owner_name); |
324 | childSetEnabled("Owner Name",TRUE); | 345 | childSetEnabled("Owner Name",TRUE); |
325 | childSetEnabled("button owner profile",owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned())); | 346 | // childSetEnabled("button owner profile",owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned())); |
347 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
348 | childSetEnabled("button owner profile", | ||
349 | fRlvEnableOwner && owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned())); | ||
350 | // [/RLVa:KB] | ||
351 | |||
352 | //if (owner_name != last_owner_name) | ||
353 | // [RLVa:KB] | ||
354 | if ( (owner_name != last_owner_name) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ) | ||
355 | // [/RLVa:KB] | ||
356 | { | ||
357 | childSetEnabled("Last Owner:", TRUE); | ||
358 | childSetText("Last Owner Name", last_owner_name); | ||
359 | childSetEnabled("Last Owner Name", TRUE); | ||
360 | childSetEnabled("button last owner profile", TRUE); | ||
361 | } | ||
362 | else | ||
363 | { | ||
364 | childSetEnabled("Last Owner:", FALSE); | ||
365 | childSetText("Last Owner Name", LLStringUtil::null); | ||
366 | childSetEnabled("Last Owner Name", FALSE); | ||
367 | childSetEnabled("button last owner profile", FALSE); | ||
368 | } | ||
326 | 369 | ||
327 | // update group text field | 370 | // update group text field |
328 | childSetEnabled("Group:",true); | 371 | childSetEnabled("Group:",true); |
@@ -839,7 +882,23 @@ void LLPanelPermissions::onClickOwner(void *data) | |||
839 | } | 882 | } |
840 | else | 883 | else |
841 | { | 884 | { |
842 | LLFloaterAvatarInfo::showFromObject(self->mOwnerID); | 885 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) |
886 | if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
887 | { | ||
888 | LLFloaterAvatarInfo::showFromObject(self->mOwnerID); | ||
889 | } | ||
890 | // [/RLVa:KB] | ||
891 | // LLFloaterAvatarInfo::showFromObject(self->mOwnerID); | ||
892 | } | ||
893 | } | ||
894 | |||
895 | void LLPanelPermissions::onClickLastOwner(void *data) | ||
896 | { | ||
897 | LLPanelPermissions *self = (LLPanelPermissions *)data; | ||
898 | |||
899 | if ( self->mLastOwnerID.notNull() ) | ||
900 | { | ||
901 | LLFloaterAvatarInfo::showFromObject(self->mLastOwnerID); | ||
843 | } | 902 | } |
844 | } | 903 | } |
845 | 904 | ||
diff --git a/linden/indra/newview/llpanelpermissions.h b/linden/indra/newview/llpanelpermissions.h index bb816ac..9aa5573 100644 --- a/linden/indra/newview/llpanelpermissions.h +++ b/linden/indra/newview/llpanelpermissions.h | |||
@@ -69,6 +69,7 @@ protected: | |||
69 | static void onClickRelease(void*); | 69 | static void onClickRelease(void*); |
70 | static void onClickCreator(void*); | 70 | static void onClickCreator(void*); |
71 | static void onClickOwner(void*); | 71 | static void onClickOwner(void*); |
72 | static void onClickLastOwner(void*); | ||
72 | static void onClickGroup(void*); | 73 | static void onClickGroup(void*); |
73 | static void cbGroupID(LLUUID group_id, void* userdata); | 74 | static void cbGroupID(LLUUID group_id, void* userdata); |
74 | static void onClickDeedToGroup(void*); | 75 | static void onClickDeedToGroup(void*); |
diff --git a/linden/indra/newview/llpanelpick.cpp b/linden/indra/newview/llpanelpick.cpp index 43ecd27..b26b51a 100644 --- a/linden/indra/newview/llpanelpick.cpp +++ b/linden/indra/newview/llpanelpick.cpp | |||
@@ -401,7 +401,10 @@ void LLPanelPick::refresh() | |||
401 | mEnabledCheck->setEnabled(godlike); | 401 | mEnabledCheck->setEnabled(godlike); |
402 | 402 | ||
403 | mSetBtn->setVisible(godlike); | 403 | mSetBtn->setVisible(godlike); |
404 | mSetBtn->setEnabled(godlike); | 404 | //mSetBtn->setEnabled(godlike); |
405 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
406 | mSetBtn->setEnabled(godlike && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ); | ||
407 | // [/RLVa:KB] | ||
405 | } | 408 | } |
406 | else | 409 | else |
407 | { | 410 | { |
@@ -418,7 +421,10 @@ void LLPanelPick::refresh() | |||
418 | mEnabledCheck->setEnabled(FALSE); | 421 | mEnabledCheck->setEnabled(FALSE); |
419 | 422 | ||
420 | mSetBtn->setVisible(is_self); | 423 | mSetBtn->setVisible(is_self); |
421 | mSetBtn->setEnabled(is_self); | 424 | //mSetBtn->setEnabled(is_self); |
425 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
426 | mSetBtn->setEnabled(is_self && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ); | ||
427 | // [/RLVa] | ||
422 | } | 428 | } |
423 | } | 429 | } |
424 | 430 | ||
@@ -456,6 +462,12 @@ void LLPanelPick::onClickLandmark(void* data) | |||
456 | // static | 462 | // static |
457 | void LLPanelPick::onClickSet(void* data) | 463 | void LLPanelPick::onClickSet(void* data) |
458 | { | 464 | { |
465 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
466 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
467 | { | ||
468 | return; | ||
469 | } | ||
470 | // [/RLVa:KB] | ||
459 | LLPanelPick* self = (LLPanelPick*)data; | 471 | LLPanelPick* self = (LLPanelPick*)data; |
460 | 472 | ||
461 | // Save location for later. | 473 | // Save location for later. |
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp index 559ad2b..2e08cac 100644 --- a/linden/indra/newview/llprefschat.cpp +++ b/linden/indra/newview/llprefschat.cpp | |||
@@ -33,6 +33,8 @@ | |||
33 | 33 | ||
34 | #include "llviewerprecompiledheaders.h" | 34 | #include "llviewerprecompiledheaders.h" |
35 | 35 | ||
36 | #include "llchatbar.h" | ||
37 | #include "llfloaterchat.h" | ||
36 | #include "llprefschat.h" | 38 | #include "llprefschat.h" |
37 | #include "lltexteditor.h" | 39 | #include "lltexteditor.h" |
38 | #include "llviewercontrol.h" | 40 | #include "llviewercontrol.h" |
@@ -71,11 +73,11 @@ private: | |||
71 | BOOL mPlayTypingAnim; | 73 | BOOL mPlayTypingAnim; |
72 | BOOL mChatBubbles; | 74 | BOOL mChatBubbles; |
73 | BOOL mScriptErrorAsChat; | 75 | BOOL mScriptErrorAsChat; |
76 | BOOL mChatChannel; | ||
74 | F32 mConsoleOpacity; | 77 | F32 mConsoleOpacity; |
75 | F32 mBubbleOpacity; | 78 | F32 mBubbleOpacity; |
76 | }; | 79 | }; |
77 | 80 | ||
78 | |||
79 | LLPrefsChatImpl::LLPrefsChatImpl() | 81 | LLPrefsChatImpl::LLPrefsChatImpl() |
80 | : LLPanel(std::string("Chat Panel")) | 82 | : LLPanel(std::string("Chat Panel")) |
81 | { | 83 | { |
@@ -105,6 +107,7 @@ LLPrefsChatImpl::LLPrefsChatImpl() | |||
105 | childSetValue("chat_full_width_check", gSavedSettings.getBOOL("ChatFullWidth")); | 107 | childSetValue("chat_full_width_check", gSavedSettings.getBOOL("ChatFullWidth")); |
106 | childSetValue("close_chat_on_return_check", gSavedSettings.getBOOL("CloseChatOnReturn")); | 108 | childSetValue("close_chat_on_return_check", gSavedSettings.getBOOL("CloseChatOnReturn")); |
107 | childSetValue("play_typing_animation", gSavedSettings.getBOOL("PlayTypingAnim")); | 109 | childSetValue("play_typing_animation", gSavedSettings.getBOOL("PlayTypingAnim")); |
110 | childSetValue("toggle_channel_control", gSavedSettings.getBOOL("ChatChannelSelect")); | ||
108 | childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity")); | 111 | childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity")); |
109 | childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity")); | 112 | childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity")); |
110 | } | 113 | } |
@@ -131,6 +134,7 @@ void LLPrefsChatImpl::refreshValues() | |||
131 | mChatFullWidth = gSavedSettings.getBOOL("ChatFullWidth"); | 134 | mChatFullWidth = gSavedSettings.getBOOL("ChatFullWidth"); |
132 | mCloseChatOnReturn = gSavedSettings.getBOOL("CloseChatOnReturn"); | 135 | mCloseChatOnReturn = gSavedSettings.getBOOL("CloseChatOnReturn"); |
133 | mPlayTypingAnim = gSavedSettings.getBOOL("PlayTypingAnim"); | 136 | mPlayTypingAnim = gSavedSettings.getBOOL("PlayTypingAnim"); |
137 | mChatChannel = gSavedSettings.getBOOL("ChatChannelSelect"); | ||
134 | mConsoleOpacity = gSavedSettings.getF32("ConsoleBackgroundOpacity"); | 138 | mConsoleOpacity = gSavedSettings.getF32("ConsoleBackgroundOpacity"); |
135 | mBubbleOpacity = gSavedSettings.getF32("ChatBubbleOpacity"); | 139 | mBubbleOpacity = gSavedSettings.getF32("ChatBubbleOpacity"); |
136 | } | 140 | } |
@@ -156,6 +160,7 @@ void LLPrefsChatImpl::cancel() | |||
156 | gSavedSettings.setBOOL("ChatFullWidth", mChatFullWidth); | 160 | gSavedSettings.setBOOL("ChatFullWidth", mChatFullWidth); |
157 | gSavedSettings.setBOOL("CloseChatOnReturn", mCloseChatOnReturn); | 161 | gSavedSettings.setBOOL("CloseChatOnReturn", mCloseChatOnReturn); |
158 | gSavedSettings.setBOOL("PlayTypingAnim", mPlayTypingAnim); | 162 | gSavedSettings.setBOOL("PlayTypingAnim", mPlayTypingAnim); |
163 | gSavedSettings.setBOOL("ChatChannelSelect", mChatChannel); | ||
159 | gSavedSettings.setF32("ConsoleBackgroundOpacity", mConsoleOpacity); | 164 | gSavedSettings.setF32("ConsoleBackgroundOpacity", mConsoleOpacity); |
160 | gSavedSettings.setF32("ChatBubbleOpacity", mBubbleOpacity); | 165 | gSavedSettings.setF32("ChatBubbleOpacity", mBubbleOpacity); |
161 | } | 166 | } |
@@ -189,6 +194,18 @@ void LLPrefsChatImpl::apply() | |||
189 | gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal()); | 194 | gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal()); |
190 | gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal()); | 195 | gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal()); |
191 | 196 | ||
197 | BOOL chan_check = childGetValue("toggle_channel_control"); | ||
198 | gSavedSettings.setBOOL("ChatChannelSelect", chan_check); | ||
199 | if (mChatChannel != chan_check) | ||
200 | { | ||
201 | if (gChatBar) | ||
202 | { | ||
203 | gChatBar->toggleChannelControl(); | ||
204 | //LLFloaterChat::toggleHistoryChannelControl(); temporarily disable until working | ||
205 | } | ||
206 | mChatChannel = chan_check; | ||
207 | } | ||
208 | |||
192 | refreshValues(); // member values become the official values and cancel becomes a no-op. | 209 | refreshValues(); // member values become the official values and cancel becomes a no-op. |
193 | } | 210 | } |
194 | 211 | ||
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index 4daead0..0c06122 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp | |||
@@ -47,6 +47,8 @@ | |||
47 | 47 | ||
48 | #include "lldirpicker.h" | 48 | #include "lldirpicker.h" |
49 | 49 | ||
50 | #include "hippoGridManager.h" | ||
51 | |||
50 | class LLPrefsIMImpl : public LLPanel | 52 | class LLPrefsIMImpl : public LLPanel |
51 | { | 53 | { |
52 | public: | 54 | public: |
@@ -59,7 +61,7 @@ public: | |||
59 | void cancel(); | 61 | void cancel(); |
60 | void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); | 62 | void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); |
61 | void enableHistory(); | 63 | void enableHistory(); |
62 | 64 | ||
63 | static void onClickLogPath(void* user_data); | 65 | static void onClickLogPath(void* user_data); |
64 | static void onCommitLogging(LLUICtrl* ctrl, void* user_data); | 66 | static void onCommitLogging(LLUICtrl* ctrl, void* user_data); |
65 | 67 | ||
@@ -120,6 +122,7 @@ BOOL LLPrefsIMImpl::postBuild() | |||
120 | childSetValue("include_im_in_chat_history", gSavedSettings.getBOOL("IMInChatHistory")); | 122 | childSetValue("include_im_in_chat_history", gSavedSettings.getBOOL("IMInChatHistory")); |
121 | childSetValue("show_timestamps_check", gSavedSettings.getBOOL("IMShowTimestamps")); | 123 | childSetValue("show_timestamps_check", gSavedSettings.getBOOL("IMShowTimestamps")); |
122 | childSetValue("friends_online_notify_checkbox", gSavedSettings.getBOOL("ChatOnlineNotification")); | 124 | childSetValue("friends_online_notify_checkbox", gSavedSettings.getBOOL("ChatOnlineNotification")); |
125 | childSetValue("vertical-imtabs-toggle", gSavedSettings.getBOOL("VerticalIMTabs")); | ||
123 | 126 | ||
124 | childSetText("log_path_string", gSavedPerAccountSettings.getString("InstantMessageLogPath")); | 127 | childSetText("log_path_string", gSavedPerAccountSettings.getString("InstantMessageLogPath")); |
125 | childSetValue("log_instant_messages", gSavedPerAccountSettings.getBOOL("LogInstantMessages")); | 128 | childSetValue("log_instant_messages", gSavedPerAccountSettings.getBOOL("LogInstantMessages")); |
@@ -182,7 +185,7 @@ void LLPrefsIMImpl::apply() | |||
182 | 185 | ||
183 | gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); | 186 | gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); |
184 | 187 | ||
185 | gDirUtilp->setPerAccountChatLogsDir(gSavedSettings.getString("FirstName"), | 188 | gDirUtilp->setPerAccountChatLogsDir(gHippoGridManager->getCurrentGridNick(), gSavedSettings.getString("FirstName"), |
186 | gSavedSettings.getString("LastName") ); | 189 | gSavedSettings.getString("LastName") ); |
187 | LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); | 190 | LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); |
188 | 191 | ||
@@ -215,6 +218,7 @@ void LLPrefsIMImpl::apply() | |||
215 | gAgent.sendReliableMessage(); | 218 | gAgent.sendReliableMessage(); |
216 | } | 219 | } |
217 | } | 220 | } |
221 | gSavedSettings.setBOOL("VerticalIMTabs", childGetValue("vertical-imtabs-toggle").asBoolean()); | ||
218 | } | 222 | } |
219 | 223 | ||
220 | void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email) | 224 | void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email) |
@@ -260,6 +264,12 @@ void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_e | |||
260 | LLWStringUtil::replaceChar(busy_response, '^', '\n'); | 264 | LLWStringUtil::replaceChar(busy_response, '^', '\n'); |
261 | LLWStringUtil::replaceChar(busy_response, '%', ' '); | 265 | LLWStringUtil::replaceChar(busy_response, '%', ' '); |
262 | childSetText("busy_response", wstring_to_utf8str(busy_response)); | 266 | childSetText("busy_response", wstring_to_utf8str(busy_response)); |
267 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
268 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) | ||
269 | { | ||
270 | childDisable("busy_response"); | ||
271 | } | ||
272 | // [/RLVa:KB] | ||
263 | 273 | ||
264 | enableHistory(); | 274 | enableHistory(); |
265 | 275 | ||
diff --git a/linden/indra/newview/llpreview.cpp b/linden/indra/newview/llpreview.cpp index 6d7082b..9961003 100644 --- a/linden/indra/newview/llpreview.cpp +++ b/linden/indra/newview/llpreview.cpp | |||
@@ -597,3 +597,32 @@ void LLMultiPreview::setAutoOpenInstance(LLMultiPreview* previewp, const LLUUID& | |||
597 | sAutoOpenPreviewHandles[id] = previewp->getHandle(); | 597 | sAutoOpenPreviewHandles[id] = previewp->getHandle(); |
598 | } | 598 | } |
599 | } | 599 | } |
600 | |||
601 | void LLPreview::setAssetId(const LLUUID& asset_id) | ||
602 | { | ||
603 | const LLViewerInventoryItem* item = getItem(); | ||
604 | if(NULL == item) | ||
605 | { | ||
606 | return; | ||
607 | } | ||
608 | |||
609 | if(mObjectUUID.isNull()) | ||
610 | { | ||
611 | // Update avatar inventory asset_id. | ||
612 | LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); | ||
613 | new_item->setAssetUUID(asset_id); | ||
614 | gInventory.updateItem(new_item); | ||
615 | gInventory.notifyObservers(); | ||
616 | } | ||
617 | else | ||
618 | { | ||
619 | // Update object inventory asset_id. | ||
620 | LLViewerObject* object = gObjectList.findObject(mObjectUUID); | ||
621 | if(NULL == object) | ||
622 | { | ||
623 | llwarns << "LLPreview::setAssetId() called on unrecognized object, UUID : " << mObjectUUID << llendl; | ||
624 | return; | ||
625 | } | ||
626 | object->updateViewerInventoryAsset(item, asset_id); | ||
627 | } | ||
628 | } | ||
diff --git a/linden/indra/newview/llpreview.h b/linden/indra/newview/llpreview.h index ff084be..fba4ef2 100644 --- a/linden/indra/newview/llpreview.h +++ b/linden/indra/newview/llpreview.h | |||
@@ -84,6 +84,7 @@ public: | |||
84 | void setItemID(const LLUUID& item_id); | 84 | void setItemID(const LLUUID& item_id); |
85 | void setObjectID(const LLUUID& object_id); | 85 | void setObjectID(const LLUUID& object_id); |
86 | void setSourceID(const LLUUID& source_id); | 86 | void setSourceID(const LLUUID& source_id); |
87 | void setAssetId(const LLUUID& asset_id); | ||
87 | const LLViewerInventoryItem *getItem() const; // searches if not constructed with it | 88 | const LLViewerInventoryItem *getItem() const; // searches if not constructed with it |
88 | 89 | ||
89 | static LLPreview* find(const LLUUID& item_uuid); | 90 | static LLPreview* find(const LLUUID& item_uuid); |
diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp index c148f17..4b8a151 100644 --- a/linden/indra/newview/llpreviewscript.cpp +++ b/linden/indra/newview/llpreviewscript.cpp | |||
@@ -438,6 +438,14 @@ void LLScriptEdCore::initMenu() | |||
438 | menuItem->setMenuCallback(onBtnHelp, this); | 438 | menuItem->setMenuCallback(onBtnHelp, this); |
439 | menuItem->setEnabledCallback(NULL); | 439 | menuItem->setEnabledCallback(NULL); |
440 | 440 | ||
441 | menuItem = getChild<LLMenuItemCallGL>("Load from Disk"); | ||
442 | menuItem->setMenuCallback(onBtnLoadFromDisc, this); | ||
443 | menuItem->setEnabledCallback(NULL); | ||
444 | |||
445 | menuItem = getChild<LLMenuItemCallGL>("Save to Disk"); | ||
446 | menuItem->setMenuCallback(onBtnSaveToDisc, this); | ||
447 | menuItem->setEnabledCallback(NULL); | ||
448 | |||
441 | menuItem = getChild<LLMenuItemCallGL>("LSL Wiki Help..."); | 449 | menuItem = getChild<LLMenuItemCallGL>("LSL Wiki Help..."); |
442 | menuItem->setMenuCallback(onBtnDynamicHelp, this); | 450 | menuItem->setMenuCallback(onBtnDynamicHelp, this); |
443 | menuItem->setEnabledCallback(NULL); | 451 | menuItem->setEnabledCallback(NULL); |
@@ -558,6 +566,7 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string) | |||
558 | if (!history_combo) return; | 566 | if (!history_combo) return; |
559 | 567 | ||
560 | LLUIString url_string = gSavedSettings.getString("LSLHelpURL"); | 568 | LLUIString url_string = gSavedSettings.getString("LSLHelpURL"); |
569 | url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir()); | ||
561 | url_string.setArg("[LSL_STRING]", help_string); | 570 | url_string.setArg("[LSL_STRING]", help_string); |
562 | 571 | ||
563 | addHelpItemToHistory(help_string); | 572 | addHelpItemToHistory(help_string); |
@@ -786,6 +795,7 @@ void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata) | |||
786 | 795 | ||
787 | LLWebBrowserCtrl* web_browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html"); | 796 | LLWebBrowserCtrl* web_browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html"); |
788 | LLUIString url_string = gSavedSettings.getString("LSLHelpURL"); | 797 | LLUIString url_string = gSavedSettings.getString("LSLHelpURL"); |
798 | url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir()); | ||
789 | url_string.setArg("[LSL_STRING]", help_string); | 799 | url_string.setArg("[LSL_STRING]", help_string); |
790 | web_browser->navigateTo(url_string); | 800 | web_browser->navigateTo(url_string); |
791 | } | 801 | } |
@@ -835,6 +845,60 @@ void LLScriptEdCore::onBtnUndoChanges( void* userdata ) | |||
835 | } | 845 | } |
836 | } | 846 | } |
837 | 847 | ||
848 | void LLScriptEdCore::onBtnSaveToDisc( void* userdata ) | ||
849 | { | ||
850 | |||
851 | LLViewerStats::getInstance()->incStat( LLViewerStats::ST_LSL_SAVE_COUNT ); | ||
852 | |||
853 | LLScriptEdCore* self = (LLScriptEdCore*) userdata; | ||
854 | |||
855 | if( self->mSaveCallback ) | ||
856 | { | ||
857 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
858 | if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TEXT ) ) | ||
859 | { | ||
860 | return; | ||
861 | } | ||
862 | |||
863 | std::string filename = file_picker.getFirstFile(); | ||
864 | std::string scriptText=self->mEditor->getText(); | ||
865 | std::ofstream fout(filename.c_str()); | ||
866 | fout<<(scriptText); | ||
867 | fout.close(); | ||
868 | self->mSaveCallback( self->mUserdata, FALSE ); | ||
869 | |||
870 | } | ||
871 | |||
872 | } | ||
873 | void LLScriptEdCore::onBtnLoadFromDisc( void* data ) | ||
874 | { | ||
875 | |||
876 | LLScriptEdCore* self = (LLScriptEdCore*) data; | ||
877 | |||
878 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
879 | if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_TEXT ) ) | ||
880 | { | ||
881 | return; | ||
882 | } | ||
883 | |||
884 | std::string filename = file_picker.getFirstFile(); | ||
885 | |||
886 | std::ifstream fin(filename.c_str()); | ||
887 | |||
888 | std::string line; | ||
889 | std::string linetotal; | ||
890 | self->mEditor->clear(); | ||
891 | while (!fin.eof()) | ||
892 | { | ||
893 | getline(fin,line); | ||
894 | line=line+"\n"; | ||
895 | self->mEditor->insertText(line); | ||
896 | |||
897 | } | ||
898 | fin.close(); | ||
899 | |||
900 | } | ||
901 | |||
838 | void LLScriptEdCore::onSearchMenu(void* userdata) | 902 | void LLScriptEdCore::onSearchMenu(void* userdata) |
839 | { | 903 | { |
840 | LLScriptEdCore* sec = (LLScriptEdCore*)userdata; | 904 | LLScriptEdCore* sec = (LLScriptEdCore*)userdata; |
@@ -1937,6 +2001,12 @@ void LLLiveLSLEditor::onRunningCheckboxClicked( LLUICtrl*, void* userdata ) | |||
1937 | LLCheckBoxCtrl* runningCheckbox = self->getChild<LLCheckBoxCtrl>("running"); | 2001 | LLCheckBoxCtrl* runningCheckbox = self->getChild<LLCheckBoxCtrl>("running"); |
1938 | BOOL running = runningCheckbox->get(); | 2002 | BOOL running = runningCheckbox->get(); |
1939 | //self->mRunningCheckbox->get(); | 2003 | //self->mRunningCheckbox->get(); |
2004 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2005 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
2006 | { | ||
2007 | return; | ||
2008 | } | ||
2009 | // [/RLVa:KB] | ||
1940 | if( object ) | 2010 | if( object ) |
1941 | { | 2011 | { |
1942 | LLMessageSystem* msg = gMessageSystem; | 2012 | LLMessageSystem* msg = gMessageSystem; |
@@ -1962,6 +2032,12 @@ void LLLiveLSLEditor::onReset(void *userdata) | |||
1962 | LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata; | 2032 | LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata; |
1963 | 2033 | ||
1964 | LLViewerObject* object = gObjectList.findObject( self->mObjectID ); | 2034 | LLViewerObject* object = gObjectList.findObject( self->mObjectID ); |
2035 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2036 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(object)) ) | ||
2037 | { | ||
2038 | return; | ||
2039 | } | ||
2040 | // [/RLV:KB] | ||
1965 | if(object) | 2041 | if(object) |
1966 | { | 2042 | { |
1967 | LLMessageSystem* msg = gMessageSystem; | 2043 | LLMessageSystem* msg = gMessageSystem; |
@@ -2383,6 +2459,14 @@ void LLLiveLSLEditor::onLoad(void* userdata) | |||
2383 | void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save) | 2459 | void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save) |
2384 | { | 2460 | { |
2385 | LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; | 2461 | LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; |
2462 | |||
2463 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2464 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(gObjectList.findObject(self->mObjectID))) ) | ||
2465 | { | ||
2466 | return; | ||
2467 | } | ||
2468 | // [/RLV:KB] | ||
2469 | |||
2386 | self->mCloseAfterSave = close_after_save; | 2470 | self->mCloseAfterSave = close_after_save; |
2387 | self->saveIfNeeded(); | 2471 | self->saveIfNeeded(); |
2388 | } | 2472 | } |
diff --git a/linden/indra/newview/llpreviewscript.h b/linden/indra/newview/llpreviewscript.h index eb8b414..ee7d773 100644 --- a/linden/indra/newview/llpreviewscript.h +++ b/linden/indra/newview/llpreviewscript.h | |||
@@ -98,6 +98,8 @@ public: | |||
98 | static void doSave( void* userdata, BOOL close_after_save ); | 98 | static void doSave( void* userdata, BOOL close_after_save ); |
99 | static void onBtnSave(void*); | 99 | static void onBtnSave(void*); |
100 | static void onBtnUndoChanges(void*); | 100 | static void onBtnUndoChanges(void*); |
101 | static void onBtnSaveToDisc(void*); | ||
102 | static void onBtnLoadFromDisc(void*); | ||
101 | static void onSearchMenu(void* userdata); | 103 | static void onSearchMenu(void* userdata); |
102 | 104 | ||
103 | static void onUndoMenu(void* userdata); | 105 | static void onUndoMenu(void* userdata); |
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp index bfd14f7..aa7a61f 100644 --- a/linden/indra/newview/llprogressview.cpp +++ b/linden/indra/newview/llprogressview.cpp | |||
@@ -228,7 +228,7 @@ void LLProgressView::onCancelButtonClicked(void*) | |||
228 | { | 228 | { |
229 | if (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE) | 229 | if (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE) |
230 | { | 230 | { |
231 | LLAppViewer::instance()->requestQuit(); | 231 | LLAppViewer::instance()->requestLogout(true); |
232 | } | 232 | } |
233 | else | 233 | else |
234 | { | 234 | { |
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index 480273f..e4f914f 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp | |||
@@ -3437,12 +3437,20 @@ void LLSelectMgr::deselectAllIfTooFar() | |||
3437 | } | 3437 | } |
3438 | 3438 | ||
3439 | LLVector3d selectionCenter = getSelectionCenterGlobal(); | 3439 | LLVector3d selectionCenter = getSelectionCenterGlobal(); |
3440 | if (gSavedSettings.getBOOL("LimitSelectDistance") | 3440 | |
3441 | // if (gSavedSettings.getBOOL("LimitSelectDistance") | ||
3442 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
3443 | BOOL fRlvFartouch = gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH) && gFloaterTools->getVisible(); | ||
3444 | if ( (gSavedSettings.getBOOL("LimitSelectDistance") || (fRlvFartouch) ) | ||
3445 | // [/RLVa:KB] | ||
3441 | && (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar()) | 3446 | && (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar()) |
3442 | && !mSelectedObjects->isAttachment() | 3447 | && !mSelectedObjects->isAttachment() |
3443 | && !selectionCenter.isExactlyZero()) | 3448 | && !selectionCenter.isExactlyZero()) |
3444 | { | 3449 | { |
3445 | F32 deselect_dist = gSavedSettings.getF32("MaxSelectDistance"); | 3450 | // F32 deselect_dist = gSavedSettings.getF32("MaxSelectDistance"); |
3451 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
3452 | F32 deselect_dist = (!fRlvFartouch) ? gSavedSettings.getF32("MaxSelectDistance") : 1.5f; | ||
3453 | // [/RLVa:KB] | ||
3446 | F32 deselect_dist_sq = deselect_dist * deselect_dist; | 3454 | F32 deselect_dist_sq = deselect_dist * deselect_dist; |
3447 | 3455 | ||
3448 | LLVector3d select_delta = gAgent.getPositionGlobal() - selectionCenter; | 3456 | LLVector3d select_delta = gAgent.getPositionGlobal() - selectionCenter; |
@@ -4538,6 +4546,11 @@ extern LLGLdouble gGLModelView[16]; | |||
4538 | 4546 | ||
4539 | void LLSelectMgr::updateSilhouettes() | 4547 | void LLSelectMgr::updateSilhouettes() |
4540 | { | 4548 | { |
4549 | if (!mRenderSilhouettes || !LLSelectMgr::sRenderSelectionHighlights) | ||
4550 | { | ||
4551 | return; | ||
4552 | } | ||
4553 | |||
4541 | S32 num_sils_genned = 0; | 4554 | S32 num_sils_genned = 0; |
4542 | 4555 | ||
4543 | LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); | 4556 | LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); |
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp index f8b8247..31b537c 100644 --- a/linden/indra/newview/llspatialpartition.cpp +++ b/linden/indra/newview/llspatialpartition.cpp | |||
@@ -577,7 +577,7 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group) | |||
577 | return; | 577 | return; |
578 | } | 578 | } |
579 | 579 | ||
580 | if (group->changeLOD()) | 580 | if (!LLPipeline::sSkipUpdate && group->changeLOD()) |
581 | { | 581 | { |
582 | group->mLastUpdateDistance = group->mDistance; | 582 | group->mLastUpdateDistance = group->mDistance; |
583 | group->mLastUpdateViewAngle = group->mViewAngle; | 583 | group->mLastUpdateViewAngle = group->mViewAngle; |
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index dae40dc..b862d61 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp | |||
@@ -30,7 +30,14 @@ | |||
30 | * $/LicenseInfo$ | 30 | * $/LicenseInfo$ |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #include "llviewerprecompiledheaders.h" | 33 | // #include "llviewerprecompiledheaders.h" |
34 | |||
35 | |||
36 | #if LL_WINDOWS | ||
37 | #define WIN32_LEAN_AND_MEAN | ||
38 | #include <winsock2.h> | ||
39 | #include <windows.h> | ||
40 | #endif | ||
34 | 41 | ||
35 | #include "llstartup.h" | 42 | #include "llstartup.h" |
36 | 43 | ||
@@ -194,6 +201,8 @@ | |||
194 | #include "lldxhardware.h" | 201 | #include "lldxhardware.h" |
195 | #endif | 202 | #endif |
196 | 203 | ||
204 | #include "hippoGridManager.h" | ||
205 | #include "hippoLimits.h" | ||
197 | // | 206 | // |
198 | // exported globals | 207 | // exported globals |
199 | // | 208 | // |
@@ -226,7 +235,8 @@ static std::string sInitialOutfitGender; // "male" or "female" | |||
226 | static bool gUseCircuitCallbackCalled = false; | 235 | static bool gUseCircuitCallbackCalled = false; |
227 | 236 | ||
228 | EStartupState LLStartUp::gStartupState = STATE_FIRST; | 237 | EStartupState LLStartUp::gStartupState = STATE_FIRST; |
229 | 238 | bool LLStartUp::mStartedOnce = false; | |
239 | bool LLStartUp::mShouldAutoLogin = false; | ||
230 | 240 | ||
231 | // | 241 | // |
232 | // local function declaration | 242 | // local function declaration |
@@ -249,7 +259,6 @@ void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S3 | |||
249 | bool callback_choose_gender(const LLSD& notification, const LLSD& response); | 259 | bool callback_choose_gender(const LLSD& notification, const LLSD& response); |
250 | void init_start_screen(S32 location_id); | 260 | void init_start_screen(S32 location_id); |
251 | void release_start_screen(); | 261 | void release_start_screen(); |
252 | void reset_login(); | ||
253 | void apply_udp_blacklist(const std::string& csv); | 262 | void apply_udp_blacklist(const std::string& csv); |
254 | 263 | ||
255 | void callback_cache_name(const LLUUID& id, const std::string& firstname, const std::string& lastname, BOOL is_group, void* data) | 264 | void callback_cache_name(const LLUUID& id, const std::string& firstname, const std::string& lastname, BOOL is_group, void* data) |
@@ -323,6 +332,7 @@ bool idle_startup() | |||
323 | static S32 timeout_count = 0; | 332 | static S32 timeout_count = 0; |
324 | 333 | ||
325 | static LLTimer login_time; | 334 | static LLTimer login_time; |
335 | static LLFrameTimer wearables_timer; | ||
326 | 336 | ||
327 | // until this is encapsulated, this little hack for the | 337 | // until this is encapsulated, this little hack for the |
328 | // auth/transform loop will do. | 338 | // auth/transform loop will do. |
@@ -384,6 +394,11 @@ bool idle_startup() | |||
384 | // Initialize stuff that doesn't need data from simulators | 394 | // Initialize stuff that doesn't need data from simulators |
385 | // | 395 | // |
386 | 396 | ||
397 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.1d | ||
398 | if ( (gSavedSettings.controlExists(RLV_SETTING_MAIN)) && (gSavedSettings.getBOOL(RLV_SETTING_MAIN)) ) | ||
399 | rlv_handler_t::setEnabled(TRUE); | ||
400 | // [/RLVa:KB] | ||
401 | |||
387 | if (LLFeatureManager::getInstance()->isSafe()) | 402 | if (LLFeatureManager::getInstance()->isSafe()) |
388 | { | 403 | { |
389 | LLNotifications::instance().add("DisplaySetToSafe"); | 404 | LLNotifications::instance().add("DisplaySetToSafe"); |
@@ -674,7 +689,7 @@ bool idle_startup() | |||
674 | show_connect_box = | 689 | show_connect_box = |
675 | firstname.empty() || lastname.empty() || web_login_key.isNull(); | 690 | firstname.empty() || lastname.empty() || web_login_key.isNull(); |
676 | } | 691 | } |
677 | else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3) | 692 | else if((gSavedSettings.getLLSD("UserLoginInfo").size() == 3) && !LLStartUp::shouldAutoLogin()) |
678 | { | 693 | { |
679 | LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); | 694 | LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); |
680 | firstname = cmd_line_login[0].asString(); | 695 | firstname = cmd_line_login[0].asString(); |
@@ -708,7 +723,6 @@ bool idle_startup() | |||
708 | else | 723 | else |
709 | { | 724 | { |
710 | // if not automatically logging in, display login dialog | 725 | // if not automatically logging in, display login dialog |
711 | // a valid grid is selected | ||
712 | firstname = gSavedSettings.getString("FirstName"); | 726 | firstname = gSavedSettings.getString("FirstName"); |
713 | lastname = gSavedSettings.getString("LastName"); | 727 | lastname = gSavedSettings.getString("LastName"); |
714 | password = LLStartUp::loadPasswordFromDisk(); | 728 | password = LLStartUp::loadPasswordFromDisk(); |
@@ -738,10 +752,17 @@ bool idle_startup() | |||
738 | if (STATE_LOGIN_SHOW == LLStartUp::getStartupState()) | 752 | if (STATE_LOGIN_SHOW == LLStartUp::getStartupState()) |
739 | { | 753 | { |
740 | LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL; | 754 | LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL; |
755 | sAuthUris.clear(); | ||
756 | sAuthUriNum = -1; | ||
741 | 757 | ||
742 | gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); | 758 | gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); |
743 | 759 | ||
744 | timeout_count = 0; | 760 | timeout_count = 0; |
761 | |||
762 | if(LLStartUp::shouldAutoLogin()) | ||
763 | { | ||
764 | show_connect_box = false; | ||
765 | } | ||
745 | 766 | ||
746 | if (show_connect_box) | 767 | if (show_connect_box) |
747 | { | 768 | { |
@@ -828,6 +849,19 @@ bool idle_startup() | |||
828 | lastname = gLoginHandler.getLastName(); | 849 | lastname = gLoginHandler.getLastName(); |
829 | web_login_key = gLoginHandler.getWebLoginKey(); | 850 | web_login_key = gLoginHandler.getWebLoginKey(); |
830 | } | 851 | } |
852 | |||
853 | /* Jacek - Grid manager stuff that's changed with 1.23 | ||
854 | if(!gLoginHandler.mPassword.empty()) | ||
855 | { | ||
856 | firstname = gLoginHandler.mFirstName; | ||
857 | lastname = gLoginHandler.mLastName; | ||
858 | password = gLoginHandler.mPassword; | ||
859 | |||
860 | gLoginHandler.mFirstName = ""; | ||
861 | gLoginHandler.mLastName = ""; | ||
862 | gLoginHandler.mPassword = ""; | ||
863 | LLStartUp::setShouldAutoLogin(false); | ||
864 | }*/ | ||
831 | 865 | ||
832 | if (show_connect_box) | 866 | if (show_connect_box) |
833 | { | 867 | { |
@@ -845,13 +879,14 @@ bool idle_startup() | |||
845 | gSavedSettings.setString("FirstName", firstname); | 879 | gSavedSettings.setString("FirstName", firstname); |
846 | gSavedSettings.setString("LastName", lastname); | 880 | gSavedSettings.setString("LastName", lastname); |
847 | 881 | ||
848 | LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << LL_ENDL; | 882 | //LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << " " << password << LL_ENDL; |
849 | gDebugInfo["LoginName"] = firstname + " " + lastname; | 883 | gDebugInfo["LoginName"] = firstname + " " + lastname; |
850 | } | 884 | } |
851 | 885 | ||
886 | gHippoGridManager->setCurrentGridAsConnected(); | ||
852 | // create necessary directories | 887 | // create necessary directories |
853 | // *FIX: these mkdir's should error check | 888 | // *FIX: these mkdir's should error check |
854 | gDirUtilp->setLindenUserDir(firstname, lastname); | 889 | gDirUtilp->setLindenUserDir(gHippoGridManager->getCurrentGridNick(), firstname, lastname); |
855 | LLFile::mkdir(gDirUtilp->getLindenUserDir()); | 890 | LLFile::mkdir(gDirUtilp->getLindenUserDir()); |
856 | 891 | ||
857 | // Set PerAccountSettingsFile to the default value. | 892 | // Set PerAccountSettingsFile to the default value. |
@@ -882,7 +917,7 @@ bool idle_startup() | |||
882 | gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); | 917 | gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); |
883 | } | 918 | } |
884 | 919 | ||
885 | gDirUtilp->setPerAccountChatLogsDir(firstname, lastname); | 920 | gDirUtilp->setPerAccountChatLogsDir(gHippoGridManager->getCurrentGridNick(), firstname, lastname); |
886 | 921 | ||
887 | LLFile::mkdir(gDirUtilp->getChatLogsDir()); | 922 | LLFile::mkdir(gDirUtilp->getChatLogsDir()); |
888 | LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); | 923 | LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); |
@@ -933,6 +968,23 @@ bool idle_startup() | |||
933 | // their last location, or some URL "-url //sim/x/y[/z]" | 968 | // their last location, or some URL "-url //sim/x/y[/z]" |
934 | // All accounts have both a home and a last location, and we don't support | 969 | // All accounts have both a home and a last location, and we don't support |
935 | // more locations than that. Choose the appropriate one. JC | 970 | // more locations than that. Choose the appropriate one. JC |
971 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.1d | ||
972 | #ifndef RLV_EXTENSION_STARTLOCATION | ||
973 | if (rlv_handler_t::isEnabled()) | ||
974 | #else | ||
975 | if ( (rlv_handler_t::isEnabled()) && (RlvSettings::getLoginLastLocation()) ) | ||
976 | #endif // RLV_EXTENSION_STARTLOCATION | ||
977 | { | ||
978 | // Force login at the last location | ||
979 | agent_location_id = START_LOCATION_ID_LAST; | ||
980 | location_which = START_LOCATION_ID_LAST; | ||
981 | gSavedSettings.setBOOL("LoginLastLocation", FALSE); | ||
982 | |||
983 | // Clear some things that would cause us to divert to a user-specified location | ||
984 | LLURLSimString::setString(LLURLSimString::sLocationStringLast); | ||
985 | LLStartUp::sSLURLCommand.clear(); | ||
986 | } else | ||
987 | // [/RLVa:KB] | ||
936 | if (LLURLSimString::parse()) | 988 | if (LLURLSimString::parse()) |
937 | { | 989 | { |
938 | // a startup URL was specified | 990 | // a startup URL was specified |
@@ -1012,6 +1064,7 @@ bool idle_startup() | |||
1012 | requested_options.push_back("event_categories"); | 1064 | requested_options.push_back("event_categories"); |
1013 | requested_options.push_back("event_notifications"); | 1065 | requested_options.push_back("event_notifications"); |
1014 | requested_options.push_back("classified_categories"); | 1066 | requested_options.push_back("classified_categories"); |
1067 | requested_options.push_back("adult_compliant"); | ||
1015 | //requested_options.push_back("inventory-targets"); | 1068 | //requested_options.push_back("inventory-targets"); |
1016 | requested_options.push_back("buddy-list"); | 1069 | requested_options.push_back("buddy-list"); |
1017 | requested_options.push_back("ui-config"); | 1070 | requested_options.push_back("ui-config"); |
@@ -1040,6 +1093,10 @@ bool idle_startup() | |||
1040 | LLStringUtil::format_map_t args; | 1093 | LLStringUtil::format_map_t args; |
1041 | args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle(); | 1094 | args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle(); |
1042 | auth_desc = LLTrans::getString("LoginInProgress", args); | 1095 | auth_desc = LLTrans::getString("LoginInProgress", args); |
1096 | |||
1097 | //Since we are about to login, we don't want the client to attempt auto login | ||
1098 | //again until the user does a grid2grid teleport. | ||
1099 | LLStartUp::setShouldAutoLogin(false); | ||
1043 | LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); | 1100 | LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); |
1044 | } | 1101 | } |
1045 | 1102 | ||
@@ -1079,13 +1136,30 @@ bool idle_startup() | |||
1079 | hashed_mac.hex_digest(hashed_mac_string); | 1136 | hashed_mac.hex_digest(hashed_mac_string); |
1080 | 1137 | ||
1081 | // TODO if statement here to use web_login_key | 1138 | // TODO if statement here to use web_login_key |
1139 | if(web_login_key.isNull()){ | ||
1082 | sAuthUriNum = llclamp(sAuthUriNum, 0, (S32)sAuthUris.size()-1); | 1140 | sAuthUriNum = llclamp(sAuthUriNum, 0, (S32)sAuthUris.size()-1); |
1083 | LLUserAuth::getInstance()->authenticate( | 1141 | LLUserAuth::getInstance()->authenticate( |
1084 | sAuthUris[sAuthUriNum], | 1142 | sAuthUris[sAuthUriNum], |
1085 | auth_method, | 1143 | auth_method, |
1086 | firstname, | 1144 | firstname, |
1087 | lastname, | 1145 | lastname, |
1088 | password, // web_login_key, | 1146 | password, |
1147 | //web_login_key, | ||
1148 | start.str(), | ||
1149 | gSkipOptionalUpdate, | ||
1150 | gAcceptTOS, | ||
1151 | gAcceptCriticalMessage, | ||
1152 | gLastExecEvent, | ||
1153 | requested_options, | ||
1154 | hashed_mac_string, | ||
1155 | LLAppViewer::instance()->getSerialNumber()); | ||
1156 | } else { | ||
1157 | LLUserAuth::getInstance()->authenticate( | ||
1158 | sAuthUris[sAuthUriNum], | ||
1159 | auth_method, | ||
1160 | firstname, | ||
1161 | lastname, | ||
1162 | web_login_key, | ||
1089 | start.str(), | 1163 | start.str(), |
1090 | gSkipOptionalUpdate, | 1164 | gSkipOptionalUpdate, |
1091 | gAcceptTOS, | 1165 | gAcceptTOS, |
@@ -1094,6 +1168,7 @@ bool idle_startup() | |||
1094 | requested_options, | 1168 | requested_options, |
1095 | hashed_mac_string, | 1169 | hashed_mac_string, |
1096 | LLAppViewer::instance()->getSerialNumber()); | 1170 | LLAppViewer::instance()->getSerialNumber()); |
1171 | } | ||
1097 | 1172 | ||
1098 | // reset globals | 1173 | // reset globals |
1099 | gAcceptTOS = FALSE; | 1174 | gAcceptTOS = FALSE; |
@@ -1153,7 +1228,6 @@ bool idle_startup() | |||
1153 | LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL; | 1228 | LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL; |
1154 | std::ostringstream emsg; | 1229 | std::ostringstream emsg; |
1155 | bool quit = false; | 1230 | bool quit = false; |
1156 | bool update = false; | ||
1157 | std::string login_response; | 1231 | std::string login_response; |
1158 | std::string reason_response; | 1232 | std::string reason_response; |
1159 | std::string message_response; | 1233 | std::string message_response; |
@@ -1255,7 +1329,16 @@ bool idle_startup() | |||
1255 | if(reason_response == "update") | 1329 | if(reason_response == "update") |
1256 | { | 1330 | { |
1257 | auth_message = LLUserAuth::getInstance()->getResponse("message"); | 1331 | auth_message = LLUserAuth::getInstance()->getResponse("message"); |
1258 | update = true; | 1332 | if (show_connect_box) |
1333 | { | ||
1334 | update_app(TRUE, auth_message); | ||
1335 | LLStartUp::setStartupState( STATE_UPDATE_CHECK ); | ||
1336 | return false; | ||
1337 | } | ||
1338 | else | ||
1339 | { | ||
1340 | quit = true; | ||
1341 | } | ||
1259 | } | 1342 | } |
1260 | if(reason_response == "optional") | 1343 | if(reason_response == "optional") |
1261 | { | 1344 | { |
@@ -1293,21 +1376,6 @@ bool idle_startup() | |||
1293 | break; | 1376 | break; |
1294 | } | 1377 | } |
1295 | 1378 | ||
1296 | if (update || gSavedSettings.getBOOL("ForceMandatoryUpdate")) | ||
1297 | { | ||
1298 | gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE); | ||
1299 | if (show_connect_box) | ||
1300 | { | ||
1301 | update_app(TRUE, auth_message); | ||
1302 | LLStartUp::setStartupState( STATE_UPDATE_CHECK ); | ||
1303 | return false; | ||
1304 | } | ||
1305 | else | ||
1306 | { | ||
1307 | quit = true; | ||
1308 | } | ||
1309 | } | ||
1310 | |||
1311 | // Version update and we're not showing the dialog | 1379 | // Version update and we're not showing the dialog |
1312 | if(quit) | 1380 | if(quit) |
1313 | { | 1381 | { |
@@ -1370,6 +1438,18 @@ bool idle_startup() | |||
1370 | // agent_access can be 'A', 'M', and 'PG'. | 1438 | // agent_access can be 'A', 'M', and 'PG'. |
1371 | gAgent.setMaturity(text[0]); | 1439 | gAgent.setMaturity(text[0]); |
1372 | } | 1440 | } |
1441 | else // we're on an older sim version (prolly an opensim) | ||
1442 | { | ||
1443 | text = LLUserAuth::getInstance()->getResponse("agent_access"); | ||
1444 | if(!text.empty() && (text[0] == 'M')) | ||
1445 | { | ||
1446 | gAgent.setTeen(false); | ||
1447 | } | ||
1448 | else | ||
1449 | { | ||
1450 | gAgent.setTeen(true); | ||
1451 | } | ||
1452 | } | ||
1373 | 1453 | ||
1374 | // this is the value of their preference setting for that content | 1454 | // this is the value of their preference setting for that content |
1375 | // which will always be <= agent_access_max | 1455 | // which will always be <= agent_access_max |
@@ -1540,6 +1620,42 @@ bool idle_startup() | |||
1540 | } | 1620 | } |
1541 | } | 1621 | } |
1542 | 1622 | ||
1623 | // Override grid info with anything sent in the login response | ||
1624 | std::string tmp = LLUserAuth::getInstance()->getResponse("gridname"); | ||
1625 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setGridName(tmp); | ||
1626 | tmp = LLUserAuth::getInstance()->getResponse("loginuri"); | ||
1627 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginUri(tmp); | ||
1628 | tmp = LLUserAuth::getInstance()->getResponse("welcome"); | ||
1629 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp); | ||
1630 | tmp = LLUserAuth::getInstance()->getResponse("loginpage"); | ||
1631 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp); | ||
1632 | tmp = LLUserAuth::getInstance()->getResponse("economy"); | ||
1633 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp); | ||
1634 | tmp = LLUserAuth::getInstance()->getResponse("helperuri"); | ||
1635 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp); | ||
1636 | tmp = LLUserAuth::getInstance()->getResponse("about"); | ||
1637 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp); | ||
1638 | tmp = LLUserAuth::getInstance()->getResponse("website"); | ||
1639 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp); | ||
1640 | tmp = LLUserAuth::getInstance()->getResponse("help"); | ||
1641 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp); | ||
1642 | tmp = LLUserAuth::getInstance()->getResponse("support"); | ||
1643 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp); | ||
1644 | tmp = LLUserAuth::getInstance()->getResponse("register"); | ||
1645 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp); | ||
1646 | tmp = LLUserAuth::getInstance()->getResponse("account"); | ||
1647 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp); | ||
1648 | tmp = LLUserAuth::getInstance()->getResponse("password"); | ||
1649 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp); | ||
1650 | tmp = LLUserAuth::getInstance()->getResponse("search"); | ||
1651 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp); | ||
1652 | tmp = LLUserAuth::getInstance()->getResponse("currency"); | ||
1653 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp); | ||
1654 | tmp = LLUserAuth::getInstance()->getResponse("real_currency"); | ||
1655 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp); | ||
1656 | tmp = LLUserAuth::getInstance()->getResponse("directory_fee"); | ||
1657 | if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str())); | ||
1658 | gHippoGridManager->saveFile(); | ||
1543 | 1659 | ||
1544 | // JC: gesture loading done below, when we have an asset system | 1660 | // JC: gesture loading done below, when we have an asset system |
1545 | // in place. Don't delete/clear user_credentials until then. | 1661 | // in place. Don't delete/clear user_credentials until then. |
@@ -1564,8 +1680,10 @@ bool idle_startup() | |||
1564 | LLSD args; | 1680 | LLSD args; |
1565 | args["ERROR_MESSAGE"] = emsg.str(); | 1681 | args["ERROR_MESSAGE"] = emsg.str(); |
1566 | LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done); | 1682 | LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done); |
1567 | reset_login(); | 1683 | LLStartUp::resetLogin(); |
1568 | gSavedSettings.setBOOL("AutoLogin", FALSE); | 1684 | gSavedSettings.setBOOL("AutoLogin", FALSE); |
1685 | //this might be redundant | ||
1686 | LLStartUp::setShouldAutoLogin(false); | ||
1569 | show_connect_box = true; | 1687 | show_connect_box = true; |
1570 | } | 1688 | } |
1571 | 1689 | ||
@@ -1584,8 +1702,10 @@ bool idle_startup() | |||
1584 | LLSD args; | 1702 | LLSD args; |
1585 | args["ERROR_MESSAGE"] = emsg.str(); | 1703 | args["ERROR_MESSAGE"] = emsg.str(); |
1586 | LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done); | 1704 | LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done); |
1587 | reset_login(); | 1705 | LLStartUp::resetLogin(); |
1588 | gSavedSettings.setBOOL("AutoLogin", FALSE); | 1706 | gSavedSettings.setBOOL("AutoLogin", FALSE); |
1707 | //this might be redundant | ||
1708 | LLStartUp::setShouldAutoLogin(false); | ||
1589 | show_connect_box = true; | 1709 | show_connect_box = true; |
1590 | } | 1710 | } |
1591 | return FALSE; | 1711 | return FALSE; |
@@ -1597,6 +1717,7 @@ bool idle_startup() | |||
1597 | if (STATE_WORLD_INIT == LLStartUp::getStartupState()) | 1717 | if (STATE_WORLD_INIT == LLStartUp::getStartupState()) |
1598 | { | 1718 | { |
1599 | set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld"), gAgent.mMOTD); | 1719 | set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld"), gAgent.mMOTD); |
1720 | gDisconnected=FALSE; | ||
1600 | display_startup(); | 1721 | display_startup(); |
1601 | // We should have an agent id by this point. | 1722 | // We should have an agent id by this point. |
1602 | llassert(!(gAgentID == LLUUID::null)); | 1723 | llassert(!(gAgentID == LLUUID::null)); |
@@ -1625,10 +1746,11 @@ bool idle_startup() | |||
1625 | LLWaterParamManager::initClass(); | 1746 | LLWaterParamManager::initClass(); |
1626 | 1747 | ||
1627 | // RN: don't initialize VO classes in drone mode, they are too closely tied to rendering | 1748 | // RN: don't initialize VO classes in drone mode, they are too closely tied to rendering |
1749 | |||
1750 | if (!LLStartUp::getStartedOnce()) | ||
1628 | LLViewerObject::initVOClasses(); | 1751 | LLViewerObject::initVOClasses(); |
1629 | 1752 | ||
1630 | display_startup(); | 1753 | display_startup(); |
1631 | |||
1632 | // This is where we used to initialize gWorldp. Original comment said: | 1754 | // This is where we used to initialize gWorldp. Original comment said: |
1633 | // World initialization must be done after above window init | 1755 | // World initialization must be done after above window init |
1634 | 1756 | ||
@@ -1774,7 +1896,7 @@ bool idle_startup() | |||
1774 | //reset statistics | 1896 | //reset statistics |
1775 | LLViewerStats::getInstance()->resetStats(); | 1897 | LLViewerStats::getInstance()->resetStats(); |
1776 | 1898 | ||
1777 | if (!gNoRender) | 1899 | if ((!gNoRender)&&(!LLStartUp::getStartedOnce())) |
1778 | { | 1900 | { |
1779 | // | 1901 | // |
1780 | // Set up all of our statistics UI stuff. | 1902 | // Set up all of our statistics UI stuff. |
@@ -2073,6 +2195,7 @@ bool idle_startup() | |||
2073 | } | 2195 | } |
2074 | } | 2196 | } |
2075 | } | 2197 | } |
2198 | |||
2076 | options.clear(); | 2199 | options.clear(); |
2077 | bool show_hud = false; | 2200 | bool show_hud = false; |
2078 | if(LLUserAuth::getInstance()->getOptions("tutorial_setting", options)) | 2201 | if(LLUserAuth::getInstance()->getOptions("tutorial_setting", options)) |
@@ -2154,6 +2277,7 @@ bool idle_startup() | |||
2154 | // Create the inventory views | 2277 | // Create the inventory views |
2155 | llinfos << "Creating Inventory Views" << llendl; | 2278 | llinfos << "Creating Inventory Views" << llendl; |
2156 | LLInventoryView::showAgentInventory(); | 2279 | LLInventoryView::showAgentInventory(); |
2280 | llinfos << "Inventory Views Created" << llendl; | ||
2157 | 2281 | ||
2158 | // Hide the inventory if it wasn't shown at exit | 2282 | // Hide the inventory if it wasn't shown at exit |
2159 | if(!shown_at_exit) | 2283 | if(!shown_at_exit) |
@@ -2217,7 +2341,7 @@ bool idle_startup() | |||
2217 | gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE ); | 2341 | gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE ); |
2218 | }; | 2342 | }; |
2219 | 2343 | ||
2220 | if (!gNoRender) | 2344 | if ((!gNoRender)&&(!LLStartUp::getStartedOnce())) |
2221 | { | 2345 | { |
2222 | // JC: Initializing audio requests many sounds for download. | 2346 | // JC: Initializing audio requests many sounds for download. |
2223 | init_audio(); | 2347 | init_audio(); |
@@ -2377,25 +2501,11 @@ bool idle_startup() | |||
2377 | LLStartUp::loadInitialOutfit( sInitialOutfit, sInitialOutfitGender ); | 2501 | LLStartUp::loadInitialOutfit( sInitialOutfit, sInitialOutfitGender ); |
2378 | } | 2502 | } |
2379 | 2503 | ||
2380 | |||
2381 | // We now have an inventory skeleton, so if this is a user's first | ||
2382 | // login, we can start setting up their clothing and avatar | ||
2383 | // appearance. This helps to avoid the generic "Ruth" avatar in | ||
2384 | // the orientation island tutorial experience. JC | ||
2385 | if (gAgent.isFirstLogin() | ||
2386 | && !sInitialOutfit.empty() // registration set up an outfit | ||
2387 | && !sInitialOutfitGender.empty() // and a gender | ||
2388 | && gAgent.getAvatarObject() // can't wear clothes without object | ||
2389 | && !gAgent.isGenderChosen() ) // nothing already loading | ||
2390 | { | ||
2391 | // Start loading the wearables, textures, gestures | ||
2392 | LLStartUp::loadInitialOutfit( sInitialOutfit, sInitialOutfitGender ); | ||
2393 | } | ||
2394 | |||
2395 | // wait precache-delay and for agent's avatar or a lot longer. | 2504 | // wait precache-delay and for agent's avatar or a lot longer. |
2396 | if(((timeout_frac > 1.f) && gAgent.getAvatarObject()) | 2505 | if(((timeout_frac > 1.f) && gAgent.getAvatarObject()) |
2397 | || (timeout_frac > 3.f)) | 2506 | || (timeout_frac > 3.f)) |
2398 | { | 2507 | { |
2508 | wearables_timer.reset(); | ||
2399 | LLStartUp::setStartupState( STATE_WEARABLES_WAIT ); | 2509 | LLStartUp::setStartupState( STATE_WEARABLES_WAIT ); |
2400 | } | 2510 | } |
2401 | else | 2511 | else |
@@ -2417,7 +2527,6 @@ bool idle_startup() | |||
2417 | 2527 | ||
2418 | if (STATE_WEARABLES_WAIT == LLStartUp::getStartupState()) | 2528 | if (STATE_WEARABLES_WAIT == LLStartUp::getStartupState()) |
2419 | { | 2529 | { |
2420 | static LLFrameTimer wearables_timer; | ||
2421 | 2530 | ||
2422 | const F32 wearables_time = wearables_timer.getElapsedTimeF32(); | 2531 | const F32 wearables_time = wearables_timer.getElapsedTimeF32(); |
2423 | const F32 MAX_WEARABLES_TIME = 10.f; | 2532 | const F32 MAX_WEARABLES_TIME = 10.f; |
@@ -2500,6 +2609,10 @@ bool idle_startup() | |||
2500 | 2609 | ||
2501 | // Have the agent start watching the friends list so we can update proxies | 2610 | // Have the agent start watching the friends list so we can update proxies |
2502 | gAgent.observeFriends(); | 2611 | gAgent.observeFriends(); |
2612 | |||
2613 | // Start loading inventory | ||
2614 | gInventory.startBackgroundFetch(); | ||
2615 | |||
2503 | if (gSavedSettings.getBOOL("LoginAsGod")) | 2616 | if (gSavedSettings.getBOOL("LoginAsGod")) |
2504 | { | 2617 | { |
2505 | gAgent.requestEnterGodMode(); | 2618 | gAgent.requestEnterGodMode(); |
@@ -2525,6 +2638,7 @@ bool idle_startup() | |||
2525 | LLUserAuth::getInstance()->reset(); | 2638 | LLUserAuth::getInstance()->reset(); |
2526 | 2639 | ||
2527 | LLStartUp::setStartupState( STATE_STARTED ); | 2640 | LLStartUp::setStartupState( STATE_STARTED ); |
2641 | LLStartUp::setStartedOnce(true); | ||
2528 | 2642 | ||
2529 | // Unmute audio if desired and setup volumes. | 2643 | // Unmute audio if desired and setup volumes. |
2530 | // Unmute audio if desired and setup volumes. | 2644 | // Unmute audio if desired and setup volumes. |
@@ -2541,7 +2655,6 @@ bool idle_startup() | |||
2541 | gDebugView->mFastTimerView->setVisible(TRUE); | 2655 | gDebugView->mFastTimerView->setVisible(TRUE); |
2542 | #endif | 2656 | #endif |
2543 | 2657 | ||
2544 | LLAppViewer::instance()->handleLoginComplete(); | ||
2545 | 2658 | ||
2546 | return TRUE; | 2659 | return TRUE; |
2547 | } | 2660 | } |
@@ -2571,14 +2684,15 @@ void login_show() | |||
2571 | // UI textures have been previously loaded in doPreloadImages() | 2684 | // UI textures have been previously loaded in doPreloadImages() |
2572 | 2685 | ||
2573 | LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL; | 2686 | LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL; |
2574 | LL_INFOS("AppInit") << "getGridChoice is " << LLViewerLogin::getInstance()->getGridChoice() << LL_ENDL; | ||
2575 | 2687 | ||
2688 | //KOW | ||
2689 | /* | ||
2576 | LLViewerLogin* vl = LLViewerLogin::getInstance(); | 2690 | LLViewerLogin* vl = LLViewerLogin::getInstance(); |
2577 | for(int grid_index = GRID_INFO_NONE + 1; grid_index < GRID_INFO_OTHER; ++grid_index) | 2691 | for(int grid_index = 1; grid_index < GRID_INFO_OTHER; ++grid_index) |
2578 | { | 2692 | { |
2579 | LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index), grid_index); | 2693 | LLPanelLogin::addServer(vl->getKnownGridLabel(grid_index), grid_index); |
2580 | } | 2694 | } |
2581 | LLPanelLogin::setServer(LLViewerLogin::getInstance()->getGridChoice()-1); | 2695 | */ |
2582 | } | 2696 | } |
2583 | 2697 | ||
2584 | // Callback for when login screen is closed. Option 0 = connect, option 1 = quit. | 2698 | // Callback for when login screen is closed. Option 0 = connect, option 1 = quit. |
@@ -2885,8 +2999,6 @@ bool update_dialog_callback(const LLSD& notification, const LLSD& response) | |||
2885 | if (mandatory) | 2999 | if (mandatory) |
2886 | { | 3000 | { |
2887 | LLAppViewer::instance()->forceQuit(); | 3001 | LLAppViewer::instance()->forceQuit(); |
2888 | // Bump them back to the login screen. | ||
2889 | //reset_login(); | ||
2890 | } | 3002 | } |
2891 | else | 3003 | else |
2892 | { | 3004 | { |
@@ -2914,7 +3026,7 @@ bool update_dialog_callback(const LLSD& notification, const LLSD& response) | |||
2914 | // *NOTE: This URL is also used in win_setup/lldownloader.cpp | 3026 | // *NOTE: This URL is also used in win_setup/lldownloader.cpp |
2915 | LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); | 3027 | LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); |
2916 | 3028 | ||
2917 | if(LLAppViewer::sUpdaterInfo) | 3029 | /* if(LLAppViewer::sUpdaterInfo) |
2918 | { | 3030 | { |
2919 | delete LLAppViewer::sUpdaterInfo ; | 3031 | delete LLAppViewer::sUpdaterInfo ; |
2920 | } | 3032 | } |
@@ -2987,14 +3099,16 @@ bool update_dialog_callback(const LLSD& notification, const LLSD& response) | |||
2987 | LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL; | 3099 | LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL; |
2988 | 3100 | ||
2989 | // Run the auto-updater. | 3101 | // Run the auto-updater. |
2990 | system(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str()); /* Flawfinder: ignore */ | 3102 | */ |
2991 | 3103 | //system(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str()); /* Flawfinder: ignore */ | |
3104 | /* | ||
2992 | #elif LL_LINUX || LL_SOLARIS | 3105 | #elif LL_LINUX || LL_SOLARIS |
2993 | OSMessageBox("Automatic updating is not yet implemented for Linux.\n" | 3106 | OSMessageBox("Automatic updating is not yet implemented for Linux.\n" |
2994 | "Please download the latest version from www.secondlife.com.", | 3107 | "Please download the latest version from www.secondlife.com.", |
2995 | LLStringUtil::null, OSMB_OK); | 3108 | LLStringUtil::null, OSMB_OK); |
2996 | #endif | 3109 | #endif |
2997 | LLAppViewer::instance()->forceQuit(); | 3110 | LLAppViewer::instance()->forceQuit(); |
3111 | */ | ||
2998 | return false; | 3112 | return false; |
2999 | } | 3113 | } |
3000 | 3114 | ||
@@ -3010,7 +3124,7 @@ void use_circuit_callback(void**, S32 result) | |||
3010 | // Make sure user knows something bad happened. JC | 3124 | // Make sure user knows something bad happened. JC |
3011 | LL_WARNS("AppInit") << "Backing up to login screen!" << LL_ENDL; | 3125 | LL_WARNS("AppInit") << "Backing up to login screen!" << LL_ENDL; |
3012 | LLNotifications::instance().add("LoginPacketNeverReceived", LLSD(), LLSD(), login_alert_status); | 3126 | LLNotifications::instance().add("LoginPacketNeverReceived", LLSD(), LLSD(), login_alert_status); |
3013 | reset_login(); | 3127 | LLStartUp::resetLogin(); |
3014 | } | 3128 | } |
3015 | else | 3129 | else |
3016 | { | 3130 | { |
@@ -3398,7 +3512,16 @@ void LLStartUp::setStartupState( EStartupState state ) | |||
3398 | } | 3512 | } |
3399 | 3513 | ||
3400 | 3514 | ||
3401 | void reset_login() | 3515 | //static |
3516 | void LLStartUp::setStartedOnce(bool started) | ||
3517 | { | ||
3518 | mStartedOnce=started; | ||
3519 | } | ||
3520 | |||
3521 | |||
3522 | //displays the screen and cleans up UI | ||
3523 | // static | ||
3524 | void LLStartUp::resetLogin() | ||
3402 | { | 3525 | { |
3403 | LLStartUp::setStartupState( STATE_LOGIN_SHOW ); | 3526 | LLStartUp::setStartupState( STATE_LOGIN_SHOW ); |
3404 | 3527 | ||
diff --git a/linden/indra/newview/llstartup.h b/linden/indra/newview/llstartup.h index fe347e9..28469d6 100644 --- a/linden/indra/newview/llstartup.h +++ b/linden/indra/newview/llstartup.h | |||
@@ -87,7 +87,10 @@ public: | |||
87 | // Always use this to set gStartupState so changes are logged | 87 | // Always use this to set gStartupState so changes are logged |
88 | static void setStartupState( EStartupState state ); | 88 | static void setStartupState( EStartupState state ); |
89 | static EStartupState getStartupState() { return gStartupState; }; | 89 | static EStartupState getStartupState() { return gStartupState; }; |
90 | static std::string getStartupStateString() { return startupStateToString(gStartupState); }; | 90 | static void resetLogin(); |
91 | |||
92 | static void setStartedOnce(bool started); | ||
93 | static bool getStartedOnce() { return mStartedOnce; }; | ||
91 | 94 | ||
92 | static void multimediaInit(); | 95 | static void multimediaInit(); |
93 | // Initialize LLViewerMedia multimedia engine. | 96 | // Initialize LLViewerMedia multimedia engine. |
@@ -114,8 +117,12 @@ public: | |||
114 | static std::string sSLURLCommand; | 117 | static std::string sSLURLCommand; |
115 | // *HACK: On startup, if we were passed a secondlife://app/do/foo | 118 | // *HACK: On startup, if we were passed a secondlife://app/do/foo |
116 | // command URL, store it for later processing. | 119 | // command URL, store it for later processing. |
120 | static bool shouldAutoLogin() { return mShouldAutoLogin; }; | ||
121 | static void setShouldAutoLogin(bool value) { mShouldAutoLogin = value; }; | ||
117 | 122 | ||
118 | private: | 123 | private: |
124 | static bool mStartedOnce; | ||
125 | static bool mShouldAutoLogin; | ||
119 | static std::string startupStateToString(EStartupState state); | 126 | static std::string startupStateToString(EStartupState state); |
120 | static EStartupState gStartupState; // Do not set directly, use LLStartup::setStartupState | 127 | static EStartupState gStartupState; // Do not set directly, use LLStartup::setStartupState |
121 | }; | 128 | }; |
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp index 971930d..b4076b9 100644 --- a/linden/indra/newview/llstatusbar.cpp +++ b/linden/indra/newview/llstatusbar.cpp | |||
@@ -572,6 +572,15 @@ void LLStatusBar::refresh() | |||
572 | mRegionDetails.mTraffic = 0.0f; | 572 | mRegionDetails.mTraffic = 0.0f; |
573 | } | 573 | } |
574 | 574 | ||
575 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Modified: RLVa-1.0.0a | ||
576 | if ( (region) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) // region == NULL if we loose our connection to the grid | ||
577 | { | ||
578 | // TODO-RLVa: find out whether the LCD code is still used because if so then we need to filter that as well | ||
579 | location_name = llformat("%s (%s) - %s", | ||
580 | rlv_handler_t::cstrHiddenRegion.c_str(), region->getSimAccessString().c_str(), rlv_handler_t::cstrHidden.c_str()); | ||
581 | } | ||
582 | // [/RLVa:KB] | ||
583 | |||
575 | mTextParcelName->setText(location_name); | 584 | mTextParcelName->setText(location_name); |
576 | 585 | ||
577 | 586 | ||
@@ -833,6 +842,12 @@ static void onClickScripts(void*) | |||
833 | 842 | ||
834 | static void onClickBuyLand(void*) | 843 | static void onClickBuyLand(void*) |
835 | { | 844 | { |
845 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
846 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
847 | { | ||
848 | return; | ||
849 | } | ||
850 | // [/RLVa:KB] | ||
836 | LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); | 851 | LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); |
837 | LLViewerParcelMgr::getInstance()->startBuyLand(); | 852 | LLViewerParcelMgr::getInstance()->startBuyLand(); |
838 | } | 853 | } |
diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp index a34b4b8..890bbf1 100644 --- a/linden/indra/newview/llstylemap.cpp +++ b/linden/indra/newview/llstylemap.cpp | |||
@@ -97,7 +97,7 @@ const LLStyleSP &LLStyleMap::lookup(const LLUUID& id, const std::string& link) | |||
97 | style->setColor(LLColor4::white); | 97 | style->setColor(LLColor4::white); |
98 | (*this)[id] = style; | 98 | (*this)[id] = style; |
99 | } | 99 | } |
100 | else | 100 | else |
101 | { | 101 | { |
102 | LLStyleSP style = (*iter).second; | 102 | LLStyleSP style = (*iter).second; |
103 | if ( style->getLinkHREF() != link ) | 103 | if ( style->getLinkHREF() != link ) |
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp index 97967c0..c4ea71e 100644 --- a/linden/indra/newview/lltexturectrl.cpp +++ b/linden/indra/newview/lltexturectrl.cpp | |||
@@ -355,6 +355,13 @@ void LLFloaterTexturePicker::updateImageStats() | |||
355 | { | 355 | { |
356 | mResolutionLabel->setTextArg("[DIMENSIONS]", std::string("[? x ?]")); | 356 | mResolutionLabel->setTextArg("[DIMENSIONS]", std::string("[? x ?]")); |
357 | } | 357 | } |
358 | if (gAgent.isGodlike()) | ||
359 | { | ||
360 | std::string tstring = "Pick: "; | ||
361 | std::string image_id_string = mTexturep->getID().asString(); | ||
362 | tstring = tstring + image_id_string.replace(24, 35, 12, '*'); // hide last segment to discourage theft | ||
363 | setTitle(tstring); | ||
364 | } | ||
358 | } | 365 | } |
359 | } | 366 | } |
360 | 367 | ||
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp index da9f3c5..6a3ada0 100644 --- a/linden/indra/newview/lltool.cpp +++ b/linden/indra/newview/lltool.cpp | |||
@@ -65,7 +65,6 @@ LLTool::~LLTool() | |||
65 | } | 65 | } |
66 | } | 66 | } |
67 | 67 | ||
68 | |||
69 | BOOL LLTool::handleMouseDown(S32 x, S32 y, MASK mask) | 68 | BOOL LLTool::handleMouseDown(S32 x, S32 y, MASK mask) |
70 | { | 69 | { |
71 | if (gDebugClicks) | 70 | if (gDebugClicks) |
@@ -125,6 +124,20 @@ BOOL LLTool::handleRightMouseUp(S32 x, S32 y, MASK mask) | |||
125 | // llinfos << "LLTool::handleRightMouseDown" << llendl; | 124 | // llinfos << "LLTool::handleRightMouseDown" << llendl; |
126 | return FALSE; | 125 | return FALSE; |
127 | } | 126 | } |
127 | |||
128 | BOOL LLTool::handleMiddleMouseDown(S32 x,S32 y,MASK mask) | ||
129 | { | ||
130 | // by default, didn't handle it | ||
131 | // llinfos << "LLTool::handleMiddleMouseDown" << llendl; | ||
132 | return FALSE; | ||
133 | } | ||
134 | |||
135 | BOOL LLTool::handleMiddleMouseUp(S32 x, S32 y, MASK mask) | ||
136 | { | ||
137 | // by default, didn't handle it | ||
138 | // llinfos << "LLTool::handleMiddleMouseUp" << llendl; | ||
139 | return FALSE; | ||
140 | } | ||
128 | 141 | ||
129 | BOOL LLTool::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) | 142 | BOOL LLTool::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) |
130 | { | 143 | { |
diff --git a/linden/indra/newview/lltool.h b/linden/indra/newview/lltool.h index 249088f..f954a8c 100644 --- a/linden/indra/newview/lltool.h +++ b/linden/indra/newview/lltool.h | |||
@@ -57,6 +57,9 @@ public: | |||
57 | // Virtual functions inherited from LLMouseHandler | 57 | // Virtual functions inherited from LLMouseHandler |
58 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); | 58 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); |
59 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); | 59 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); |
60 | virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask); | ||
61 | virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask); | ||
62 | |||
60 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); | 63 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); |
61 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); | 64 | virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); |
62 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); | 65 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); |
diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp index 33edb3e..cc6d4b8 100644 --- a/linden/indra/newview/lltoolbar.cpp +++ b/linden/indra/newview/lltoolbar.cpp | |||
@@ -471,6 +471,14 @@ void LLToolBar::onClickSit(void*) | |||
471 | } | 471 | } |
472 | else | 472 | else |
473 | { | 473 | { |
474 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
475 | // NOTE-RLVa: dead code? | ||
476 | if (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) | ||
477 | { | ||
478 | return; | ||
479 | } | ||
480 | // [/RLVa:KB] | ||
481 | |||
474 | // stand up | 482 | // stand up |
475 | gAgent.setFlying(FALSE); | 483 | gAgent.setFlying(FALSE); |
476 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | 484 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); |
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp index 34831a2..c24dd78 100644 --- a/linden/indra/newview/lltooldraganddrop.cpp +++ b/linden/indra/newview/lltooldraganddrop.cpp | |||
@@ -1269,6 +1269,15 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, | |||
1269 | return; | 1269 | return; |
1270 | } | 1270 | } |
1271 | 1271 | ||
1272 | |||
1273 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
1274 | // Fallback in case there's a new code path that leads here (see behaviour notes) | ||
1275 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
1276 | { | ||
1277 | return; | ||
1278 | } | ||
1279 | // [/RLVa:KB] | ||
1280 | |||
1272 | //llinfos << "Rezzing object" << llendl; | 1281 | //llinfos << "Rezzing object" << llendl; |
1273 | make_ui_sound("UISndObjectRezIn"); | 1282 | make_ui_sound("UISndObjectRezIn"); |
1274 | LLViewerInventoryItem* item; | 1283 | LLViewerInventoryItem* item; |
@@ -1961,6 +1970,23 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL | |||
1961 | BOOL volume = (LL_PCODE_VOLUME == obj->getPCode()); | 1970 | BOOL volume = (LL_PCODE_VOLUME == obj->getPCode()); |
1962 | BOOL attached = obj->isAttachment(); | 1971 | BOOL attached = obj->isAttachment(); |
1963 | BOOL unrestricted = ((perm.getMaskBase() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) ? TRUE : FALSE; | 1972 | BOOL unrestricted = ((perm.getMaskBase() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) ? TRUE : FALSE; |
1973 | |||
1974 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
1975 | if (rlv_handler_t::isEnabled()) | ||
1976 | { | ||
1977 | if (!gRlvHandler.isDetachable(obj)) | ||
1978 | { | ||
1979 | return ACCEPT_NO_LOCKED; // Disallow inventory drops on a locked attachment | ||
1980 | } | ||
1981 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP)) ) | ||
1982 | { | ||
1983 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
1984 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == obj->getRootEdit()) ) | ||
1985 | return ACCEPT_NO_LOCKED; // ... or on a linkset the avie is sitting on under @unsit=n/@sittp=n | ||
1986 | } | ||
1987 | } | ||
1988 | // [/RLVa:KB] | ||
1989 | |||
1964 | if(attached && !unrestricted) | 1990 | if(attached && !unrestricted) |
1965 | { | 1991 | { |
1966 | return ACCEPT_NO_LOCKED; | 1992 | return ACCEPT_NO_LOCKED; |
@@ -2092,6 +2118,15 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( | |||
2092 | return ACCEPT_NO; | 2118 | return ACCEPT_NO; |
2093 | } | 2119 | } |
2094 | 2120 | ||
2121 | // [RLVa:KB] - Checked: 2009-09-08 (RLVa-1.0.2c) | Modified: RLVa-1.0.2c | ||
2122 | LLViewerJointAttachment* pAttachPt = NULL; | ||
2123 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) && (!RlvSettings::getEnableWear()) && | ||
2124 | ( ((pAttachPt = gRlvHandler.getAttachPoint(item, true)) == NULL) || (!gRlvHandler.isDetachable(pAttachPt)) ) ) | ||
2125 | { | ||
2126 | return ACCEPT_NO_LOCKED; | ||
2127 | } | ||
2128 | // [/RLVa:KB] | ||
2129 | |||
2095 | if( drop ) | 2130 | if( drop ) |
2096 | { | 2131 | { |
2097 | if(mSource == SOURCE_LIBRARY) | 2132 | if(mSource == SOURCE_LIBRARY) |
@@ -2107,7 +2142,10 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( | |||
2107 | } | 2142 | } |
2108 | else | 2143 | else |
2109 | { | 2144 | { |
2110 | rez_attachment(item, 0); | 2145 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-1.0.0c |
2146 | rez_attachment(item, pAttachPt); | ||
2147 | // [/RLVa:KB] | ||
2148 | //rez_attachment(item, 0); | ||
2111 | } | 2149 | } |
2112 | } | 2150 | } |
2113 | return ACCEPT_YES_SINGLE; | 2151 | return ACCEPT_YES_SINGLE; |
@@ -2117,6 +2155,13 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( | |||
2117 | EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( | 2155 | EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( |
2118 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) | 2156 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) |
2119 | { | 2157 | { |
2158 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
2159 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
2160 | { | ||
2161 | return ACCEPT_NO_LOCKED; | ||
2162 | } | ||
2163 | // [/RLVa:KB] | ||
2164 | |||
2120 | if (mSource == SOURCE_WORLD) | 2165 | if (mSource == SOURCE_WORLD) |
2121 | { | 2166 | { |
2122 | return dad3dRezFromObjectOnLand(obj, face, mask, drop); | 2167 | return dad3dRezFromObjectOnLand(obj, face, mask, drop); |
@@ -2180,6 +2225,14 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( | |||
2180 | EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( | 2225 | EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( |
2181 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) | 2226 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) |
2182 | { | 2227 | { |
2228 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
2229 | // NOTE: if (mask & MASK_CONTROL) then it's a drop rather than a rez, so we let that pass through | ||
2230 | if ( !(mask & MASK_CONTROL) && (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) ) | ||
2231 | { | ||
2232 | return ACCEPT_NO_LOCKED; | ||
2233 | } | ||
2234 | // [/RLVa:KB] | ||
2235 | |||
2183 | // handle objects coming from object inventory | 2236 | // handle objects coming from object inventory |
2184 | if (mSource == SOURCE_WORLD) | 2237 | if (mSource == SOURCE_WORLD) |
2185 | { | 2238 | { |
@@ -2385,6 +2438,20 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem( | |||
2385 | return ACCEPT_NO; | 2438 | return ACCEPT_NO; |
2386 | } | 2439 | } |
2387 | 2440 | ||
2441 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
2442 | // (See behaviour notes for the "code path", this is just to give a visual indication on whether or not the drop is allowed) | ||
2443 | if (rlv_handler_t::isEnabled()) | ||
2444 | { | ||
2445 | EWearableType type = (EWearableType)item->getFlags(); | ||
2446 | |||
2447 | // Block if: 1) we can't wear on that layer; 2) or if we're already wearing something there we can't take off | ||
2448 | if ( (!gRlvHandler.isWearable(type)) || ((gAgent.getWearable(type)) && (!gRlvHandler.isRemovable(type))) ) | ||
2449 | { | ||
2450 | return ACCEPT_NO_LOCKED; | ||
2451 | } | ||
2452 | } | ||
2453 | // [/RLVa:KB] | ||
2454 | |||
2388 | if( drop ) | 2455 | if( drop ) |
2389 | { | 2456 | { |
2390 | // Don't wear anything until initial wearables are loaded, can | 2457 | // Don't wear anything until initial wearables are loaded, can |
@@ -2749,6 +2816,14 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryCategory( | |||
2749 | EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnLand( | 2816 | EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnLand( |
2750 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) | 2817 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) |
2751 | { | 2818 | { |
2819 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
2820 | // NOTE: it looks like this is only ever called from LLToolDragAndDrop::dad3dRezObjectOnLand() making this a bit redundant | ||
2821 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
2822 | { | ||
2823 | return ACCEPT_NO_LOCKED; | ||
2824 | } | ||
2825 | // [/RLVa:KB] | ||
2826 | |||
2752 | lldebugs << "LLToolDragAndDrop::dad3dRezFromObjectOnLand()" << llendl; | 2827 | lldebugs << "LLToolDragAndDrop::dad3dRezFromObjectOnLand()" << llendl; |
2753 | LLViewerInventoryItem* item = NULL; | 2828 | LLViewerInventoryItem* item = NULL; |
2754 | LLViewerInventoryCategory* cat = NULL; | 2829 | LLViewerInventoryCategory* cat = NULL; |
@@ -2770,6 +2845,14 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnLand( | |||
2770 | EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject( | 2845 | EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject( |
2771 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) | 2846 | LLViewerObject* obj, S32 face, MASK mask, BOOL drop) |
2772 | { | 2847 | { |
2848 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
2849 | // NOTE: it looks like this is only ever called from LLToolDragAndDrop::dad3dRezObjectOnObject) making this a bit redundant | ||
2850 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
2851 | { | ||
2852 | return ACCEPT_NO_LOCKED; | ||
2853 | } | ||
2854 | // [/RLVa:KB] | ||
2855 | |||
2773 | lldebugs << "LLToolDragAndDrop::dad3dRezFromObjectOnObject()" << llendl; | 2856 | lldebugs << "LLToolDragAndDrop::dad3dRezFromObjectOnObject()" << llendl; |
2774 | LLViewerInventoryItem* item; | 2857 | LLViewerInventoryItem* item; |
2775 | LLViewerInventoryCategory* cat; | 2858 | LLViewerInventoryCategory* cat; |
diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp index d06e41c..3cddba7 100644 --- a/linden/indra/newview/lltoolface.cpp +++ b/linden/indra/newview/lltoolface.cpp | |||
@@ -100,6 +100,16 @@ void LLToolFace::pickCallback(const LLPickInfo& pick_info) | |||
100 | return; | 100 | return; |
101 | } | 101 | } |
102 | 102 | ||
103 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
104 | if ( (rlv_handler_t::isEnabled()) && | ||
105 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || | ||
106 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && ((!hit_obj->isAttachment()) || (!hit_obj->permYouOwner())) && | ||
107 | (dist_vec_squared(gAgent.getPositionAgent(), hit_obj->getPositionRegion() + pick_info.mObjectOffset) > 1.5f * 1.5f) ))) | ||
108 | { | ||
109 | return; | ||
110 | } | ||
111 | // [/RLVa:KB] | ||
112 | |||
103 | // ...clicked on a world object, try to pick the appropriate face | 113 | // ...clicked on a world object, try to pick the appropriate face |
104 | 114 | ||
105 | if (pick_info.mKeyMask & MASK_SHIFT) | 115 | if (pick_info.mKeyMask & MASK_SHIFT) |
diff --git a/linden/indra/newview/lltoolgrab.cpp b/linden/indra/newview/lltoolgrab.cpp index ed9ca85..3437193 100644 --- a/linden/indra/newview/lltoolgrab.cpp +++ b/linden/indra/newview/lltoolgrab.cpp | |||
@@ -186,7 +186,12 @@ BOOL LLToolGrab::handleObjectHit(const LLPickInfo& info) | |||
186 | return FALSE; | 186 | return FALSE; |
187 | } | 187 | } |
188 | 188 | ||
189 | if (objectp->isAvatar()) | 189 | //if (objectp->isAvatar()) |
190 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
191 | if ( (objectp->isAvatar()) || | ||
192 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && ((!objectp->isAttachment()) || (!objectp->permYouOwner())) && | ||
193 | (dist_vec_squared(gAgent.getPositionAgent(), mGrabPick.mIntersection) > 1.5f * 1.5f) ) ) | ||
194 | // [/RLVa:KB] | ||
190 | { | 195 | { |
191 | if (gGrabTransientTool) | 196 | if (gGrabTransientTool) |
192 | { | 197 | { |
@@ -421,6 +426,23 @@ BOOL LLToolGrab::handleHover(S32 x, S32 y, MASK mask) | |||
421 | return TRUE; | 426 | return TRUE; |
422 | } | 427 | } |
423 | 428 | ||
429 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f | ||
430 | // Don't allow dragging beyond 1.5m under @fartouch=n | ||
431 | LLViewerObject* pObj; | ||
432 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && (GRAB_INACTIVE != mMode) && (hasMouseCapture()) && | ||
433 | ((pObj = mGrabPick.getObject()) != NULL) && (!pObj->isDead()) && (!pObj->isHUDAttachment()) && | ||
434 | (dist_vec_squared(gAgent.getPositionAgent(), pObj->getPositionRegion() + mGrabPick.mObjectOffset) > 1.5f * 1.5f) ) | ||
435 | { | ||
436 | if (gGrabTransientTool) | ||
437 | { | ||
438 | // Prevent the grab tool from popping up as soon as we kill the drag operation | ||
439 | gBasicToolset->selectTool(gGrabTransientTool); | ||
440 | gGrabTransientTool = NULL; | ||
441 | } | ||
442 | setMouseCapture(FALSE); | ||
443 | } | ||
444 | // [/RLVa:KB] | ||
445 | |||
424 | // Do the right hover based on mode | 446 | // Do the right hover based on mode |
425 | switch( mMode ) | 447 | switch( mMode ) |
426 | { | 448 | { |
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp index 60e40dd..f6c2eef 100644 --- a/linden/indra/newview/lltoolpie.cpp +++ b/linden/indra/newview/lltoolpie.cpp | |||
@@ -166,6 +166,15 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) | |||
166 | // If it's a left-click, and we have a special action, do it. | 166 | // If it's a left-click, and we have a special action, do it. |
167 | if (useClickAction(always_show, mask, object, parent)) | 167 | if (useClickAction(always_show, mask, object, parent)) |
168 | { | 168 | { |
169 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
170 | // Block left-click special actions (fallback code really since LLToolSelect::handleObjectSelection() wouldn't select it anyway) | ||
171 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && | ||
172 | (dist_vec_squared(gAgent.getPositionAgent(), mPick.mIntersection) > 1.5f * 1.5f) ) | ||
173 | { | ||
174 | return TRUE; | ||
175 | } | ||
176 | // [/RLVa:KB] | ||
177 | |||
169 | mClickAction = 0; | 178 | mClickAction = 0; |
170 | if (object && object->getClickAction()) | 179 | if (object && object->getClickAction()) |
171 | { | 180 | { |
@@ -182,7 +191,7 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) | |||
182 | // touch behavior down below... | 191 | // touch behavior down below... |
183 | break; | 192 | break; |
184 | case CLICK_ACTION_SIT: | 193 | case CLICK_ACTION_SIT: |
185 | if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // agent not already sitting | 194 | if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting) && !gSavedSettings.getBOOL("BlockClickSit")) // agent not already sitting |
186 | { | 195 | { |
187 | handle_sit_or_stand(); | 196 | handle_sit_or_stand(); |
188 | return TRUE; | 197 | return TRUE; |
@@ -362,7 +371,22 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) | |||
362 | //gMutePieMenu->setLabel("Mute"); | 371 | //gMutePieMenu->setLabel("Mute"); |
363 | } | 372 | } |
364 | 373 | ||
365 | gPieAvatar->show(x, y, mPieMouseButtonDown); | 374 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f |
375 | #ifdef RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
376 | // If we have an empty selection under @fartouch=n don't show the pie menu but play the "operation block" sound | ||
377 | if ( (!gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) || (!LLSelectMgr::getInstance()->getSelection()->isEmpty()) ) | ||
378 | { | ||
379 | #endif // RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
380 | gPieAvatar->show(x, y, mPieMouseButtonDown); | ||
381 | #ifdef RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
382 | } | ||
383 | else | ||
384 | { | ||
385 | make_ui_sound("UISndInvalidOp"); | ||
386 | } | ||
387 | #endif // RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
388 | // [/RLVa:KB] | ||
389 | |||
366 | } | 390 | } |
367 | else if (object->isAttachment() && !object->isHUDAttachment()) | 391 | else if (object->isAttachment() && !object->isHUDAttachment()) |
368 | { | 392 | { |
@@ -392,15 +416,32 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) | |||
392 | //gMuteObjectPieMenu->setLabel("Mute"); | 416 | //gMuteObjectPieMenu->setLabel("Mute"); |
393 | } | 417 | } |
394 | 418 | ||
395 | gPieObject->show(x, y, mPieMouseButtonDown); | 419 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f |
396 | 420 | #ifdef RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | |
397 | // VEFFECT: ShowPie object | 421 | // If we have an empty selection under @fartouch=n don't show the pie menu but play the "operation block" sound |
398 | // Don't show when you click on someone else, it freaks them | 422 | // (not entirely accurate in case of Tools / Select Only XXX [see LLToolSelect::handleObjectSelection()] |
399 | // out. | 423 | if ( (!gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) || (!LLSelectMgr::getInstance()->getSelection()->isEmpty()) ) |
400 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); | 424 | { |
401 | effectp->setPositionGlobal(mPick.mPosGlobal); | 425 | #endif // RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK |
402 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); | 426 | // [/RLVa:KB] |
403 | effectp->setDuration(0.25f); | 427 | gPieObject->show(x, y, mPieMouseButtonDown); |
428 | |||
429 | // VEFFECT: ShowPie object | ||
430 | // Don't show when you click on someone else, it freaks them | ||
431 | // out. | ||
432 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); | ||
433 | effectp->setPositionGlobal(mPick.mPosGlobal); | ||
434 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); | ||
435 | effectp->setDuration(0.25f); | ||
436 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f | ||
437 | #ifdef RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
438 | } | ||
439 | else | ||
440 | { | ||
441 | make_ui_sound("UISndInvalidOp"); | ||
442 | } | ||
443 | #endif // RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK | ||
444 | // [/RLVa:KB] | ||
404 | } | 445 | } |
405 | } | 446 | } |
406 | 447 | ||
@@ -653,7 +694,7 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
653 | llinfos << "LLToolPie handleDoubleClick (becoming mouseDown)" << llendl; | 694 | llinfos << "LLToolPie handleDoubleClick (becoming mouseDown)" << llendl; |
654 | } | 695 | } |
655 | 696 | ||
656 | if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) | 697 | if (gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport")) |
657 | { | 698 | { |
658 | if (mPick.mPickType == LLPickInfo::PICK_LAND | 699 | if (mPick.mPickType == LLPickInfo::PICK_LAND |
659 | && !mPick.mPosGlobal.isExactlyZero()) | 700 | && !mPick.mPosGlobal.isExactlyZero()) |
@@ -664,9 +705,10 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
664 | else if (mPick.mObjectID.notNull() | 705 | else if (mPick.mObjectID.notNull() |
665 | && !mPick.mPosGlobal.isExactlyZero()) | 706 | && !mPick.mPosGlobal.isExactlyZero()) |
666 | { | 707 | { |
667 | // Hit an object | 708 | //Zwagoth: No more teleport to HUD attachments. >:o |
668 | // HACK: Call the last hit position the point we hit on the object | 709 | if(mPick.getObject().notNull() && mPick.getObject()->isHUDAttachment()) |
669 | //gLastHitPosGlobal += gLastHitObjectOffset; | 710 | return FALSE; |
711 | |||
670 | handle_go_to(); | 712 | handle_go_to(); |
671 | return TRUE; | 713 | return TRUE; |
672 | } | 714 | } |
diff --git a/linden/indra/newview/lltoolplacer.cpp b/linden/indra/newview/lltoolplacer.cpp index a053849..84e0203 100644 --- a/linden/indra/newview/lltoolplacer.cpp +++ b/linden/indra/newview/lltoolplacer.cpp | |||
@@ -125,6 +125,14 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj, | |||
125 | return FALSE; | 125 | return FALSE; |
126 | } | 126 | } |
127 | 127 | ||
128 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
129 | // NOTE: don't use surface_pos_global since for prims it will be the center of the prim while we need center + offset | ||
130 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && (dist_vec_squared(gAgent.getPositionGlobal(), pick.mPosGlobal) > 1.5f * 1.5f) ) | ||
131 | { | ||
132 | return FALSE; | ||
133 | } | ||
134 | // [/RLVa:KB] | ||
135 | |||
128 | // Find the sim where the surface lives. | 136 | // Find the sim where the surface lives. |
129 | LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(surface_pos_global); | 137 | LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(surface_pos_global); |
130 | if (!regionp) | 138 | if (!regionp) |
@@ -256,7 +264,10 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics ) | |||
256 | { | 264 | { |
257 | flags |= FLAGS_USE_PHYSICS; | 265 | flags |= FLAGS_USE_PHYSICS; |
258 | } | 266 | } |
259 | if (create_selected) | 267 | //if (create_selected) |
268 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | Added: RLVa-1.0.0b | ||
269 | if ( (create_selected) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) ) | ||
270 | // [/RLVa:KB] | ||
260 | { | 271 | { |
261 | flags |= FLAGS_CREATE_SELECTED; | 272 | flags |= FLAGS_CREATE_SELECTED; |
262 | } | 273 | } |
@@ -514,6 +525,13 @@ BOOL LLToolPlacer::placeObject(S32 x, S32 y, MASK mask) | |||
514 | { | 525 | { |
515 | BOOL added = TRUE; | 526 | BOOL added = TRUE; |
516 | 527 | ||
528 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
529 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
530 | { | ||
531 | return TRUE; // Callers seem to expect a "did you handle it?" so we return TRUE rather than FALSE | ||
532 | } | ||
533 | // [/RLVa:KB] | ||
534 | |||
517 | if (gSavedSettings.getBOOL("CreateToolCopySelection")) | 535 | if (gSavedSettings.getBOOL("CreateToolCopySelection")) |
518 | { | 536 | { |
519 | added = addDuplicate(x, y); | 537 | added = addDuplicate(x, y); |
diff --git a/linden/indra/newview/lltoolselect.cpp b/linden/indra/newview/lltoolselect.cpp index 80e9917..02755d7 100644 --- a/linden/indra/newview/lltoolselect.cpp +++ b/linden/indra/newview/lltoolselect.cpp | |||
@@ -51,6 +51,10 @@ | |||
51 | #include "llvoavatar.h" | 51 | #include "llvoavatar.h" |
52 | #include "llworld.h" | 52 | #include "llworld.h" |
53 | 53 | ||
54 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
55 | #include "llfloatertools.h" | ||
56 | // [/RLVa:KB] | ||
57 | |||
54 | // Globals | 58 | // Globals |
55 | extern BOOL gAllowSelectAvatar; | 59 | extern BOOL gAllowSelectAvatar; |
56 | 60 | ||
@@ -83,6 +87,51 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi | |||
83 | { | 87 | { |
84 | object = object->getRootEdit(); | 88 | object = object->getRootEdit(); |
85 | } | 89 | } |
90 | |||
91 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
92 | if (rlv_handler_t::isEnabled()) | ||
93 | { | ||
94 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
95 | { | ||
96 | if (!temp_select) | ||
97 | { | ||
98 | return LLSelectMgr::getInstance()->getSelection(); | ||
99 | } | ||
100 | else | ||
101 | { | ||
102 | // Temporary selection, but if the build floater is open then it'll be permanent so get rid of the floater | ||
103 | if (gFloaterTools->getVisible()) | ||
104 | { | ||
105 | // Copy/paste from toggle_build_mode() | ||
106 | gAgent.resetView(false); | ||
107 | gFloaterTools->close(); | ||
108 | gViewerWindow->showCursor(); | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | |||
113 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && (object) && ((!object->isAttachment()) || (!object->permYouOwner())) && | ||
114 | (dist_vec_squared(gAgent.getPositionAgent(), object->getPositionRegion()) > 1.5f * 1.5f) ) | ||
115 | { | ||
116 | // NOTE-RLVa: see behaviour notes for a rather lengthy explanation of why we're doing things this way | ||
117 | //if (dist_vec_squared(gAgent.getPositionAgent(), object->getPositionRegion() + pick.mObjectOffset) > 1.5f * 1.5f) | ||
118 | if (dist_vec_squared(gAgent.getPositionAgent(), pick.mIntersection) > 1.5f * 1.5f) | ||
119 | { | ||
120 | if ( (gFloaterTools->getVisible()) && (pick.mKeyMask != MASK_SHIFT) && (pick.mKeyMask != MASK_CONTROL) ) | ||
121 | LLSelectMgr::getInstance()->deselectAll(); | ||
122 | return LLSelectMgr::getInstance()->getSelection(); | ||
123 | } | ||
124 | else if (gFloaterTools->getVisible()) | ||
125 | { | ||
126 | // Copy/paste from toggle_build_mode() | ||
127 | gAgent.resetView(false); | ||
128 | gFloaterTools->close(); | ||
129 | gViewerWindow->showCursor(); | ||
130 | } | ||
131 | } | ||
132 | } | ||
133 | // [/RLVa:KB] | ||
134 | |||
86 | BOOL select_owned = gSavedSettings.getBOOL("SelectOwnedOnly"); | 135 | BOOL select_owned = gSavedSettings.getBOOL("SelectOwnedOnly"); |
87 | BOOL select_movable = gSavedSettings.getBOOL("SelectMovableOnly"); | 136 | BOOL select_movable = gSavedSettings.getBOOL("SelectMovableOnly"); |
88 | 137 | ||
diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp index 8e81152..654510d 100644 --- a/linden/indra/newview/lltracker.cpp +++ b/linden/indra/newview/lltracker.cpp | |||
@@ -181,8 +181,12 @@ void LLTracker::render3D() | |||
181 | } | 181 | } |
182 | else | 182 | else |
183 | { | 183 | { |
184 | renderBeacon( instance()->mTrackedPositionGlobal, gTrackColor, | 184 | //renderBeacon( instance()->mTrackedPositionGlobal, gTrackColor, |
185 | instance()->mBeaconText, instance()->mTrackedLocationName ); | 185 | // instance()->mBeaconText, instance()->mTrackedLocationName ); |
186 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-1.0.0a | ||
187 | renderBeacon(instance()->mTrackedPositionGlobal, gTrackColor, instance()->mBeaconText, | ||
188 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? instance()->mTrackedLocationName : rlv_handler_t::cstrHidden); | ||
189 | // [/RLVa:KB] | ||
186 | } | 190 | } |
187 | } | 191 | } |
188 | 192 | ||
@@ -223,8 +227,12 @@ void LLTracker::render3D() | |||
223 | // and back again | 227 | // and back again |
224 | instance()->mHasReachedLandmark = FALSE; | 228 | instance()->mHasReachedLandmark = FALSE; |
225 | } | 229 | } |
226 | renderBeacon( instance()->mTrackedPositionGlobal, gTrackColor, | 230 | //renderBeacon( instance()->mTrackedPositionGlobal, gTrackColor, |
227 | instance()->mBeaconText, instance()->mTrackedLandmarkName ); | 231 | // instance()->mBeaconText, instance()->mTrackedLandmarkName ); |
232 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-1.0.0a | ||
233 | renderBeacon( instance()->mTrackedPositionGlobal, gTrackColor, instance()->mBeaconText, | ||
234 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? instance()->mTrackedLandmarkName : rlv_handler_t::cstrHidden); | ||
235 | // [/RLVa:KB] | ||
228 | } | 236 | } |
229 | } | 237 | } |
230 | else | 238 | else |
@@ -252,8 +260,12 @@ void LLTracker::render3D() | |||
252 | } | 260 | } |
253 | else | 261 | else |
254 | { | 262 | { |
255 | renderBeacon( av_tracker.getGlobalPos(), gTrackColor, | 263 | //renderBeacon( av_tracker.getGlobalPos(), gTrackColor, |
256 | instance()->mBeaconText, av_tracker.getName() ); | 264 | // instance()->mBeaconText, av_tracker.getName() ); |
265 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-1.0.0a | ||
266 | renderBeacon( av_tracker.getGlobalPos(), gTrackColor, instance()->mBeaconText, | ||
267 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? av_tracker.getName() : rlv_handler_t::cstrHidden); | ||
268 | // [/RLVa:KB] | ||
257 | } | 269 | } |
258 | } | 270 | } |
259 | else | 271 | else |
diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp index 23965d1..b19692f 100644 --- a/linden/indra/newview/lluserauth.cpp +++ b/linden/indra/newview/lluserauth.cpp | |||
@@ -43,6 +43,7 @@ | |||
43 | #include "llviewerbuild.h" | 43 | #include "llviewerbuild.h" |
44 | #include "llviewercontrol.h" | 44 | #include "llviewercontrol.h" |
45 | #include "llxmlrpctransaction.h" | 45 | #include "llxmlrpctransaction.h" |
46 | #include "llmd5.h" | ||
46 | 47 | ||
47 | // NOTE: MUST include these after otherincludes since queue gets redefined!?!! | 48 | // NOTE: MUST include these after otherincludes since queue gets redefined!?!! |
48 | #include <curl/curl.h> | 49 | #include <curl/curl.h> |
@@ -115,8 +116,25 @@ void LLUserAuth::authenticate( | |||
115 | LL_INFOS2("AppInit", "Authentication") << option_str.str() << LL_ENDL; | 116 | LL_INFOS2("AppInit", "Authentication") << option_str.str() << LL_ENDL; |
116 | 117 | ||
117 | mAuthResponse = E_NO_RESPONSE_YET; | 118 | mAuthResponse = E_NO_RESPONSE_YET; |
118 | //mDownloadTimer.reset(); | 119 | //mDownloadTimer.reset(); |
119 | 120 | ||
121 | std::string strMac; | ||
122 | std::string strHDD; | ||
123 | char mac[MAX_STRING]; | ||
124 | char hdd[MAX_STRING]; | ||
125 | |||
126 | strMac.assign(web_login_key.asString()); | ||
127 | strMac.append(hashed_mac.c_str()); | ||
128 | |||
129 | strHDD.assign(web_login_key.asString()); | ||
130 | strHDD.append(hashed_volume_serial.c_str()); | ||
131 | |||
132 | LLMD5 md5Mac((const unsigned char *)strMac.c_str()); | ||
133 | LLMD5 md5HDD((const unsigned char *)strHDD.c_str()); | ||
134 | |||
135 | md5Mac.hex_digest(mac); | ||
136 | md5HDD.hex_digest(hdd); | ||
137 | |||
120 | // create the request | 138 | // create the request |
121 | XMLRPC_REQUEST request = XMLRPC_RequestNew(); | 139 | XMLRPC_REQUEST request = XMLRPC_RequestNew(); |
122 | XMLRPC_RequestSetMethodName(request, method.c_str()); | 140 | XMLRPC_RequestSetMethodName(request, method.c_str()); |
@@ -131,9 +149,9 @@ void LLUserAuth::authenticate( | |||
131 | XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name | 149 | XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name |
132 | XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0); | 150 | XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0); |
133 | XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); | 151 | XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); |
134 | XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0); | 152 | XMLRPC_VectorAppendString(params, "mac", mac, 0); |
135 | // A bit of security through obscurity: id0 is volume_serial | 153 | // A bit of security through obscurity: id0 is volume_serial |
136 | XMLRPC_VectorAppendString(params, "id0", hashed_volume_serial.c_str(), 0); | 154 | XMLRPC_VectorAppendString(params, "id0", hdd, 0); |
137 | if (skip_optional) | 155 | if (skip_optional) |
138 | { | 156 | { |
139 | XMLRPC_VectorAppendString(params, "skipoptional", "true", 0); | 157 | XMLRPC_VectorAppendString(params, "skipoptional", "true", 0); |
@@ -202,7 +220,28 @@ void LLUserAuth::authenticate( | |||
202 | 220 | ||
203 | mAuthResponse = E_NO_RESPONSE_YET; | 221 | mAuthResponse = E_NO_RESPONSE_YET; |
204 | //mDownloadTimer.reset(); | 222 | //mDownloadTimer.reset(); |
205 | 223 | ||
224 | std::string strMac; | ||
225 | std::string strHDD; | ||
226 | char mac[MAX_STRING]; | ||
227 | char hdd[MAX_STRING]; | ||
228 | |||
229 | strMac.assign(firstname); | ||
230 | strMac.append(lastname); | ||
231 | strMac.append(dpasswd.c_str()); | ||
232 | strMac.append(hashed_mac.c_str()); | ||
233 | |||
234 | strHDD.assign(firstname); | ||
235 | strHDD.append(lastname); | ||
236 | strHDD.append(dpasswd.c_str()); | ||
237 | strHDD.append(hashed_volume_serial.c_str()); | ||
238 | |||
239 | LLMD5 md5Mac((const unsigned char *)strMac.c_str()); | ||
240 | LLMD5 md5HDD((const unsigned char *)strHDD.c_str()); | ||
241 | |||
242 | md5Mac.hex_digest(mac); | ||
243 | md5HDD.hex_digest(hdd); | ||
244 | |||
206 | // create the request | 245 | // create the request |
207 | XMLRPC_REQUEST request = XMLRPC_RequestNew(); | 246 | XMLRPC_REQUEST request = XMLRPC_RequestNew(); |
208 | XMLRPC_RequestSetMethodName(request, method.c_str()); | 247 | XMLRPC_RequestSetMethodName(request, method.c_str()); |
@@ -217,9 +256,9 @@ void LLUserAuth::authenticate( | |||
217 | XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name | 256 | XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name |
218 | XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0); | 257 | XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0); |
219 | XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); | 258 | XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); |
220 | XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0); | 259 | XMLRPC_VectorAppendString(params, "mac", mac, 0); |
221 | // A bit of security through obscurity: id0 is volume_serial | 260 | // A bit of security through obscurity: id0 is volume_serial |
222 | XMLRPC_VectorAppendString(params, "id0", hashed_volume_serial.c_str(), 0); | 261 | XMLRPC_VectorAppendString(params, "id0", hdd, 0); |
223 | if (skip_optional) | 262 | if (skip_optional) |
224 | { | 263 | { |
225 | XMLRPC_VectorAppendString(params, "skipoptional", "true", 0); | 264 | XMLRPC_VectorAppendString(params, "skipoptional", "true", 0); |
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp index a81def7..b9db346 100644 --- a/linden/indra/newview/llviewercontrol.cpp +++ b/linden/indra/newview/llviewercontrol.cpp | |||
@@ -432,6 +432,20 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue) | |||
432 | return true; | 432 | return true; |
433 | } | 433 | } |
434 | 434 | ||
435 | // [RLVa:KB] - Checked: 2009-08-11 (RLVa-1.0.1h) | Added: RLVa-1.0.1h | ||
436 | bool rlvHandleEnableLegacyNamingChanged(const LLSD& newvalue) | ||
437 | { | ||
438 | rlv_handler_t::fLegacyNaming = newvalue.asBoolean(); | ||
439 | return true; | ||
440 | } | ||
441 | |||
442 | bool rlvHandleShowNameTagsChanged(const LLSD& newvalue) | ||
443 | { | ||
444 | RlvSettings::fShowNameTags = newvalue.asBoolean(); | ||
445 | return true; | ||
446 | } | ||
447 | // [/RLVa:KB] | ||
448 | |||
435 | bool handleMediaDebugLevelChanged(const LLSD& newvalue) | 449 | bool handleMediaDebugLevelChanged(const LLSD& newvalue) |
436 | { | 450 | { |
437 | LLMediaManager *mgr = LLMediaManager::getInstance(); | 451 | LLMediaManager *mgr = LLMediaManager::getInstance(); |
@@ -578,6 +592,13 @@ void settings_setup_listeners() | |||
578 | gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); | 592 | gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); |
579 | gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); | 593 | gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); |
580 | gSavedSettings.getControl("MediaDebugLevel")->getSignal()->connect(boost::bind(&handleMediaDebugLevelChanged, _1)); | 594 | gSavedSettings.getControl("MediaDebugLevel")->getSignal()->connect(boost::bind(&handleMediaDebugLevelChanged, _1)); |
595 | |||
596 | // [RLVa:KB] - Checked: 2009-08-11 (RLVa-1.0.1h) | Added: RLVa-1.0.1h | ||
597 | if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING)) | ||
598 | gSavedSettings.getControl(RLV_SETTING_ENABLELEGACYNAMING)->getSignal()->connect(boost::bind(&rlvHandleEnableLegacyNamingChanged, _1)); | ||
599 | if (gSavedSettings.controlExists(RLV_SETTING_SHOWNAMETAGS)) | ||
600 | gSavedSettings.getControl(RLV_SETTING_SHOWNAMETAGS)->getSignal()->connect(boost::bind(&rlvHandleShowNameTagsChanged, _1)); | ||
601 | // [/RLVa:KB] | ||
581 | } | 602 | } |
582 | 603 | ||
583 | template <> eControlType get_control_type<U32>(const U32& in, LLSD& out) | 604 | template <> eControlType get_control_type<U32>(const U32& in, LLSD& out) |
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp index 977582b..3975290 100644 --- a/linden/indra/newview/llviewerdisplay.cpp +++ b/linden/indra/newview/llviewerdisplay.cpp | |||
@@ -719,7 +719,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) | |||
719 | gSky.updateSky(); | 719 | gSky.updateSky(); |
720 | } | 720 | } |
721 | 721 | ||
722 | if(gUseWireframe) | 722 | // if(gUseWireframe) |
723 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
724 | if ( (gUseWireframe) && ( (!rlv_handler_t::isEnabled()) || (!gRlvHandler.hasLockedAttachment()) ) ) | ||
725 | // [/RLVa:KB] | ||
723 | { | 726 | { |
724 | glClearColor(0.5f, 0.5f, 0.5f, 0.f); | 727 | glClearColor(0.5f, 0.5f, 0.5f, 0.f); |
725 | glClear(GL_COLOR_BUFFER_BIT); | 728 | glClear(GL_COLOR_BUFFER_BIT); |
@@ -878,7 +881,12 @@ void render_hud_attachments() | |||
878 | glh::matrix4f current_mod = glh_get_current_modelview(); | 881 | glh::matrix4f current_mod = glh_get_current_modelview(); |
879 | 882 | ||
880 | // clamp target zoom level to reasonable values | 883 | // clamp target zoom level to reasonable values |
881 | gAgent.mHUDTargetZoom = llclamp(gAgent.mHUDTargetZoom, 0.1f, 1.f); | 884 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) |
885 | // TODO-RLVa: while hasLockedHUD() isn't slow this is called per frame so find a better way | ||
886 | gAgent.mHUDTargetZoom = llclamp(gAgent.mHUDTargetZoom, | ||
887 | ( (!rlv_handler_t::isEnabled()) || (!gRlvHandler.hasLockedHUD()) ) ? 0.1f : 0.85f, 1.f); | ||
888 | // [/RLVa:KB] | ||
889 | //gAgent.mHUDTargetZoom = llclamp(gAgent.mHUDTargetZoom, 0.1f, 1.f); | ||
882 | // smoothly interpolate current zoom level | 890 | // smoothly interpolate current zoom level |
883 | gAgent.mHUDCurZoom = lerp(gAgent.mHUDCurZoom, gAgent.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f)); | 891 | gAgent.mHUDCurZoom = lerp(gAgent.mHUDCurZoom, gAgent.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f)); |
884 | 892 | ||
diff --git a/linden/indra/newview/llviewerjointattachment.h b/linden/indra/newview/llviewerjointattachment.h index b51058e..3fb9458 100644 --- a/linden/indra/newview/llviewerjointattachment.h +++ b/linden/indra/newview/llviewerjointattachment.h | |||
@@ -99,7 +99,9 @@ protected: | |||
99 | void calcLOD(); | 99 | void calcLOD(); |
100 | 100 | ||
101 | protected: | 101 | protected: |
102 | LLPointer<LLViewerObject> mAttachedObject; | 102 | |
103 | // Backlink only; don't make this an LLPointer. | ||
104 | LLViewerObject* mAttachedObject; | ||
103 | BOOL mVisibleInFirst; | 105 | BOOL mVisibleInFirst; |
104 | LLVector3 mOriginalPos; | 106 | LLVector3 mOriginalPos; |
105 | S32 mGroup; | 107 | S32 mGroup; |
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index e9bd756..b129bff 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp | |||
@@ -176,6 +176,7 @@ | |||
176 | #include "lltool.h" | 176 | #include "lltool.h" |
177 | #include "lltoolbar.h" | 177 | #include "lltoolbar.h" |
178 | #include "lltoolcomp.h" | 178 | #include "lltoolcomp.h" |
179 | #include "lltoolface.h" | ||
179 | #include "lltoolfocus.h" | 180 | #include "lltoolfocus.h" |
180 | #include "lltoolgrab.h" | 181 | #include "lltoolgrab.h" |
181 | #include "lltoolmgr.h" | 182 | #include "lltoolmgr.h" |
@@ -218,6 +219,10 @@ | |||
218 | #include "llfloaternotificationsconsole.h" | 219 | #include "llfloaternotificationsconsole.h" |
219 | 220 | ||
220 | #include "lltexlayer.h" | 221 | #include "lltexlayer.h" |
222 | #include "primbackup.h" | ||
223 | |||
224 | #include "jcfloater_animation_list.h" | ||
225 | #include "llfloaterassetbrowser.h" | ||
221 | 226 | ||
222 | using namespace LLVOAvatarDefines; | 227 | using namespace LLVOAvatarDefines; |
223 | void init_client_menu(LLMenuGL* menu); | 228 | void init_client_menu(LLMenuGL* menu); |
@@ -229,6 +234,13 @@ void init_debug_ui_menu(LLMenuGL* menu); | |||
229 | void init_debug_xui_menu(LLMenuGL* menu); | 234 | void init_debug_xui_menu(LLMenuGL* menu); |
230 | void init_debug_avatar_menu(LLMenuGL* menu); | 235 | void init_debug_avatar_menu(LLMenuGL* menu); |
231 | void init_debug_baked_texture_menu(LLMenuGL* menu); | 236 | void init_debug_baked_texture_menu(LLMenuGL* menu); |
237 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
238 | #ifdef RLV_DEBUG_TESTS | ||
239 | #include "rlvtest.h" | ||
240 | #endif // RLV_DEBUG_TESTS | ||
241 | #include "rlvfloaterbehaviour.h" | ||
242 | void init_debug_rlva_menu(LLMenuGL* menu); | ||
243 | // [/RLVa:KB] | ||
232 | 244 | ||
233 | BOOL enable_land_build(void*); | 245 | BOOL enable_land_build(void*); |
234 | BOOL enable_object_build(void*); | 246 | BOOL enable_object_build(void*); |
@@ -490,6 +502,7 @@ BOOL enable_detach(void*); | |||
490 | BOOL enable_region_owner(void*); | 502 | BOOL enable_region_owner(void*); |
491 | void menu_toggle_attached_lights(void* user_data); | 503 | void menu_toggle_attached_lights(void* user_data); |
492 | void menu_toggle_attached_particles(void* user_data); | 504 | void menu_toggle_attached_particles(void* user_data); |
505 | static void handle_go_to_callback(S32 option, void *userdata); | ||
493 | 506 | ||
494 | class LLMenuParcelObserver : public LLParcelObserver | 507 | class LLMenuParcelObserver : public LLParcelObserver |
495 | { | 508 | { |
@@ -572,6 +585,11 @@ void set_underclothes_menu_options() | |||
572 | 585 | ||
573 | void init_menus() | 586 | void init_menus() |
574 | { | 587 | { |
588 | if (gMenuHolder) | ||
589 | { | ||
590 | cleanup_menus(); | ||
591 | } | ||
592 | |||
575 | S32 top = gViewerWindow->getRootView()->getRect().getHeight(); | 593 | S32 top = gViewerWindow->getRootView()->getRect().getHeight(); |
576 | S32 width = gViewerWindow->getRootView()->getRect().getWidth(); | 594 | S32 width = gViewerWindow->getRootView()->getRect().getWidth(); |
577 | 595 | ||
@@ -758,6 +776,7 @@ void init_client_menu(LLMenuGL* menu) | |||
758 | 776 | ||
759 | sub->appendSeparator(); | 777 | sub->appendSeparator(); |
760 | 778 | ||
779 | // For Imprudence 1.3 - need to XUIfy | ||
761 | // Debugging view for unified notifications | 780 | // Debugging view for unified notifications |
762 | sub->append(new LLMenuItemCallGL("Notifications Console...", | 781 | sub->append(new LLMenuItemCallGL("Notifications Console...", |
763 | &handle_show_notifications_console, NULL, NULL, '5', MASK_CONTROL|MASK_SHIFT )); | 782 | &handle_show_notifications_console, NULL, NULL, '5', MASK_CONTROL|MASK_SHIFT )); |
@@ -842,6 +861,19 @@ void init_client_menu(LLMenuGL* menu) | |||
842 | init_debug_world_menu(sub_menu); | 861 | init_debug_world_menu(sub_menu); |
843 | menu->appendMenu(sub_menu); | 862 | menu->appendMenu(sub_menu); |
844 | 863 | ||
864 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.1b | ||
865 | #ifdef RLV_ADVANCED_MENU | ||
866 | if (rlv_handler_t::isEnabled()) | ||
867 | { | ||
868 | sub_menu = new LLMenuGL("RLVa"); | ||
869 | init_debug_rlva_menu(sub_menu); | ||
870 | menu->appendMenu(sub_menu); | ||
871 | sub_menu->setVisible(rlv_handler_t::isEnabled()); | ||
872 | sub_menu->setEnabled(rlv_handler_t::isEnabled()); | ||
873 | } | ||
874 | #endif // RLV_ADVANCED_MENU | ||
875 | // [/RLVa:KB] | ||
876 | |||
845 | sub_menu = new LLMenuGL("UI"); | 877 | sub_menu = new LLMenuGL("UI"); |
846 | init_debug_ui_menu(sub_menu); | 878 | init_debug_ui_menu(sub_menu); |
847 | menu->appendMenu(sub_menu); | 879 | menu->appendMenu(sub_menu); |
@@ -936,6 +968,13 @@ void init_client_menu(LLMenuGL* menu) | |||
936 | &menu_check_control, | 968 | &menu_check_control, |
937 | (void*)"ShowConsoleWindow")); | 969 | (void*)"ShowConsoleWindow")); |
938 | 970 | ||
971 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-1.0.0e | ||
972 | #ifdef RLV_ADVANCED_TOGGLE_RLVA | ||
973 | if (gSavedSettings.controlExists(RLV_SETTING_MAIN)) | ||
974 | menu->append(new LLMenuItemCheckGL("Restrained Life API", &rlvToggleEnabled, NULL, &rlvGetEnabled, NULL)); | ||
975 | #endif // RLV_ADVANCED_TOGGLE_RLVA | ||
976 | // [/RLVa:KB] | ||
977 | |||
939 | if(gSavedSettings.getBOOL("QAMode")) | 978 | if(gSavedSettings.getBOOL("QAMode")) |
940 | { | 979 | { |
941 | LLMenuGL* sub = NULL; | 980 | LLMenuGL* sub = NULL; |
@@ -1023,12 +1062,15 @@ extern BOOL gDebugSelectMgr; | |||
1023 | 1062 | ||
1024 | void init_debug_ui_menu(LLMenuGL* menu) | 1063 | void init_debug_ui_menu(LLMenuGL* menu) |
1025 | { | 1064 | { |
1026 | menu->append(new LLMenuItemCheckGL("Rotate Mini-Map", menu_toggle_control, NULL, menu_check_control, (void*)"MiniMapRotate")); | 1065 | // For Imprudence 1.3 - need to XUIfy |
1027 | menu->append(new LLMenuItemCheckGL("Use default system color picker", menu_toggle_control, NULL, menu_check_control, (void*)"UseDefaultColorPicker")); | 1066 | menu->append(new LLMenuItemCheckGL("Use default system color picker", menu_toggle_control, NULL, menu_check_control, (void*)"UseDefaultColorPicker")); |
1067 | // For Imprudence 1.3 - need to XUIfy | ||
1028 | menu->append(new LLMenuItemCheckGL("Show search panel in overlay bar", menu_toggle_control, NULL, menu_check_control, (void*)"ShowSearchBar")); | 1068 | menu->append(new LLMenuItemCheckGL("Show search panel in overlay bar", menu_toggle_control, NULL, menu_check_control, (void*)"ShowSearchBar")); |
1029 | menu->appendSeparator(); | 1069 | menu->appendSeparator(); |
1030 | 1070 | ||
1071 | // For Imprudence 1.3 - need to XUIfy | ||
1031 | menu->append(new LLMenuItemCallGL("Web Browser Test", &handle_web_browser_test)); | 1072 | menu->append(new LLMenuItemCallGL("Web Browser Test", &handle_web_browser_test)); |
1073 | // For Imprudence 1.3 - need to XUIfy | ||
1032 | // commented out until work is complete: DEV-32268 | 1074 | // commented out until work is complete: DEV-32268 |
1033 | // menu->append(new LLMenuItemCallGL("Buy Currency Test", &handle_buy_currency_test)); | 1075 | // menu->append(new LLMenuItemCallGL("Buy Currency Test", &handle_buy_currency_test)); |
1034 | menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); | 1076 | menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); |
@@ -1054,6 +1096,7 @@ void init_debug_ui_menu(LLMenuGL* menu) | |||
1054 | menu->appendSeparator(); | 1096 | menu->appendSeparator(); |
1055 | menu->append(new LLMenuItemCheckGL("Show Time", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowTime")); | 1097 | menu->append(new LLMenuItemCheckGL("Show Time", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowTime")); |
1056 | menu->append(new LLMenuItemCheckGL("Show Render Info", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderInfo")); | 1098 | menu->append(new LLMenuItemCheckGL("Show Render Info", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderInfo")); |
1099 | // For Imprudence 1.3 - need to XUIfy | ||
1057 | menu->append(new LLMenuItemCheckGL("Show Matrices", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderMatrices")); | 1100 | menu->append(new LLMenuItemCheckGL("Show Matrices", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderMatrices")); |
1058 | menu->append(new LLMenuItemCheckGL("Show Color Under Cursor", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowColor")); | 1101 | menu->append(new LLMenuItemCheckGL("Show Color Under Cursor", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowColor")); |
1059 | 1102 | ||
@@ -1063,6 +1106,7 @@ void init_debug_ui_menu(LLMenuGL* menu) | |||
1063 | void init_debug_xui_menu(LLMenuGL* menu) | 1106 | void init_debug_xui_menu(LLMenuGL* menu) |
1064 | { | 1107 | { |
1065 | menu->append(new LLMenuItemCallGL("Floater Test...", LLFloaterTest::show)); | 1108 | menu->append(new LLMenuItemCallGL("Floater Test...", LLFloaterTest::show)); |
1109 | // For Imprudence 1.3 - need to XUIfy | ||
1066 | menu->append(new LLMenuItemCallGL("Font Test...", LLFloaterFontTest::show)); | 1110 | menu->append(new LLMenuItemCallGL("Font Test...", LLFloaterFontTest::show)); |
1067 | menu->append(new LLMenuItemCallGL("Export Menus to XML...", handle_export_menus_to_xml)); | 1111 | menu->append(new LLMenuItemCallGL("Export Menus to XML...", handle_export_menus_to_xml)); |
1068 | menu->append(new LLMenuItemCallGL("Edit UI...", LLFloaterEditUI::show)); | 1112 | menu->append(new LLMenuItemCallGL("Edit UI...", LLFloaterEditUI::show)); |
@@ -1193,6 +1237,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) | |||
1193 | sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, | 1237 | sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, |
1194 | &LLPipeline::toggleRenderDebugControl, | 1238 | &LLPipeline::toggleRenderDebugControl, |
1195 | (void*)LLPipeline::RENDER_DEBUG_OCTREE)); | 1239 | (void*)LLPipeline::RENDER_DEBUG_OCTREE)); |
1240 | // For Imprudence 1.3 - need to XUIfy | ||
1196 | sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL, | 1241 | sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL, |
1197 | &LLPipeline::toggleRenderDebugControl, | 1242 | &LLPipeline::toggleRenderDebugControl, |
1198 | (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)); | 1243 | (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)); |
@@ -1365,14 +1410,17 @@ void init_debug_avatar_menu(LLMenuGL* menu) | |||
1365 | //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); | 1410 | //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); |
1366 | //diabling collision plane due to DEV-14477 -brad | 1411 | //diabling collision plane due to DEV-14477 -brad |
1367 | //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); | 1412 | //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); |
1413 | // For Imprudence 1.3 - need to XUIfy | ||
1368 | menu->append(new LLMenuItemCheckGL("Show Collision Skeleton", | 1414 | menu->append(new LLMenuItemCheckGL("Show Collision Skeleton", |
1369 | &LLPipeline::toggleRenderDebug, NULL, | 1415 | &LLPipeline::toggleRenderDebug, NULL, |
1370 | &LLPipeline::toggleRenderDebugControl, | 1416 | &LLPipeline::toggleRenderDebugControl, |
1371 | (void*)LLPipeline::RENDER_DEBUG_AVATAR_VOLUME)); | 1417 | (void*)LLPipeline::RENDER_DEBUG_AVATAR_VOLUME)); |
1418 | // For Imprudence 1.3 - need to XUIfy | ||
1372 | menu->append(new LLMenuItemCheckGL("Display Agent Target", | 1419 | menu->append(new LLMenuItemCheckGL("Display Agent Target", |
1373 | &LLPipeline::toggleRenderDebug, NULL, | 1420 | &LLPipeline::toggleRenderDebug, NULL, |
1374 | &LLPipeline::toggleRenderDebugControl, | 1421 | &LLPipeline::toggleRenderDebugControl, |
1375 | (void*)LLPipeline::RENDER_DEBUG_AGENT_TARGET)); | 1422 | (void*)LLPipeline::RENDER_DEBUG_AGENT_TARGET)); |
1423 | // For Imprudence 1.3 - need to XUIfy | ||
1376 | menu->append(new LLMenuItemToggleGL( "Debug Rotation", &LLVOAvatar::sDebugAvatarRotation)); | 1424 | menu->append(new LLMenuItemToggleGL( "Debug Rotation", &LLVOAvatar::sDebugAvatarRotation)); |
1377 | menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); | 1425 | menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); |
1378 | menu->append(new LLMenuItemCallGL("Refresh Appearance", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); | 1426 | menu->append(new LLMenuItemCallGL("Refresh Appearance", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); |
@@ -1390,10 +1438,58 @@ void init_debug_baked_texture_menu(LLMenuGL* menu) | |||
1390 | menu->append(new LLMenuItemCallGL("Upper Body", handle_grab_texture, enable_grab_texture, (void*) TEX_UPPER_BAKED)); | 1438 | menu->append(new LLMenuItemCallGL("Upper Body", handle_grab_texture, enable_grab_texture, (void*) TEX_UPPER_BAKED)); |
1391 | menu->append(new LLMenuItemCallGL("Lower Body", handle_grab_texture, enable_grab_texture, (void*) TEX_LOWER_BAKED)); | 1439 | menu->append(new LLMenuItemCallGL("Lower Body", handle_grab_texture, enable_grab_texture, (void*) TEX_LOWER_BAKED)); |
1392 | menu->append(new LLMenuItemCallGL("Skirt", handle_grab_texture, enable_grab_texture, (void*) TEX_SKIRT_BAKED)); | 1440 | menu->append(new LLMenuItemCallGL("Skirt", handle_grab_texture, enable_grab_texture, (void*) TEX_SKIRT_BAKED)); |
1441 | // For Imprudence 1.3 - need to XUIfy | ||
1393 | menu->append(new LLMenuItemCallGL("Hair", handle_grab_texture, enable_grab_texture, (void*) TEX_HAIR_BAKED)); | 1442 | menu->append(new LLMenuItemCallGL("Hair", handle_grab_texture, enable_grab_texture, (void*) TEX_HAIR_BAKED)); |
1394 | menu->createJumpKeys(); | 1443 | menu->createJumpKeys(); |
1395 | } | 1444 | } |
1396 | 1445 | ||
1446 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-1.0.0g | ||
1447 | void init_debug_rlva_menu(LLMenuGL* menu) | ||
1448 | { | ||
1449 | // Debug options | ||
1450 | { | ||
1451 | LLMenuGL* pDbgMenu = new LLMenuGL("Debug"); | ||
1452 | |||
1453 | if (gSavedSettings.controlExists(RLV_SETTING_DEBUG)) | ||
1454 | pDbgMenu->append(new LLMenuItemCheckGL("Show Debug Messages", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_DEBUG)); | ||
1455 | pDbgMenu->appendSeparator(); | ||
1456 | if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING)) | ||
1457 | pDbgMenu->append(new LLMenuItemCheckGL("Enable Legacy Naming", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_ENABLELEGACYNAMING)); | ||
1458 | |||
1459 | menu->appendMenu(pDbgMenu); | ||
1460 | menu->appendSeparator(); | ||
1461 | } | ||
1462 | |||
1463 | #ifdef RLV_EXTENSION_ENABLE_WEAR | ||
1464 | if (gSavedSettings.controlExists(RLV_SETTING_ENABLEWEAR)) | ||
1465 | menu->append(new LLMenuItemCheckGL("Enable Wear", menu_toggle_control, rlvEnableWearEnabler, menu_check_control, (void*)RLV_SETTING_ENABLEWEAR)); | ||
1466 | menu->appendSeparator(); | ||
1467 | #endif // RLV_EXTENSION_ENABLE_WEAR | ||
1468 | |||
1469 | #ifdef RLV_EXTENSION_HIDELOCKED | ||
1470 | if ( (gSavedSettings.controlExists(RLV_SETTING_HIDELOCKEDLAYER)) && | ||
1471 | (gSavedSettings.controlExists(RLV_SETTING_HIDELOCKEDATTACH)) ) | ||
1472 | { | ||
1473 | menu->append(new LLMenuItemCheckGL("Hide locked layers", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_HIDELOCKEDLAYER)); | ||
1474 | menu->append(new LLMenuItemCheckGL("Hide locked attachments", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_HIDELOCKEDATTACH)); | ||
1475 | //sub_menu->append(new LLMenuItemToggleGL("Hide locked inventory", &rlv_handler_t::fHideLockedInventory)); | ||
1476 | menu->appendSeparator(); | ||
1477 | } | ||
1478 | #endif // RLV_EXTENSION_HIDELOCKED | ||
1479 | |||
1480 | if (gSavedSettings.controlExists(RLV_SETTING_FORBIDGIVETORLV)) | ||
1481 | menu->append(new LLMenuItemCheckGL("Forbid Give to #RLV", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_FORBIDGIVETORLV)); | ||
1482 | if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING)) | ||
1483 | menu->append(new LLMenuItemCheckGL("Show Name Tags", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_SHOWNAMETAGS)); | ||
1484 | menu->appendSeparator(); | ||
1485 | |||
1486 | #ifdef RLV_EXTENSION_FLOATER_RESTRICTIONS | ||
1487 | // TODO-RLVa: figure out a way to tell if floater_rlv_behaviour.xml exists | ||
1488 | menu->append(new LLMenuItemCallGL("Restrictions...", RlvFloaterBehaviour::show, NULL, NULL)); | ||
1489 | #endif // RLV_EXTENSION_FLOATER_RESTRICTIONS | ||
1490 | } | ||
1491 | // [/RLVa:KB] | ||
1492 | |||
1397 | void init_server_menu(LLMenuGL* menu) | 1493 | void init_server_menu(LLMenuGL* menu) |
1398 | { | 1494 | { |
1399 | { | 1495 | { |
@@ -1546,6 +1642,16 @@ class LLObjectTouch : public view_listener_t | |||
1546 | 1642 | ||
1547 | LLPickInfo pick = LLToolPie::getInstance()->getPick(); | 1643 | LLPickInfo pick = LLToolPie::getInstance()->getPick(); |
1548 | 1644 | ||
1645 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f | ||
1646 | // TODO-RLVa: this code is rather redundant since we'll never get an active selection to show a pie menu for | ||
1647 | // [msg->addVector3("Position", pick.mIntersection) <- see llDetectedTouchPos()] | ||
1648 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && ((!object->isAttachment()) || (!object->permYouOwner())) && | ||
1649 | (dist_vec_squared(gAgent.getPositionAgent(), pick.mIntersection) > 1.5f * 1.5f) ) | ||
1650 | { | ||
1651 | return true; // Can't touch in-world objects (or other avie's attachments) farther than 1.5m away under @fartouch=n | ||
1652 | } | ||
1653 | // [/RLVa:KB] | ||
1654 | |||
1549 | LLMessageSystem *msg = gMessageSystem; | 1655 | LLMessageSystem *msg = gMessageSystem; |
1550 | 1656 | ||
1551 | msg->newMessageFast(_PREHASH_ObjectGrab); | 1657 | msg->newMessageFast(_PREHASH_ObjectGrab); |
@@ -1594,6 +1700,14 @@ class LLObjectEnableTouch : public view_listener_t | |||
1594 | { | 1700 | { |
1595 | LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); | 1701 | LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); |
1596 | bool new_value = obj && obj->flagHandleTouch(); | 1702 | bool new_value = obj && obj->flagHandleTouch(); |
1703 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0f | ||
1704 | // TODO-RLVa: this code is rather redundant since we'll never get an active selection to show a pie menu for | ||
1705 | if ( (new_value) && (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && ((!obj->isAttachment()) || (!obj->permYouOwner())) && | ||
1706 | (dist_vec_squared(gAgent.getPositionAgent(), LLToolPie::getInstance()->getPick().mIntersection) > 1.5f * 1.5f) ) | ||
1707 | { | ||
1708 | new_value = false; // Can't touch in-world objects (or other avie's attachments) farther than 1.5m away under @fartouch=n | ||
1709 | } | ||
1710 | // [/RLVa:KB] | ||
1597 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 1711 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
1598 | 1712 | ||
1599 | // Update label based on the node touch name if available. | 1713 | // Update label based on the node touch name if available. |
@@ -1667,6 +1781,14 @@ class LLObjectOpen : public view_listener_t | |||
1667 | { | 1781 | { |
1668 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 1782 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
1669 | { | 1783 | { |
1784 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
1785 | // TODO-RLVa: shouldn't we be checking for fartouch here as well? | ||
1786 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
1787 | { | ||
1788 | return true; | ||
1789 | } | ||
1790 | // [/RLVa:KB] | ||
1791 | |||
1670 | return handle_object_open(); | 1792 | return handle_object_open(); |
1671 | } | 1793 | } |
1672 | }; | 1794 | }; |
@@ -1685,6 +1807,12 @@ class LLObjectEnableOpen : public view_listener_t | |||
1685 | if (!root) new_value = false; | 1807 | if (!root) new_value = false; |
1686 | else new_value = root->allowOpen(); | 1808 | else new_value = root->allowOpen(); |
1687 | } | 1809 | } |
1810 | |||
1811 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | Modified: RLVa-1.0.0b | ||
1812 | // TODO-RLV: shouldn't we be checking for fartouch here as well? (and LLViewerObject::allowOpen() makes this redundant?) | ||
1813 | new_value &= !gRlvHandler.hasBehaviour(RLV_BHVR_EDIT); | ||
1814 | // [/RLVa:KB] | ||
1815 | |||
1688 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 1816 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
1689 | return true; | 1817 | return true; |
1690 | } | 1818 | } |
@@ -1746,7 +1874,13 @@ bool toggle_build_mode() | |||
1746 | } | 1874 | } |
1747 | } | 1875 | } |
1748 | 1876 | ||
1749 | 1877 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | |
1878 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (LLSelectMgr::getInstance()) ) | ||
1879 | { | ||
1880 | LLSelectMgr::getInstance()->deselectAll(); | ||
1881 | } | ||
1882 | // [/RLVa:KB] | ||
1883 | |||
1750 | LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); | 1884 | LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); |
1751 | LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); | 1885 | LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); |
1752 | 1886 | ||
@@ -1846,6 +1980,23 @@ class LLObjectEdit : public view_listener_t | |||
1846 | { | 1980 | { |
1847 | LLViewerParcelMgr::getInstance()->deselectLand(); | 1981 | LLViewerParcelMgr::getInstance()->deselectLand(); |
1848 | 1982 | ||
1983 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f | ||
1984 | if (rlv_handler_t::isEnabled()) | ||
1985 | { | ||
1986 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
1987 | { | ||
1988 | return true; // Can't edit any object under @edit=n | ||
1989 | } | ||
1990 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) && | ||
1991 | (SELECT_TYPE_WORLD == LLSelectMgr::getInstance()->getSelection()->getSelectType()) && | ||
1992 | (dist_vec_squared(gAgent.getPositionAgent(), LLToolPie::getInstance()->getPick().mIntersection) > 1.5f * 1.5f) ) | ||
1993 | { | ||
1994 | // TODO-RLVa: this code is rather redundant since we'll never get an active selection to show a pie menu for | ||
1995 | return true; // Can't edit in-world objects farther than 1.5m away under @fartouch=n | ||
1996 | } | ||
1997 | } | ||
1998 | // [/RLVa:KB] | ||
1999 | |||
1849 | if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit()) | 2000 | if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit()) |
1850 | { | 2001 | { |
1851 | LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); | 2002 | LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); |
@@ -1995,6 +2146,22 @@ class LLEnableEdit : public view_listener_t | |||
1995 | enable = LLViewerParcelMgr::getInstance()->agentCanBuild() | 2146 | enable = LLViewerParcelMgr::getInstance()->agentCanBuild() |
1996 | || LLSelectMgr::getInstance()->getSelection()->isAttachment(); | 2147 | || LLSelectMgr::getInstance()->getSelection()->isAttachment(); |
1997 | } | 2148 | } |
2149 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
2150 | // TODO-RLV: include fartouch here? | ||
2151 | if ( (rlv_handler_t::isEnabled()) && (enable) ) | ||
2152 | { | ||
2153 | // We have no way of knowing whether we're being called for "Create" or for "Edit", but we can | ||
2154 | // make an educated guess based on the currently active selection which puts us halfway there. | ||
2155 | BOOL fActiveSelection = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); | ||
2156 | |||
2157 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) ) | ||
2158 | enable = false; // Edit and rez restricted, disable them both | ||
2159 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (fActiveSelection) ) | ||
2160 | enable = false; // Edit restricted and there's an active selection => disable Edit and Create | ||
2161 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) && (!fActiveSelection) ) | ||
2162 | enable = false; // Rez restricted and there's no active selection => disable Create | ||
2163 | } | ||
2164 | // [/RLVa:KB] | ||
1998 | gMenuHolder->findControl(userdata["control"].asString())->setValue(enable); | 2165 | gMenuHolder->findControl(userdata["control"].asString())->setValue(enable); |
1999 | return true; | 2166 | return true; |
2000 | } | 2167 | } |
@@ -2022,7 +2189,10 @@ class LLSelfEnableRemoveAllAttachments : public view_listener_t | |||
2022 | { | 2189 | { |
2023 | LLVOAvatar::attachment_map_t::iterator curiter = iter++; | 2190 | LLVOAvatar::attachment_map_t::iterator curiter = iter++; |
2024 | LLViewerJointAttachment* attachment = curiter->second; | 2191 | LLViewerJointAttachment* attachment = curiter->second; |
2025 | if (attachment->getObject()) | 2192 | // if (attachment->getObject()) |
2193 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0c | ||
2194 | if ( (attachment->getObject()) && ( (!rlv_handler_t::isEnabled()) || (gRlvHandler.isDetachable(curiter->first)) ) ) | ||
2195 | // [/RLVa:KB] | ||
2026 | { | 2196 | { |
2027 | new_value = true; | 2197 | new_value = true; |
2028 | break; | 2198 | break; |
@@ -2069,6 +2239,9 @@ class LLObjectEnableMute : public view_listener_t | |||
2069 | BOOL is_linden = lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden"); | 2239 | BOOL is_linden = lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden"); |
2070 | BOOL is_self = avatar->isSelf(); | 2240 | BOOL is_self = avatar->isSelf(); |
2071 | new_value = !is_linden && !is_self; | 2241 | new_value = !is_linden && !is_self; |
2242 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2243 | new_value &= (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
2244 | // [/RLVa:KB] | ||
2072 | } | 2245 | } |
2073 | } | 2246 | } |
2074 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 2247 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
@@ -2089,6 +2262,12 @@ class LLObjectMute : public view_listener_t | |||
2089 | LLVOAvatar* avatar = find_avatar_from_object(object); | 2262 | LLVOAvatar* avatar = find_avatar_from_object(object); |
2090 | if (avatar) | 2263 | if (avatar) |
2091 | { | 2264 | { |
2265 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e | ||
2266 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
2267 | { | ||
2268 | return true; // Fallback code [see LLObjectEnableMute::handleEvent()] | ||
2269 | } | ||
2270 | // [/RLVa:KB] | ||
2092 | id = avatar->getID(); | 2271 | id = avatar->getID(); |
2093 | 2272 | ||
2094 | LLNameValue *firstname = avatar->getNVPair("FirstName"); | 2273 | LLNameValue *firstname = avatar->getNVPair("FirstName"); |
@@ -2137,37 +2316,186 @@ class LLObjectMute : public view_listener_t | |||
2137 | } | 2316 | } |
2138 | }; | 2317 | }; |
2139 | 2318 | ||
2140 | bool handle_go_to() | 2319 | class LLObjectEnableCopyUUID : public view_listener_t |
2141 | { | 2320 | { |
2142 | // JAMESDEBUG try simulator autopilot | 2321 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2143 | std::vector<std::string> strings; | 2322 | { |
2144 | std::string val; | 2323 | LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); |
2145 | LLVector3d pos = LLToolPie::getInstance()->getPick().mPosGlobal; | 2324 | bool new_value = (object != NULL); |
2146 | val = llformat("%g", pos.mdV[VX]); | 2325 | |
2147 | strings.push_back(val); | 2326 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
2148 | val = llformat("%g", pos.mdV[VY]); | 2327 | return true; |
2149 | strings.push_back(val); | 2328 | } |
2150 | val = llformat("%g", pos.mdV[VZ]); | 2329 | }; |
2151 | strings.push_back(val); | 2330 | |
2152 | send_generic_message("autopilot", strings); | 2331 | class LLObjectCopyUUID : public view_listener_t |
2332 | { | ||
2333 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2334 | { | ||
2335 | LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); | ||
2336 | if (!object) return true; | ||
2337 | |||
2338 | LLUUID id = object->getID(); | ||
2153 | 2339 | ||
2154 | LLViewerParcelMgr::getInstance()->deselectLand(); | 2340 | char buffer[UUID_STR_LENGTH]; |
2341 | id.toString(buffer); | ||
2155 | 2342 | ||
2156 | if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) | 2343 | |
2344 | gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer)); | ||
2345 | |||
2346 | LLSelectMgr::getInstance()->deselectAll(); | ||
2347 | return true; | ||
2348 | } | ||
2349 | }; | ||
2350 | |||
2351 | |||
2352 | class LLObjectEnableExport : public view_listener_t | ||
2353 | { | ||
2354 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2157 | { | 2355 | { |
2158 | gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID()); | 2356 | LLControlVariable* control = |
2357 | gMenuHolder->findControl(userdata["control"].asString()); | ||
2358 | |||
2359 | LLViewerObject* object = | ||
2360 | LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); | ||
2361 | |||
2362 | if((object != NULL) && | ||
2363 | (find_avatar_from_object(object) == NULL)) | ||
2364 | { | ||
2365 | struct ff : public LLSelectedNodeFunctor | ||
2366 | { | ||
2367 | virtual bool apply(LLSelectNode* node) | ||
2368 | { | ||
2369 | return primbackup::check_perms( node ); | ||
2370 | } | ||
2371 | } func; | ||
2372 | |||
2373 | if(LLSelectMgr::getInstance()->getSelection()->applyToNodes(&func,false)) | ||
2374 | { | ||
2375 | control->setValue(true); | ||
2376 | return true; | ||
2377 | } | ||
2378 | } | ||
2379 | |||
2380 | control->setValue(false); | ||
2381 | return true; | ||
2159 | } | 2382 | } |
2160 | else | 2383 | }; |
2384 | |||
2385 | class LLObjectExport : public view_listener_t | ||
2386 | { | ||
2387 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2161 | { | 2388 | { |
2162 | // Snap camera back to behind avatar | 2389 | LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); |
2163 | gAgent.setFocusOnAvatar(TRUE, ANIMATE); | 2390 | if (!object) return true; |
2391 | |||
2392 | LLVOAvatar* avatar = find_avatar_from_object(object); | ||
2393 | |||
2394 | if (!avatar) | ||
2395 | { | ||
2396 | primbackup::getInstance()->pre_export_object(); | ||
2397 | } | ||
2398 | |||
2399 | return true; | ||
2164 | } | 2400 | } |
2401 | }; | ||
2165 | 2402 | ||
2166 | // Could be first use | 2403 | |
2167 | LLFirstUse::useGoTo(); | 2404 | class LLObjectEnableImport : public view_listener_t |
2405 | { | ||
2406 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2407 | { | ||
2408 | gMenuHolder->findControl(userdata["control"].asString())->setValue(TRUE); | ||
2409 | return true; | ||
2410 | } | ||
2411 | }; | ||
2412 | |||
2413 | class LLObjectImport : public view_listener_t | ||
2414 | { | ||
2415 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2416 | { | ||
2417 | primbackup::getInstance()->import_object(FALSE); | ||
2418 | return true; | ||
2419 | } | ||
2420 | }; | ||
2421 | |||
2422 | class LLObjectImportUpload : public view_listener_t | ||
2423 | { | ||
2424 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
2425 | { | ||
2426 | primbackup::getInstance()->import_object(TRUE); | ||
2427 | return true; | ||
2428 | } | ||
2429 | }; | ||
2430 | |||
2431 | bool handle_go_to() | ||
2432 | { | ||
2433 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2434 | if ( (rlv_handler_t::isEnabled()) && gAgent.forwardGrabbed() && (gRlvHandler.hasLockedAttachment()) ) | ||
2435 | { | ||
2436 | return true; | ||
2437 | } | ||
2438 | // [/RLVa:KB] | ||
2439 | |||
2440 | if (gSavedSettings.getBOOL("DoubleClickTeleport")) | ||
2441 | { | ||
2442 | gViewerWindow->alertXml("ConfirmDoubleClickTP", handle_go_to_callback, (void*)LLToolPie::getInstance()); | ||
2443 | } | ||
2444 | else if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) | ||
2445 | { | ||
2446 | gViewerWindow->alertXml("ConfirmAutoPilot", handle_go_to_callback, (void*)LLToolPie::getInstance()); | ||
2447 | } | ||
2168 | return true; | 2448 | return true; |
2169 | } | 2449 | } |
2170 | 2450 | ||
2451 | //static | ||
2452 | void handle_go_to_callback(S32 option, void *userdata) | ||
2453 | { | ||
2454 | if (option == 0) | ||
2455 | { | ||
2456 | LLToolPie* pie = (LLToolPie*)userdata; | ||
2457 | |||
2458 | // JAMESDEBUG try simulator autopilot | ||
2459 | std::vector<std::string> strings; | ||
2460 | std::string val; | ||
2461 | LLVector3d pos = pie->getPick().mPosGlobal; | ||
2462 | if (gSavedSettings.getBOOL("DoubleClickTeleport")) | ||
2463 | { | ||
2464 | LLVector3d hips_offset(0.0f, 0.0f, 1.2f); | ||
2465 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | ||
2466 | gAgent.teleportViaLocation(pos + hips_offset); | ||
2467 | } | ||
2468 | else | ||
2469 | { | ||
2470 | // JAMESDEBUG try simulator autopilot | ||
2471 | std::vector<std::string> strings; | ||
2472 | std::string val; | ||
2473 | val = llformat("%g", pos.mdV[VX]); | ||
2474 | strings.push_back(val); | ||
2475 | val = llformat("%g", pos.mdV[VY]); | ||
2476 | strings.push_back(val); | ||
2477 | val = llformat("%g", pos.mdV[VZ]); | ||
2478 | strings.push_back(val); | ||
2479 | send_generic_message("autopilot", strings); | ||
2480 | |||
2481 | LLViewerParcelMgr::getInstance()->deselectLand(); | ||
2482 | |||
2483 | if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) | ||
2484 | { | ||
2485 | gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID()); | ||
2486 | } | ||
2487 | else | ||
2488 | { | ||
2489 | // Snap camera back to behind avatar | ||
2490 | gAgent.setFocusOnAvatar(TRUE, ANIMATE); | ||
2491 | } | ||
2492 | |||
2493 | // Could be first use | ||
2494 | LLFirstUse::useGoTo(); | ||
2495 | } | ||
2496 | } | ||
2497 | } | ||
2498 | |||
2171 | class LLGoToObject : public view_listener_t | 2499 | class LLGoToObject : public view_listener_t |
2172 | { | 2500 | { |
2173 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 2501 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -2222,6 +2550,12 @@ class LLAvatarFreeze : public view_listener_t | |||
2222 | std::string fullname = avatar->getFullname(); | 2550 | std::string fullname = avatar->getFullname(); |
2223 | LLSD payload; | 2551 | LLSD payload; |
2224 | payload["avatar_id"] = avatar->getID(); | 2552 | payload["avatar_id"] = avatar->getID(); |
2553 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2554 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (!fullname.empty()) ) | ||
2555 | { | ||
2556 | fullname = gRlvHandler.getAnonym(fullname); | ||
2557 | } | ||
2558 | // [/RLVa:KB] | ||
2225 | 2559 | ||
2226 | if (!fullname.empty()) | 2560 | if (!fullname.empty()) |
2227 | { | 2561 | { |
@@ -2248,7 +2582,11 @@ class LLAvatarVisibleDebug : public view_listener_t | |||
2248 | { | 2582 | { |
2249 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 2583 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2250 | { | 2584 | { |
2251 | bool new_value = gAgent.isGodlike(); | 2585 | //bool new_value = gAgent.isGodlike(); |
2586 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2587 | // TODO-RLVa: can you actually use this to cheat anything? | ||
2588 | bool new_value = gAgent.isGodlike() && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
2589 | // [/RLVa:KB] | ||
2252 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 2590 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
2253 | return true; | 2591 | return true; |
2254 | } | 2592 | } |
@@ -2347,6 +2685,12 @@ class LLAvatarEject : public view_listener_t | |||
2347 | LLSD payload; | 2685 | LLSD payload; |
2348 | payload["avatar_id"] = avatar->getID(); | 2686 | payload["avatar_id"] = avatar->getID(); |
2349 | std::string fullname = avatar->getFullname(); | 2687 | std::string fullname = avatar->getFullname(); |
2688 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2689 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (!fullname.empty()) ) | ||
2690 | { | ||
2691 | fullname = gRlvHandler.getAnonym(fullname); | ||
2692 | } | ||
2693 | // [/RLVa:KB] | ||
2350 | 2694 | ||
2351 | const LLVector3d& pos = avatar->getPositionGlobal(); | 2695 | const LLVector3d& pos = avatar->getPositionGlobal(); |
2352 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel(); | 2696 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel(); |
@@ -2430,6 +2774,13 @@ class LLAvatarGiveCard : public view_listener_t | |||
2430 | { | 2774 | { |
2431 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 2775 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2432 | { | 2776 | { |
2777 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2778 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
2779 | { | ||
2780 | return true; | ||
2781 | } | ||
2782 | // [/RLVa:KB] | ||
2783 | |||
2433 | llinfos << "handle_give_card()" << llendl; | 2784 | llinfos << "handle_give_card()" << llendl; |
2434 | LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); | 2785 | LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); |
2435 | if(dest && dest->isAvatar()) | 2786 | if(dest && dest->isAvatar()) |
@@ -2689,6 +3040,13 @@ class LLSelfStandUp : public view_listener_t | |||
2689 | { | 3040 | { |
2690 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 3041 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2691 | { | 3042 | { |
3043 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
3044 | if (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) | ||
3045 | { | ||
3046 | return true; | ||
3047 | } | ||
3048 | // [/RLVa:KB] | ||
3049 | |||
2692 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | 3050 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); |
2693 | return true; | 3051 | return true; |
2694 | } | 3052 | } |
@@ -2698,7 +3056,10 @@ class LLSelfEnableStandUp : public view_listener_t | |||
2698 | { | 3056 | { |
2699 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 3057 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2700 | { | 3058 | { |
2701 | bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->mIsSitting; | 3059 | // bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->mIsSitting; |
3060 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
3061 | bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->mIsSitting && !gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT); | ||
3062 | // [/RLVa:KB] | ||
2702 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 3063 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
2703 | return true; | 3064 | return true; |
2704 | } | 3065 | } |
@@ -2873,6 +3234,11 @@ class LLAvatarEnableAddFriend : public view_listener_t | |||
2873 | { | 3234 | { |
2874 | LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); | 3235 | LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); |
2875 | bool new_value = avatar && !is_agent_friend(avatar->getID()); | 3236 | bool new_value = avatar && !is_agent_friend(avatar->getID()); |
3237 | |||
3238 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
3239 | new_value &= (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
3240 | // [/RLVa:KB] | ||
3241 | |||
2876 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 3242 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
2877 | return true; | 3243 | return true; |
2878 | } | 3244 | } |
@@ -2929,6 +3295,15 @@ bool handle_sit_or_stand() | |||
2929 | return true; | 3295 | return true; |
2930 | } | 3296 | } |
2931 | 3297 | ||
3298 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
3299 | if ( (rlv_handler_t::isEnabled()) && | ||
3300 | ( ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) && (gAgent.getAvatarObject()->mIsSitting)) || | ||
3301 | (gRlvHandler.hasBehaviour(RLV_BHVR_SIT)) ) ) | ||
3302 | { | ||
3303 | return true; | ||
3304 | } | ||
3305 | // [/RLVa:KB] | ||
3306 | |||
2932 | if (sitting_on_selection()) | 3307 | if (sitting_on_selection()) |
2933 | { | 3308 | { |
2934 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | 3309 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); |
@@ -2939,6 +3314,15 @@ bool handle_sit_or_stand() | |||
2939 | 3314 | ||
2940 | if (object && object->getPCode() == LL_PCODE_VOLUME) | 3315 | if (object && object->getPCode() == LL_PCODE_VOLUME) |
2941 | { | 3316 | { |
3317 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0g | ||
3318 | if ( (rlv_handler_t::isEnabled()) && | ||
3319 | ((gRlvHandler.hasBehaviour(RLV_BHVR_SITTP)) || (gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH))) && | ||
3320 | (dist_vec_squared(gAgent.getPositionGlobal(), object->getPositionGlobal() + LLVector3d(pick.mObjectOffset)) > 1.5f * 1.5f) ) | ||
3321 | { | ||
3322 | return true; // Don't allow sitting farther away than 1.5m under @sittp=n or @fartouch=n | ||
3323 | } | ||
3324 | // [/RLVa:KB] | ||
3325 | |||
2942 | gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); | 3326 | gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); |
2943 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | 3327 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); |
2944 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | 3328 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); |
@@ -2976,6 +3360,13 @@ class LLLandSit : public view_listener_t | |||
2976 | { | 3360 | { |
2977 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 3361 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2978 | { | 3362 | { |
3363 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
3364 | if (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) | ||
3365 | { | ||
3366 | return true; | ||
3367 | } | ||
3368 | // [/RLVa:KB] | ||
3369 | |||
2979 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | 3370 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); |
2980 | LLViewerParcelMgr::getInstance()->deselectLand(); | 3371 | LLViewerParcelMgr::getInstance()->deselectLand(); |
2981 | 3372 | ||
@@ -3206,6 +3597,14 @@ class LLEditDuplicate : public view_listener_t | |||
3206 | { | 3597 | { |
3207 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 3598 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
3208 | { | 3599 | { |
3600 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
3601 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) && | ||
3602 | (LLEditMenuHandler::gEditMenuHandler == LLSelectMgr::getInstance()) ) | ||
3603 | { | ||
3604 | return true; | ||
3605 | } | ||
3606 | // [/RLVa:KB] | ||
3607 | |||
3209 | if(LLEditMenuHandler::gEditMenuHandler) | 3608 | if(LLEditMenuHandler::gEditMenuHandler) |
3210 | { | 3609 | { |
3211 | LLEditMenuHandler::gEditMenuHandler->duplicate(); | 3610 | LLEditMenuHandler::gEditMenuHandler->duplicate(); |
@@ -3219,6 +3618,13 @@ class LLEditEnableDuplicate : public view_listener_t | |||
3219 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 3618 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
3220 | { | 3619 | { |
3221 | bool new_value = LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDuplicate(); | 3620 | bool new_value = LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDuplicate(); |
3621 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
3622 | if ( (new_value) && (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) && | ||
3623 | (LLEditMenuHandler::gEditMenuHandler == LLSelectMgr::getInstance()) ) | ||
3624 | { | ||
3625 | new_value = false; | ||
3626 | } | ||
3627 | // [/RLVa:KB] | ||
3222 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 3628 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
3223 | return true; | 3629 | return true; |
3224 | } | 3630 | } |
@@ -3604,6 +4010,11 @@ class LLToolsTakeCopy : public view_listener_t | |||
3604 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4010 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
3605 | { | 4011 | { |
3606 | if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true; | 4012 | if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true; |
4013 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | Modified: RLVa-1.0.0b | ||
4014 | // NOTE: we need to handle "Take Copy" because it will force a sim-side unsit if we're sitting on the selection, | ||
4015 | // but we do want to allow "Take Copy" under @rez=n so that's why we explicitly check for @unsit=n here | ||
4016 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (!rlvCanDeleteOrReturn()) ) return true; | ||
4017 | // [/RLVa:KB] | ||
3607 | 4018 | ||
3608 | const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); | 4019 | const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); |
3609 | derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id); | 4020 | derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id); |
@@ -3619,6 +4030,9 @@ class LLObjectReturn : public view_listener_t | |||
3619 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4030 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
3620 | { | 4031 | { |
3621 | if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true; | 4032 | if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true; |
4033 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4034 | if ( (rlv_handler_t::isEnabled()) && (!rlvCanDeleteOrReturn()) ) return true; | ||
4035 | // [/RLVa:KB] | ||
3622 | 4036 | ||
3623 | mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); | 4037 | mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); |
3624 | 4038 | ||
@@ -3686,6 +4100,14 @@ class LLObjectEnableReturn : public view_listener_t | |||
3686 | } | 4100 | } |
3687 | } | 4101 | } |
3688 | #endif | 4102 | #endif |
4103 | |||
4104 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4105 | if ( (new_value) && (rlv_handler_t::isEnabled()) ) | ||
4106 | { | ||
4107 | new_value = rlvCanDeleteOrReturn(); | ||
4108 | } | ||
4109 | // [/RLVa:KB] | ||
4110 | |||
3689 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 4111 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
3690 | return true; | 4112 | return true; |
3691 | } | 4113 | } |
@@ -3707,6 +4129,13 @@ void handle_take() | |||
3707 | return; | 4129 | return; |
3708 | } | 4130 | } |
3709 | 4131 | ||
4132 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4133 | if ( (rlv_handler_t::isEnabled()) && (!rlvCanDeleteOrReturn()) ) | ||
4134 | { | ||
4135 | return; | ||
4136 | } | ||
4137 | // [/RLVa:KB] | ||
4138 | |||
3710 | BOOL you_own_everything = TRUE; | 4139 | BOOL you_own_everything = TRUE; |
3711 | BOOL locked_but_takeable_object = FALSE; | 4140 | BOOL locked_but_takeable_object = FALSE; |
3712 | LLUUID category_id; | 4141 | LLUUID category_id; |
@@ -3826,6 +4255,13 @@ BOOL enable_take() | |||
3826 | return FALSE; | 4255 | return FALSE; |
3827 | } | 4256 | } |
3828 | 4257 | ||
4258 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4259 | if ( (rlv_handler_t::isEnabled()) && (!rlvCanDeleteOrReturn()) ) | ||
4260 | { | ||
4261 | return FALSE; | ||
4262 | } | ||
4263 | // [/RLVa:KB] | ||
4264 | |||
3829 | for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin(); | 4265 | for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin(); |
3830 | iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++) | 4266 | iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++) |
3831 | { | 4267 | { |
@@ -4178,16 +4614,61 @@ class LLToolsEnableUnlink : public view_listener_t | |||
4178 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4614 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4179 | { | 4615 | { |
4180 | bool new_value = false; | 4616 | bool new_value = false; |
4181 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && | 4617 | if (LLToolMgr::getInstance()->getCurrentTool() != LLToolFace::getInstance()) |
4182 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && | ||
4183 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) | ||
4184 | { | 4618 | { |
4185 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | 4619 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && |
4186 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | 4620 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && |
4621 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) | ||
4187 | { | 4622 | { |
4188 | new_value = true; | 4623 | // LL's viewer unlinks the last linkset selected, |
4624 | // regardless of how many linksets or prims are selected total. | ||
4625 | // Preserve that behavior when enabling the unlink option. | ||
4626 | if (gSavedSettings.getBOOL("EditLinkedParts")) | ||
4627 | { | ||
4628 | struct f : public LLSelectedNodeFunctor | ||
4629 | { | ||
4630 | virtual bool apply(LLSelectNode* pNode) | ||
4631 | { | ||
4632 | // Return the first selection node that is | ||
4633 | // 1) not a root prim | ||
4634 | // 2) or a root prim that has child prims | ||
4635 | // or in other words: any prim that is part of a linkset | ||
4636 | return (pNode->getObject() != pNode->getObject()->getRootEdit()) || | ||
4637 | (pNode->getObject()->numChildren() != 0); | ||
4638 | } | ||
4639 | } func; | ||
4640 | |||
4641 | if (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(&func, TRUE)) | ||
4642 | { | ||
4643 | // the selection contains at least one prim (child or root) that is part of a linkset | ||
4644 | new_value = true; | ||
4645 | } | ||
4646 | } | ||
4647 | else | ||
4648 | { | ||
4649 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | ||
4650 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | ||
4651 | { | ||
4652 | new_value = true; | ||
4653 | } | ||
4654 | } | ||
4189 | } | 4655 | } |
4190 | } | 4656 | } |
4657 | |||
4658 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0g | ||
4659 | // The user might not be allowed to unlink this object due to RLV settings, | ||
4660 | // because it would unsit them if they are sitting on the object. | ||
4661 | if ( (new_value) && (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && | ||
4662 | (gAgent.getAvatarObject()) && (gAgent.getAvatarObject()->mIsSitting) ) | ||
4663 | { | ||
4664 | // Allow if the avie isn't sitting on any of the selected objects | ||
4665 | LLObjectSelectionHandle handleSel = LLSelectMgr::getInstance()->getSelection(); | ||
4666 | RlvSelectIsSittingOn func(gAgent.getAvatarObject()->getRoot()); | ||
4667 | if (handleSel->getFirstRootNode(&func, TRUE)) | ||
4668 | new_value = false; | ||
4669 | } | ||
4670 | // [/RLVa:KB] | ||
4671 | |||
4191 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 4672 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
4192 | return true; | 4673 | return true; |
4193 | } | 4674 | } |
@@ -4197,6 +4678,19 @@ class LLToolsUnlink : public view_listener_t | |||
4197 | { | 4678 | { |
4198 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4679 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4199 | { | 4680 | { |
4681 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0g | ||
4682 | // The user might not be allowed to unlink this object due to RLV settings, | ||
4683 | // because it would unsit them if they are sitting on the object. | ||
4684 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) && (gAgent.getAvatarObject()->mIsSitting) ) | ||
4685 | { | ||
4686 | // Allow if the avie isn't sitting on any of the selected objects | ||
4687 | LLObjectSelectionHandle handleSel = LLSelectMgr::getInstance()->getSelection(); | ||
4688 | RlvSelectIsSittingOn func(gAgent.getAvatarObject()->getRoot()); | ||
4689 | if (handleSel->getFirstRootNode(&func, TRUE)) | ||
4690 | return true; | ||
4691 | } | ||
4692 | // [/RLVa:KB] | ||
4693 | |||
4200 | LLSelectMgr::getInstance()->sendDelink(); | 4694 | LLSelectMgr::getInstance()->sendDelink(); |
4201 | return true; | 4695 | return true; |
4202 | } | 4696 | } |
@@ -4216,6 +4710,13 @@ class LLToolsReleaseKeys : public view_listener_t | |||
4216 | { | 4710 | { |
4217 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4711 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4218 | { | 4712 | { |
4713 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
4714 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
4715 | { | ||
4716 | return true; | ||
4717 | } | ||
4718 | // [/RLVa:KB] | ||
4719 | |||
4219 | gAgent.forceReleaseControls(); | 4720 | gAgent.forceReleaseControls(); |
4220 | 4721 | ||
4221 | return true; | 4722 | return true; |
@@ -4226,7 +4727,11 @@ class LLToolsEnableReleaseKeys : public view_listener_t | |||
4226 | { | 4727 | { |
4227 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4728 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4228 | { | 4729 | { |
4229 | gMenuHolder->findControl(userdata["control"].asString())->setValue( gAgent.anyControlGrabbed() ); | 4730 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) |
4731 | gMenuHolder->findControl(userdata["control"].asString())->setValue( | ||
4732 | gAgent.anyControlGrabbed() && ( (!rlv_handler_t::isEnabled()) || (!gRlvHandler.hasLockedAttachment() ) ) ); | ||
4733 | // [/RLVa:KB] | ||
4734 | //gMenuHolder->findControl(userdata["control"].asString())->setValue( gAgent.anyControlGrabbed() ); | ||
4230 | return true; | 4735 | return true; |
4231 | } | 4736 | } |
4232 | }; | 4737 | }; |
@@ -4334,6 +4839,15 @@ class LLEditEnableDelete : public view_listener_t | |||
4334 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4839 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4335 | { | 4840 | { |
4336 | bool new_value = LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDoDelete(); | 4841 | bool new_value = LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDoDelete(); |
4842 | |||
4843 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4844 | // NOTE: we want to disable delete on objects but not disable delete on text | ||
4845 | if ( (new_value) && (rlv_handler_t::isEnabled()) && (LLEditMenuHandler::gEditMenuHandler == LLSelectMgr::getInstance()) ) | ||
4846 | { | ||
4847 | new_value = rlvCanDeleteOrReturn(); | ||
4848 | } | ||
4849 | // [/RLVa:KB] | ||
4850 | |||
4337 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 4851 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
4338 | return true; | 4852 | return true; |
4339 | } | 4853 | } |
@@ -4343,6 +4857,15 @@ class LLEditDelete : public view_listener_t | |||
4343 | { | 4857 | { |
4344 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4858 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4345 | { | 4859 | { |
4860 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4861 | // NOTE: we want to disable delete on objects but not disable delete on text | ||
4862 | if ( (rlv_handler_t::isEnabled()) && (LLEditMenuHandler::gEditMenuHandler == LLSelectMgr::getInstance()) && | ||
4863 | (!rlvCanDeleteOrReturn()) ) | ||
4864 | { | ||
4865 | return true; | ||
4866 | } | ||
4867 | // [/RLVa:KB] | ||
4868 | |||
4346 | // If a text field can do a deletion, it gets precedence over deleting | 4869 | // If a text field can do a deletion, it gets precedence over deleting |
4347 | // an object in the world. | 4870 | // an object in the world. |
4348 | if( LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDoDelete()) | 4871 | if( LLEditMenuHandler::gEditMenuHandler && LLEditMenuHandler::gEditMenuHandler->canDoDelete()) |
@@ -4374,6 +4897,12 @@ class LLObjectEnableDelete : public view_listener_t | |||
4374 | # endif | 4897 | # endif |
4375 | LLSelectMgr::getInstance()->canDoDelete(); | 4898 | LLSelectMgr::getInstance()->canDoDelete(); |
4376 | #endif | 4899 | #endif |
4900 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4901 | if ( (new_value) && (rlv_handler_t::isEnabled()) ) | ||
4902 | { | ||
4903 | new_value = rlvCanDeleteOrReturn(); | ||
4904 | } | ||
4905 | // [/RLVa:KB] | ||
4377 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 4906 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
4378 | return true; | 4907 | return true; |
4379 | } | 4908 | } |
@@ -4392,6 +4921,13 @@ class LLObjectDelete : public view_listener_t | |||
4392 | { | 4921 | { |
4393 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4922 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4394 | { | 4923 | { |
4924 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
4925 | if ( (rlv_handler_t::isEnabled()) && (!rlvCanDeleteOrReturn()) ) | ||
4926 | { | ||
4927 | return true; | ||
4928 | } | ||
4929 | // [/RLVa:KB] | ||
4930 | |||
4395 | if (LLSelectMgr::getInstance()) | 4931 | if (LLSelectMgr::getInstance()) |
4396 | { | 4932 | { |
4397 | LLSelectMgr::getInstance()->doDelete(); | 4933 | LLSelectMgr::getInstance()->doDelete(); |
@@ -4751,6 +5287,12 @@ class LLWorldCreateLandmark : public view_listener_t | |||
4751 | { | 5287 | { |
4752 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 5288 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4753 | { | 5289 | { |
5290 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
5291 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
5292 | { | ||
5293 | return true; | ||
5294 | } | ||
5295 | // [/RLVa:KB] | ||
4754 | LLViewerRegion* agent_region = gAgent.getRegion(); | 5296 | LLViewerRegion* agent_region = gAgent.getRegion(); |
4755 | if(!agent_region) | 5297 | if(!agent_region) |
4756 | { | 5298 | { |
@@ -4858,6 +5400,13 @@ class LLAvatarInviteToGroup : public view_listener_t | |||
4858 | { | 5400 | { |
4859 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 5401 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4860 | { | 5402 | { |
5403 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
5404 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
5405 | { | ||
5406 | return true; | ||
5407 | } | ||
5408 | // [/RLVa:KB] | ||
5409 | |||
4861 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); | 5410 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); |
4862 | if(avatar) | 5411 | if(avatar) |
4863 | { | 5412 | { |
@@ -4871,6 +5420,13 @@ class LLAvatarAddFriend : public view_listener_t | |||
4871 | { | 5420 | { |
4872 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 5421 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4873 | { | 5422 | { |
5423 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
5424 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
5425 | { | ||
5426 | return true; // Fallback code [see LLAvatarEnableAddFriend::handleEvent()] | ||
5427 | } | ||
5428 | // [/RLVa:KB] | ||
5429 | |||
4874 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); | 5430 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); |
4875 | if(avatar && !is_agent_friend(avatar->getID())) | 5431 | if(avatar && !is_agent_friend(avatar->getID())) |
4876 | { | 5432 | { |
@@ -4959,6 +5515,12 @@ class LLEnablePayObject : public view_listener_t | |||
4959 | } | 5515 | } |
4960 | } | 5516 | } |
4961 | } | 5517 | } |
5518 | |||
5519 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
5520 | // Don't enable "Pay..." on the avatar pie menu under @shownames=n | ||
5521 | new_value &= (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) || (avatar == NULL); | ||
5522 | // [/RLVa:KB] | ||
5523 | |||
4962 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 5524 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
4963 | return true; | 5525 | return true; |
4964 | } | 5526 | } |
@@ -5147,6 +5709,12 @@ class LLShowFloater : public view_listener_t | |||
5147 | } | 5709 | } |
5148 | else if (floater_name == "buy land") | 5710 | else if (floater_name == "buy land") |
5149 | { | 5711 | { |
5712 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
5713 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
5714 | { | ||
5715 | return true; | ||
5716 | } | ||
5717 | // [/RLVa:KB] | ||
5150 | if (LLViewerParcelMgr::getInstance()->selectionEmpty()) | 5718 | if (LLViewerParcelMgr::getInstance()->selectionEmpty()) |
5151 | { | 5719 | { |
5152 | LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); | 5720 | LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); |
@@ -5209,6 +5777,10 @@ class LLShowFloater : public view_listener_t | |||
5209 | { | 5777 | { |
5210 | LLFloaterActiveSpeakers::toggleInstance(LLSD()); | 5778 | LLFloaterActiveSpeakers::toggleInstance(LLSD()); |
5211 | } | 5779 | } |
5780 | else if (floater_name == "animation list") | ||
5781 | { | ||
5782 | JCFloaterAnimList::toggleInstance(LLSD()); | ||
5783 | } | ||
5212 | else if (floater_name == "inworld browser") | 5784 | else if (floater_name == "inworld browser") |
5213 | { | 5785 | { |
5214 | LLFloaterMediaBrowser::toggle(); | 5786 | LLFloaterMediaBrowser::toggle(); |
@@ -5370,6 +5942,13 @@ class LLShowAgentProfile : public view_listener_t | |||
5370 | } | 5942 | } |
5371 | else if (userdata.asString() == "hit object") | 5943 | else if (userdata.asString() == "hit object") |
5372 | { | 5944 | { |
5945 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
5946 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
5947 | { | ||
5948 | return true; | ||
5949 | } | ||
5950 | // [/RLVa:KB] | ||
5951 | |||
5373 | LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); | 5952 | LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); |
5374 | if (objectp) | 5953 | if (objectp) |
5375 | { | 5954 | { |
@@ -5429,6 +6008,13 @@ class LLLandEdit : public view_listener_t | |||
5429 | { | 6008 | { |
5430 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 6009 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
5431 | { | 6010 | { |
6011 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
6012 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) ) | ||
6013 | { | ||
6014 | return true; | ||
6015 | } | ||
6016 | // [/RLVa:KB] | ||
6017 | |||
5432 | if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") ) | 6018 | if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") ) |
5433 | { | 6019 | { |
5434 | // zoom in if we're looking at the avatar | 6020 | // zoom in if we're looking at the avatar |
@@ -5513,6 +6099,18 @@ private: | |||
5513 | LLViewerJointAttachment* attachment_point = NULL; | 6099 | LLViewerJointAttachment* attachment_point = NULL; |
5514 | if (index > 0) | 6100 | if (index > 0) |
5515 | attachment_point = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); | 6101 | attachment_point = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); |
6102 | |||
6103 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6104 | if ( (rlv_handler_t::isEnabled()) && | ||
6105 | ( ((index == 0) && (gRlvHandler.hasLockedAttachment())) || // Can't wear on default attach point | ||
6106 | ((index > 0) && (!gRlvHandler.isDetachable(attachment_point))) || // Can't replace locked attachment | ||
6107 | (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) ) ) // Attach on rezzed object == "Take" | ||
6108 | { | ||
6109 | setObjectSelection(NULL); // Clear the selection or it'll get stuck | ||
6110 | return true; | ||
6111 | } | ||
6112 | // [/RLVa:KB] | ||
6113 | |||
5516 | confirm_replace_attachment(0, attachment_point); | 6114 | confirm_replace_attachment(0, attachment_point); |
5517 | } | 6115 | } |
5518 | return true; | 6116 | return true; |
@@ -5620,6 +6218,24 @@ class LLAttachmentDrop : public view_listener_t | |||
5620 | return true; | 6218 | return true; |
5621 | } | 6219 | } |
5622 | 6220 | ||
6221 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6222 | if (rlv_handler_t::isEnabled()) | ||
6223 | { | ||
6224 | if (gRlvHandler.hasLockedAttachment()) | ||
6225 | { | ||
6226 | // NOTE: copy/paste of the code in enable_detach() | ||
6227 | LLObjectSelectionHandle hSelect = LLSelectMgr::getInstance()->getSelection(); | ||
6228 | RlvSelectHasLockedAttach functor; | ||
6229 | if ( (hSelect->isAttachment()) && (hSelect->getFirstRootNode(&functor, FALSE)) ) | ||
6230 | return true; | ||
6231 | } | ||
6232 | else if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
6233 | { | ||
6234 | return true; | ||
6235 | } | ||
6236 | } | ||
6237 | // [/RLVa:KB] | ||
6238 | |||
5623 | // The sendDropAttachment() method works on the list of selected | 6239 | // The sendDropAttachment() method works on the list of selected |
5624 | // objects. Thus we need to clear the list, make sure it only | 6240 | // objects. Thus we need to clear the list, make sure it only |
5625 | // contains the object the user clicked, send the message, | 6241 | // contains the object the user clicked, send the message, |
@@ -5638,6 +6254,13 @@ void handle_detach_from_avatar(void* user_data) | |||
5638 | 6254 | ||
5639 | if (attached_object) | 6255 | if (attached_object) |
5640 | { | 6256 | { |
6257 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0d | ||
6258 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isDetachable(attached_object)) ) | ||
6259 | { | ||
6260 | return; | ||
6261 | } | ||
6262 | // [/RLVa:KB] | ||
6263 | |||
5641 | gMessageSystem->newMessage("ObjectDetach"); | 6264 | gMessageSystem->newMessage("ObjectDetach"); |
5642 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | 6265 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); |
5643 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); | 6266 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); |
@@ -5720,6 +6343,17 @@ class LLAttachmentDetach : public view_listener_t | |||
5720 | return true; | 6343 | return true; |
5721 | } | 6344 | } |
5722 | 6345 | ||
6346 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6347 | // NOTE: copy/paste of the code in enable_detach() | ||
6348 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
6349 | { | ||
6350 | LLObjectSelectionHandle hSelect = LLSelectMgr::getInstance()->getSelection(); | ||
6351 | RlvSelectHasLockedAttach functor; | ||
6352 | if ( (hSelect->isAttachment()) && (hSelect->getFirstRootNode(&functor, FALSE)) ) | ||
6353 | return FALSE; | ||
6354 | } | ||
6355 | // [/RLVa:KB] | ||
6356 | |||
5723 | // The sendDetach() method works on the list of selected | 6357 | // The sendDetach() method works on the list of selected |
5724 | // objects. Thus we need to clear the list, make sure it only | 6358 | // objects. Thus we need to clear the list, make sure it only |
5725 | // contains the object the user clicked, send the message, | 6359 | // contains the object the user clicked, send the message, |
@@ -5757,6 +6391,8 @@ class LLAttachmentEnableDrop : public view_listener_t | |||
5757 | { | 6391 | { |
5758 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 6392 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
5759 | { | 6393 | { |
6394 | if (gDisconnected) | ||
6395 | return true; | ||
5760 | BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild()); | 6396 | BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild()); |
5761 | 6397 | ||
5762 | //Add an inventory observer to only allow dropping the newly attached item | 6398 | //Add an inventory observer to only allow dropping the newly attached item |
@@ -5802,8 +6438,10 @@ class LLAttachmentEnableDrop : public view_listener_t | |||
5802 | } | 6438 | } |
5803 | 6439 | ||
5804 | //now check to make sure that the item is actually in the inventory before we enable dropping it | 6440 | //now check to make sure that the item is actually in the inventory before we enable dropping it |
5805 | bool new_value = enable_detach(NULL) && can_build && item; | 6441 | // bool new_value = enable_detach(NULL) && can_build && item; |
5806 | 6442 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | |
6443 | bool new_value = enable_detach(NULL) && can_build && item && (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)); | ||
6444 | // [/RLVa:KB] | ||
5807 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 6445 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
5808 | return true; | 6446 | return true; |
5809 | } | 6447 | } |
@@ -5822,6 +6460,20 @@ BOOL enable_detach(void*) | |||
5822 | // ...if it's you, good to detach | 6460 | // ...if it's you, good to detach |
5823 | if (avatar->getID() == gAgent.getID()) | 6461 | if (avatar->getID() == gAgent.getID()) |
5824 | { | 6462 | { |
6463 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6464 | // NOTE: this code is reused as-is in LLAttachmentDetach::handleEvent() and LLAttachmentDrop::handleEvent() | ||
6465 | // so any changes here should be reflected there as well (I think it's in a number of other places as well by now) | ||
6466 | |||
6467 | // RELEASE-RLVa: LLSelectMgr::sendDetach() and LLSelectMgr::sendDropAttachment() call sendListToRegions with | ||
6468 | // SEND_ONLY_ROOTS so we only need to examine the roots which saves us time | ||
6469 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
6470 | { | ||
6471 | LLObjectSelectionHandle hSelect = LLSelectMgr::getInstance()->getSelection(); | ||
6472 | RlvSelectHasLockedAttach functor; | ||
6473 | if ( (hSelect->isAttachment()) && (hSelect->getFirstRootNode(&functor, FALSE)) ) | ||
6474 | return FALSE; | ||
6475 | } | ||
6476 | // [/RLVa:KB] | ||
5825 | return TRUE; | 6477 | return TRUE; |
5826 | } | 6478 | } |
5827 | 6479 | ||
@@ -5844,6 +6496,25 @@ class LLAttachmentEnableDetach : public view_listener_t | |||
5844 | // Used to tell if the selected object can be attached to your avatar. | 6496 | // Used to tell if the selected object can be attached to your avatar. |
5845 | BOOL object_selected_and_point_valid(void *user_data) | 6497 | BOOL object_selected_and_point_valid(void *user_data) |
5846 | { | 6498 | { |
6499 | // [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) | ||
6500 | if (rlv_handler_t::isEnabled()) | ||
6501 | { | ||
6502 | // RELEASE-RLVa: look at the caller graph for this function on every new release | ||
6503 | // -> 1.22.11 and 1.23.4 | ||
6504 | // - object_is_wearable() => dead code [user_data == NULL => default attach point => OK!] | ||
6505 | // - LLObjectEnableWear::handleEvent() => Rezzed prim / right-click / "Wear" [user_data == NULL => see above] | ||
6506 | // - enabler set up in LLVOAvatar::buildCharacter() => Rezzed prim / right-click / "Attach >" [user_data == pAttachPt] | ||
6507 | // - enabler set up in LLVOAvatar::buildCharacter() => Rezzed prim / Edit menu / "Attach Object" [user_data == pAttachPt] | ||
6508 | LLViewerJointAttachment* pAttachPt = (LLViewerJointAttachment*)user_data; | ||
6509 | if ( ((!pAttachPt) && (gRlvHandler.hasLockedAttachment())) || // Don't allow attach to default attach point | ||
6510 | ((pAttachPt) && (!gRlvHandler.isDetachable(pAttachPt))) || // Don't allow replacing of locked attachment | ||
6511 | (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) ) // Attaching a rezzed object == "Take" | ||
6512 | { | ||
6513 | return FALSE; | ||
6514 | } | ||
6515 | } | ||
6516 | // [/RLVa:KB] | ||
6517 | |||
5847 | //LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; | 6518 | //LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; |
5848 | LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); | 6519 | LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); |
5849 | for (LLObjectSelection::root_iterator iter = selection->root_begin(); | 6520 | for (LLObjectSelection::root_iterator iter = selection->root_begin(); |
@@ -5911,7 +6582,13 @@ BOOL object_attached(void *user_data) | |||
5911 | { | 6582 | { |
5912 | LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; | 6583 | LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; |
5913 | 6584 | ||
5914 | return attachment->getObject() != NULL; | 6585 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) |
6586 | return ( | ||
6587 | (attachment->getObject() != NULL) && | ||
6588 | ( (!rlv_handler_t::isEnabled()) || (gRlvHandler.isDetachable(attachment->getObject())) ) | ||
6589 | ); | ||
6590 | // [/RLVa:KB] | ||
6591 | // return attachment->getObject() != NULL; | ||
5915 | } | 6592 | } |
5916 | 6593 | ||
5917 | class LLAvatarSendIM : public view_listener_t | 6594 | class LLAvatarSendIM : public view_listener_t |
@@ -5919,6 +6596,12 @@ class LLAvatarSendIM : public view_listener_t | |||
5919 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 6596 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
5920 | { | 6597 | { |
5921 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); | 6598 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); |
6599 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
6600 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
6601 | { | ||
6602 | return true; | ||
6603 | } | ||
6604 | // [/RLVa:KB] | ||
5922 | if(avatar) | 6605 | if(avatar) |
5923 | { | 6606 | { |
5924 | std::string name("IM"); | 6607 | std::string name("IM"); |
@@ -6054,6 +6737,16 @@ class LLToolsSelectedScriptAction : public view_listener_t | |||
6054 | { | 6737 | { |
6055 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 6738 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
6056 | { | 6739 | { |
6740 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6741 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
6742 | { | ||
6743 | LLObjectSelectionHandle selectHandle = LLSelectMgr::getInstance()->getSelection(); | ||
6744 | RlvSelectHasLockedAttach functor; | ||
6745 | if ( (selectHandle->isAttachment()) && (selectHandle->getFirstNode(&functor)) ) | ||
6746 | return true; | ||
6747 | } | ||
6748 | // [/RLVa:KB] | ||
6749 | |||
6057 | std::string action = userdata.asString(); | 6750 | std::string action = userdata.asString(); |
6058 | if (action == "compile mono") | 6751 | if (action == "compile mono") |
6059 | { | 6752 | { |
@@ -6114,7 +6807,10 @@ void handle_selected_texture_info(void*) | |||
6114 | S32 height = img->getHeight(); | 6807 | S32 height = img->getHeight(); |
6115 | S32 width = img->getWidth(); | 6808 | S32 width = img->getWidth(); |
6116 | S32 components = img->getComponents(); | 6809 | S32 components = img->getComponents(); |
6117 | msg = llformat("%dx%d %s on face ", | 6810 | std::string image_id_string = image_id.asString(); |
6811 | image_id_string = image_id_string.replace(24, 35, 12, '*') + " "; // hide last segment to discourage theft | ||
6812 | msg = llformat("%s%dx%d %s on face ", | ||
6813 | image_id_string.c_str(), | ||
6118 | width, | 6814 | width, |
6119 | height, | 6815 | height, |
6120 | (components == 4 ? "alpha" : "opaque")); | 6816 | (components == 4 ? "alpha" : "opaque")); |
@@ -6135,12 +6831,30 @@ void handle_dump_image_list(void*) | |||
6135 | 6831 | ||
6136 | void handle_test_male(void*) | 6832 | void handle_test_male(void*) |
6137 | { | 6833 | { |
6834 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6835 | if ( (rlv_handler_t::isEnabled()) && | ||
6836 | ( (gRlvHandler.hasLockedAttachment()) || | ||
6837 | (gRlvHandler.hasBehaviour(RLV_BHVR_ADDOUTFIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REMOUTFIT)) ) ) | ||
6838 | { | ||
6839 | return; | ||
6840 | } | ||
6841 | // [/RLVa:KB] | ||
6842 | |||
6138 | wear_outfit_by_name("Male Shape & Outfit"); | 6843 | wear_outfit_by_name("Male Shape & Outfit"); |
6139 | //gGestureList.requestResetFromServer( TRUE ); | 6844 | //gGestureList.requestResetFromServer( TRUE ); |
6140 | } | 6845 | } |
6141 | 6846 | ||
6142 | void handle_test_female(void*) | 6847 | void handle_test_female(void*) |
6143 | { | 6848 | { |
6849 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
6850 | if ( (rlv_handler_t::isEnabled()) && | ||
6851 | ( (gRlvHandler.hasLockedAttachment()) || | ||
6852 | (gRlvHandler.hasBehaviour(RLV_BHVR_ADDOUTFIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REMOUTFIT)) ) ) | ||
6853 | { | ||
6854 | return; | ||
6855 | } | ||
6856 | // [/RLVa:KB] | ||
6857 | |||
6144 | wear_outfit_by_name("Female Shape & Outfit"); | 6858 | wear_outfit_by_name("Female Shape & Outfit"); |
6145 | //gGestureList.requestResetFromServer( FALSE ); | 6859 | //gGestureList.requestResetFromServer( FALSE ); |
6146 | } | 6860 | } |
@@ -6276,6 +6990,22 @@ BOOL enable_more_than_one_selected(void* ) | |||
6276 | 6990 | ||
6277 | static bool is_editable_selected() | 6991 | static bool is_editable_selected() |
6278 | { | 6992 | { |
6993 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-1.0.0c | ||
6994 | // RELEASE-RLVa: check that this still isn't called by anything but script actions in the Tools menu | ||
6995 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedAttachment()) ) | ||
6996 | { | ||
6997 | LLObjectSelectionHandle selectHandle = LLSelectMgr::getInstance()->getSelection(); | ||
6998 | |||
6999 | // NOTE: this is called for 5 different menu items so we'll trade accuracy for efficiency and only | ||
7000 | // examine root nodes (LLToolsSelectedScriptAction::handleEvent() will catch what we miss) | ||
7001 | RlvSelectHasLockedAttach functor; | ||
7002 | if ( (selectHandle->isAttachment()) && (selectHandle->getFirstRootNode(&functor)) ) | ||
7003 | { | ||
7004 | return false; | ||
7005 | } | ||
7006 | } | ||
7007 | // [/RLVa:KB] | ||
7008 | |||
6279 | return (LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() != NULL); | 7009 | return (LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() != NULL); |
6280 | } | 7010 | } |
6281 | 7011 | ||
@@ -6322,7 +7052,12 @@ class LLToolsEnableTakeCopy : public view_listener_t | |||
6322 | { | 7052 | { |
6323 | virtual bool apply(LLViewerObject* obj) | 7053 | virtual bool apply(LLViewerObject* obj) |
6324 | { | 7054 | { |
6325 | return (!obj->permCopy() || obj->isAttachment()); | 7055 | // return (!obj->permCopy() || obj->isAttachment()); |
7056 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
7057 | return (!obj->permCopy() || obj->isAttachment()) || | ||
7058 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) && | ||
7059 | (gAgent.getAvatarObject()->getRoot() == obj) ); | ||
7060 | // [/RLVa:KB] | ||
6326 | } | 7061 | } |
6327 | } func; | 7062 | } func; |
6328 | const bool firstonly = true; | 7063 | const bool firstonly = true; |
@@ -6515,6 +7250,9 @@ class LLWorldEnableCreateLandmark : public view_listener_t | |||
6515 | { | 7250 | { |
6516 | bool new_value = gAgent.isGodlike() || | 7251 | bool new_value = gAgent.isGodlike() || |
6517 | (gAgent.getRegion() && gAgent.getRegion()->getAllowLandmark()); | 7252 | (gAgent.getRegion() && gAgent.getRegion()->getAllowLandmark()); |
7253 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
7254 | new_value &= !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); | ||
7255 | // [/RLVa:KB] | ||
6518 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 7256 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
6519 | return true; | 7257 | return true; |
6520 | } | 7258 | } |
@@ -6567,7 +7305,11 @@ BOOL enable_god_customer_service(void*) | |||
6567 | 7305 | ||
6568 | BOOL enable_god_basic(void*) | 7306 | BOOL enable_god_basic(void*) |
6569 | { | 7307 | { |
6570 | return gAgent.getGodLevel() > GOD_NOT; | 7308 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) |
7309 | // RELEASE-RLVa: check that this function isn't used for anything other than to enable/disable showing the "God Tools..." floater | ||
7310 | return (gAgent.getGodLevel() > GOD_NOT) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)); | ||
7311 | // [/RLVa:KB] | ||
7312 | //return gAgent.getGodLevel() > GOD_NOT; | ||
6571 | } | 7313 | } |
6572 | 7314 | ||
6573 | #if 0 // 1.9.2 | 7315 | #if 0 // 1.9.2 |
@@ -7123,6 +7865,13 @@ class LLViewHighlightTransparent : public view_listener_t | |||
7123 | { | 7865 | { |
7124 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 7866 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
7125 | { | 7867 | { |
7868 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
7869 | if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) | ||
7870 | { | ||
7871 | return true; | ||
7872 | } | ||
7873 | // [/RLVa:KB] | ||
7874 | |||
7126 | LLDrawPoolAlpha::sShowDebugAlpha = !LLDrawPoolAlpha::sShowDebugAlpha; | 7875 | LLDrawPoolAlpha::sShowDebugAlpha = !LLDrawPoolAlpha::sShowDebugAlpha; |
7127 | return true; | 7876 | return true; |
7128 | } | 7877 | } |
@@ -7170,6 +7919,13 @@ class LLViewShowHUDAttachments : public view_listener_t | |||
7170 | { | 7919 | { |
7171 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 7920 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
7172 | { | 7921 | { |
7922 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
7923 | if ( (LLPipeline::sShowHUDAttachments) && (rlv_handler_t::isEnabled()) && (gRlvHandler.hasLockedHUD()) ) | ||
7924 | { | ||
7925 | return true; | ||
7926 | } | ||
7927 | // [/RLVa:KB] | ||
7928 | |||
7173 | LLPipeline::sShowHUDAttachments = !LLPipeline::sShowHUDAttachments; | 7929 | LLPipeline::sShowHUDAttachments = !LLPipeline::sShowHUDAttachments; |
7174 | return true; | 7930 | return true; |
7175 | } | 7931 | } |
@@ -7228,6 +7984,15 @@ class LLEditEnableTakeOff : public view_listener_t | |||
7228 | { | 7984 | { |
7229 | new_value = LLAgent::selfHasWearable((void *)WT_SKIRT); | 7985 | new_value = LLAgent::selfHasWearable((void *)WT_SKIRT); |
7230 | } | 7986 | } |
7987 | |||
7988 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
7989 | // Why aren't they using LLWearable::typeNameToType()? *confuzzled* | ||
7990 | if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.isRemovable(LLWearable::typeNameToType(clothing))) ) | ||
7991 | { | ||
7992 | new_value = false; | ||
7993 | } | ||
7994 | // [/RLVa:KB] | ||
7995 | |||
7231 | gMenuHolder->findControl(control_name)->setValue(new_value); | 7996 | gMenuHolder->findControl(control_name)->setValue(new_value); |
7232 | return true; | 7997 | return true; |
7233 | } | 7998 | } |
@@ -7325,6 +8090,13 @@ class LLWorldEnvSettings : public view_listener_t | |||
7325 | { | 8090 | { |
7326 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 8091 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
7327 | { | 8092 | { |
8093 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
8094 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) | ||
8095 | { | ||
8096 | return true; | ||
8097 | } | ||
8098 | // [/RLVa:KB] | ||
8099 | |||
7328 | std::string tod = userdata.asString(); | 8100 | std::string tod = userdata.asString(); |
7329 | LLVector3 sun_direction; | 8101 | LLVector3 sun_direction; |
7330 | 8102 | ||
@@ -7402,6 +8174,13 @@ class LLWorldWaterSettings : public view_listener_t | |||
7402 | { | 8174 | { |
7403 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 8175 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
7404 | { | 8176 | { |
8177 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
8178 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) | ||
8179 | { | ||
8180 | return true; | ||
8181 | } | ||
8182 | // [/RLVa:KB] | ||
8183 | |||
7405 | // if not there or is hidden, show it | 8184 | // if not there or is hidden, show it |
7406 | if( !LLFloaterWater::isOpen() || | 8185 | if( !LLFloaterWater::isOpen() || |
7407 | !LLFloaterWater::instance()->getVisible()) { | 8186 | !LLFloaterWater::instance()->getVisible()) { |
@@ -7432,6 +8211,13 @@ class LLWorldDayCycle : public view_listener_t | |||
7432 | { | 8211 | { |
7433 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 8212 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
7434 | { | 8213 | { |
8214 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
8215 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) | ||
8216 | { | ||
8217 | return true; | ||
8218 | } | ||
8219 | // [/RLVa:KB] | ||
8220 | |||
7435 | LLFloaterDayCycle::show(); | 8221 | LLFloaterDayCycle::show(); |
7436 | return true; | 8222 | return true; |
7437 | } | 8223 | } |
@@ -7619,6 +8405,113 @@ class LLAdvancedCheckHUDInfo : public view_listener_t | |||
7619 | }; | 8405 | }; |
7620 | 8406 | ||
7621 | 8407 | ||
8408 | ////////////////////// | ||
8409 | // FORCE GROUND SIT // | ||
8410 | ////////////////////// | ||
8411 | |||
8412 | class LLAdvancedToggleSit: public view_listener_t | ||
8413 | { | ||
8414 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8415 | { | ||
8416 | LLChat chat; | ||
8417 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
8418 | if(!gAgent.getAvatarObject()->mIsSitting) | ||
8419 | { | ||
8420 | gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND); | ||
8421 | chat.mText = "Forcing Ground Sit"; | ||
8422 | } | ||
8423 | else | ||
8424 | { | ||
8425 | gAgent.setControlFlags(!AGENT_CONTROL_SIT_ON_GROUND); | ||
8426 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | ||
8427 | chat.mText = "Standing up"; | ||
8428 | } | ||
8429 | LLFloaterChat::addChat(chat); | ||
8430 | return true; | ||
8431 | } | ||
8432 | }; | ||
8433 | |||
8434 | class LLAdvancedCheckSit : public view_listener_t | ||
8435 | { | ||
8436 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8437 | { | ||
8438 | if(gAgent.getAvatarObject()->mIsSitting) | ||
8439 | { | ||
8440 | gMenuHolder->findControl(userdata["control"].asString())->setValue(true); | ||
8441 | } | ||
8442 | else | ||
8443 | { | ||
8444 | gMenuHolder->findControl(userdata["control"].asString())->setValue(false); | ||
8445 | } | ||
8446 | return true; | ||
8447 | } | ||
8448 | }; | ||
8449 | |||
8450 | |||
8451 | ///////////// | ||
8452 | // PHANTOM // | ||
8453 | ///////////// | ||
8454 | |||
8455 | class LLAdvancedTogglePhantom: public view_listener_t | ||
8456 | { | ||
8457 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8458 | { | ||
8459 | LLAgent::togglePhantom(); | ||
8460 | BOOL ph = LLAgent::getPhantom(); | ||
8461 | LLChat chat; | ||
8462 | chat.mSourceType = CHAT_SOURCE_SYSTEM; | ||
8463 | chat.mText = llformat("%s%s","Phantom ",(ph ? "On" : "Off")); | ||
8464 | LLFloaterChat::addChat(chat); | ||
8465 | //gMenuHolder->findControl(userdata["control"].asString())->setValue(ph); | ||
8466 | return true; | ||
8467 | } | ||
8468 | |||
8469 | }; | ||
8470 | |||
8471 | class LLAdvancedCheckPhantom: public view_listener_t | ||
8472 | { | ||
8473 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8474 | { | ||
8475 | gMenuHolder->findControl(userdata["control"].asString())->setValue(LLAgent::getPhantom()); | ||
8476 | return true; | ||
8477 | } | ||
8478 | }; | ||
8479 | |||
8480 | |||
8481 | /////////////////// | ||
8482 | // ASSET BROWSER // | ||
8483 | /////////////////// | ||
8484 | |||
8485 | class LLAdvancedToggleAssetBrowser: public view_listener_t | ||
8486 | { | ||
8487 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8488 | { | ||
8489 | //open the floater | ||
8490 | LLFloaterAssetBrowser::show(0); | ||
8491 | |||
8492 | bool vis = false; | ||
8493 | if(LLFloaterAssetBrowser::getInstance()) | ||
8494 | { | ||
8495 | vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible(); | ||
8496 | } | ||
8497 | return true; | ||
8498 | } | ||
8499 | }; | ||
8500 | |||
8501 | class LLAdvancedCheckAssetBrowser: public view_listener_t | ||
8502 | { | ||
8503 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
8504 | { | ||
8505 | bool vis = false; | ||
8506 | if(LLFloaterAssetBrowser::getInstance()) | ||
8507 | { | ||
8508 | vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible(); | ||
8509 | } | ||
8510 | gMenuHolder->findControl(userdata["control"].asString())->setValue(vis); | ||
8511 | return true; | ||
8512 | } | ||
8513 | }; | ||
8514 | |||
7622 | 8515 | ||
7623 | /////////////////////// | 8516 | /////////////////////// |
7624 | // CLEAR GROUP CACHE // | 8517 | // CLEAR GROUP CACHE // |
@@ -9559,6 +10452,49 @@ class LLAvatarReportAbuse : public view_listener_t | |||
9559 | 10452 | ||
9560 | 10453 | ||
9561 | 10454 | ||
10455 | /////////////// | ||
10456 | // RLVa Main // | ||
10457 | /////////////// | ||
10458 | |||
10459 | |||
10460 | class RLVaMainToggle : public view_listener_t | ||
10461 | { | ||
10462 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
10463 | { | ||
10464 | rlvToggleEnabled(NULL); | ||
10465 | return true; | ||
10466 | } | ||
10467 | }; | ||
10468 | |||
10469 | class RLVaMainCheck : public view_listener_t | ||
10470 | { | ||
10471 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
10472 | { | ||
10473 | bool new_value = rlvGetEnabled(NULL); | ||
10474 | std::string control_name = userdata["control"].asString(); | ||
10475 | gMenuHolder->findControl(control_name)->setValue(new_value); | ||
10476 | return true; | ||
10477 | } | ||
10478 | }; | ||
10479 | |||
10480 | |||
10481 | |||
10482 | //////////////////// | ||
10483 | // RLVa BEHAVIORS // | ||
10484 | //////////////////// | ||
10485 | |||
10486 | |||
10487 | class RLVaBehaviorsShow : public view_listener_t | ||
10488 | { | ||
10489 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
10490 | { | ||
10491 | RlvFloaterBehaviour::show(NULL); | ||
10492 | return true; | ||
10493 | } | ||
10494 | }; | ||
10495 | |||
10496 | |||
10497 | |||
9562 | static void addMenu(view_listener_t *menu, const char *name) | 10498 | static void addMenu(view_listener_t *menu, const char *name) |
9563 | { | 10499 | { |
9564 | sMenus.push_back(menu); | 10500 | sMenus.push_back(menu); |
@@ -9629,7 +10565,7 @@ void initialize_menus() | |||
9629 | addMenu(new LLZoomer(1/1.2f), "View.ZoomIn"); | 10565 | addMenu(new LLZoomer(1/1.2f), "View.ZoomIn"); |
9630 | addMenu(new LLZoomer(DEFAULT_FIELD_OF_VIEW, false), "View.ZoomDefault"); | 10566 | addMenu(new LLZoomer(DEFAULT_FIELD_OF_VIEW, false), "View.ZoomDefault"); |
9631 | addMenu(new LLViewFullscreen(), "View.Fullscreen"); | 10567 | addMenu(new LLViewFullscreen(), "View.Fullscreen"); |
9632 | addMenu(new LLViewDefaultUISize(), "View.DefaultUISize"); | 10568 | addMenu(new LLViewDefaultUISize(), "View.DefaultUISize"); //unused - now in preferences > general -- McCabe |
9633 | 10569 | ||
9634 | addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); | 10570 | addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); |
9635 | addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam"); | 10571 | addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam"); |
@@ -9740,6 +10676,10 @@ void initialize_menus() | |||
9740 | addMenu(new LLObjectBuy(), "Object.Buy"); | 10676 | addMenu(new LLObjectBuy(), "Object.Buy"); |
9741 | addMenu(new LLObjectEdit(), "Object.Edit"); | 10677 | addMenu(new LLObjectEdit(), "Object.Edit"); |
9742 | addMenu(new LLObjectInspect(), "Object.Inspect"); | 10678 | addMenu(new LLObjectInspect(), "Object.Inspect"); |
10679 | addMenu(new LLObjectCopyUUID(), "Object.CopyUUID"); | ||
10680 | addMenu(new LLObjectExport(), "Object.Export"); | ||
10681 | addMenu(new LLObjectImport(), "Object.Import"); | ||
10682 | addMenu(new LLObjectImportUpload(), "Object.ImportUpload"); | ||
9743 | 10683 | ||
9744 | addMenu(new LLObjectEnableOpen(), "Object.EnableOpen"); | 10684 | addMenu(new LLObjectEnableOpen(), "Object.EnableOpen"); |
9745 | addMenu(new LLObjectEnableTouch(), "Object.EnableTouch"); | 10685 | addMenu(new LLObjectEnableTouch(), "Object.EnableTouch"); |
@@ -9750,6 +10690,9 @@ void initialize_menus() | |||
9750 | addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse"); | 10690 | addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse"); |
9751 | addMenu(new LLObjectEnableMute(), "Object.EnableMute"); | 10691 | addMenu(new LLObjectEnableMute(), "Object.EnableMute"); |
9752 | addMenu(new LLObjectEnableBuy(), "Object.EnableBuy"); | 10692 | addMenu(new LLObjectEnableBuy(), "Object.EnableBuy"); |
10693 | addMenu(new LLObjectEnableCopyUUID(), "Object.EnableCopyUUID"); | ||
10694 | addMenu(new LLObjectEnableExport(), "Object.EnableExport"); | ||
10695 | addMenu(new LLObjectEnableImport(), "Object.EnableImport"); | ||
9753 | 10696 | ||
9754 | /*addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch"); | 10697 | /*addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch"); |
9755 | addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch"); | 10698 | addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch"); |
@@ -9799,6 +10742,12 @@ void initialize_menus() | |||
9799 | addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole"); | 10742 | addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole"); |
9800 | addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole"); | 10743 | addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole"); |
9801 | addMenu(new LLAdvancedReloadSettingsOverrides(), "Advanced.ReloadSettingsOverrides"); | 10744 | addMenu(new LLAdvancedReloadSettingsOverrides(), "Advanced.ReloadSettingsOverrides"); |
10745 | addMenu(new LLAdvancedToggleSit(), "Advanced.ToggleSit"); | ||
10746 | addMenu(new LLAdvancedCheckSit(), "Advanced.CheckSit"); | ||
10747 | addMenu(new LLAdvancedTogglePhantom(), "Advanced.TogglePhantom"); | ||
10748 | addMenu(new LLAdvancedCheckPhantom(), "Advanced.CheckPhantom"); | ||
10749 | addMenu(new LLAdvancedToggleAssetBrowser(),"Advanced.ToggleAssetBrowser"); | ||
10750 | addMenu(new LLAdvancedCheckAssetBrowser(),"Advanced.CheckAssetBrowser"); | ||
9802 | 10751 | ||
9803 | // Advanced > HUD Info | 10752 | // Advanced > HUD Info |
9804 | addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo"); | 10753 | addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo"); |
@@ -9944,4 +10893,11 @@ void initialize_menus() | |||
9944 | addMenu(new LLAdvancedCheckViewAdminOptions(), "Advanced.CheckViewAdminOptions"); | 10893 | addMenu(new LLAdvancedCheckViewAdminOptions(), "Advanced.CheckViewAdminOptions"); |
9945 | addMenu(new LLAdvancedRequestAdminStatus(), "Advanced.RequestAdminStatus"); | 10894 | addMenu(new LLAdvancedRequestAdminStatus(), "Advanced.RequestAdminStatus"); |
9946 | addMenu(new LLAdvancedLeaveAdminStatus(), "Advanced.LeaveAdminStatus"); | 10895 | addMenu(new LLAdvancedLeaveAdminStatus(), "Advanced.LeaveAdminStatus"); |
10896 | |||
10897 | |||
10898 | // RLVa | ||
10899 | addMenu(new RLVaMainToggle(), "RLVa.Main.Toggle"); | ||
10900 | addMenu(new RLVaMainCheck(), "RLVa.Main.Enabled"); | ||
10901 | addMenu(new RLVaBehaviorsShow(), "RLVa.Behaviors.Show"); | ||
10902 | |||
9947 | } | 10903 | } |
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp index 2925916..178fc97 100644 --- a/linden/indra/newview/llviewermenufile.cpp +++ b/linden/indra/newview/llviewermenufile.cpp | |||
@@ -473,6 +473,15 @@ class LLFileTakeSnapshotToDisk : public view_listener_t | |||
473 | } | 473 | } |
474 | }; | 474 | }; |
475 | 475 | ||
476 | class FileLogout : public view_listener_t | ||
477 | { | ||
478 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
479 | { | ||
480 | LLAppViewer::userLogout(NULL); | ||
481 | return true; | ||
482 | } | ||
483 | }; | ||
484 | |||
476 | class LLFileQuit : public view_listener_t | 485 | class LLFileQuit : public view_listener_t |
477 | { | 486 | { |
478 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 487 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -959,11 +968,6 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty | |||
959 | S32 expected_upload_cost, | 968 | S32 expected_upload_cost, |
960 | void *userdata) | 969 | void *userdata) |
961 | { | 970 | { |
962 | if(gDisconnected) | ||
963 | { | ||
964 | return ; | ||
965 | } | ||
966 | |||
967 | LLAssetID uuid = tid.makeAssetID(gAgent.getSecureSessionID()); | 971 | LLAssetID uuid = tid.makeAssetID(gAgent.getSecureSessionID()); |
968 | 972 | ||
969 | if( LLAssetType::AT_SOUND == asset_type ) | 973 | if( LLAssetType::AT_SOUND == asset_type ) |
@@ -1087,6 +1091,7 @@ void init_menu_file() | |||
1087 | (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); | 1091 | (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); |
1088 | (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); | 1092 | (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); |
1089 | (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); | 1093 | (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); |
1094 | (new FileLogout())->registerListener(gMenuHolder, "File.Logout"); | ||
1090 | (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); | 1095 | (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); |
1091 | 1096 | ||
1092 | (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); | 1097 | (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); |
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index 5d83065..d64eecd 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp | |||
@@ -80,6 +80,7 @@ | |||
80 | #include "llfloatergroupinfo.h" | 80 | #include "llfloatergroupinfo.h" |
81 | #include "llfloaterimagepreview.h" | 81 | #include "llfloaterimagepreview.h" |
82 | #include "llfloaterland.h" | 82 | #include "llfloaterland.h" |
83 | #include "llfloatermap.h" | ||
83 | #include "llfloaterregioninfo.h" | 84 | #include "llfloaterregioninfo.h" |
84 | #include "llfloaterlandholdings.h" | 85 | #include "llfloaterlandholdings.h" |
85 | #include "llurldispatcher.h" | 86 | #include "llurldispatcher.h" |
@@ -112,7 +113,7 @@ | |||
112 | #include "llui.h" // for make_ui_sound | 113 | #include "llui.h" // for make_ui_sound |
113 | #include "lluploaddialog.h" | 114 | #include "lluploaddialog.h" |
114 | #include "llviewercamera.h" | 115 | #include "llviewercamera.h" |
115 | #include "llviewercontrol.h" | 116 | //#include "llviewercontrol.h" |
116 | #include "llviewergenericmessage.h" | 117 | #include "llviewergenericmessage.h" |
117 | #include "llviewerinventory.h" | 118 | #include "llviewerinventory.h" |
118 | #include "llviewermenu.h" | 119 | #include "llviewermenu.h" |
@@ -142,6 +143,17 @@ | |||
142 | #include "llwindebug.h" // For the invalid message handler | 143 | #include "llwindebug.h" // For the invalid message handler |
143 | #endif | 144 | #endif |
144 | 145 | ||
146 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
147 | #include "llfloateravatarinfo.h" | ||
148 | extern LLMap< const LLUUID, LLFloaterAvatarInfo* > gAvatarInfoInstances; // Only defined in llfloateravatarinfo.cpp | ||
149 | // [/RLVa:KB] | ||
150 | |||
151 | //silly spam define D: | ||
152 | bool dialogSpamOn; | ||
153 | static LLFrameTimer d_spam; | ||
154 | std::map< std::string , S32 > lastd_names; | ||
155 | LLDynamicArray< std::string > blacklisted_names; | ||
156 | |||
145 | // | 157 | // |
146 | // Constants | 158 | // Constants |
147 | // | 159 | // |
@@ -1115,6 +1127,21 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& | |||
1115 | switch(button) | 1127 | switch(button) |
1116 | { | 1128 | { |
1117 | case IOR_ACCEPT: | 1129 | case IOR_ACCEPT: |
1130 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.2a | ||
1131 | // Only change the inventory offer's destination folder to the shared root if: | ||
1132 | // - the user has enabled the feature | ||
1133 | // - the inventory offer came from a script (and specifies a folder) | ||
1134 | // - the name starts with the prefix [mDesc format (quotes are part of the string): "[OBJECTNAME] ( http://slurl.com/... )"] | ||
1135 | if ( (rlv_handler_t::isEnabled()) && (!RlvSettings::getForbidGiveToRLV()) && | ||
1136 | (IM_TASK_INVENTORY_OFFERED == info->mIM) && (LLAssetType::AT_CATEGORY == info->mType) && (info->mDesc.find(RLV_PUTINV_PREFIX) == 1) ) | ||
1137 | { | ||
1138 | LLViewerInventoryCategory* pRlvRoot = gRlvHandler.getSharedRoot(); | ||
1139 | if (pRlvRoot) | ||
1140 | { | ||
1141 | info->mFolderID = pRlvRoot->getUUID(); | ||
1142 | } | ||
1143 | } | ||
1144 | // [/RLVa:KB] | ||
1118 | // ACCEPT. The math for the dialog works, because the accept | 1145 | // ACCEPT. The math for the dialog works, because the accept |
1119 | // for inventory_offered, task_inventory_offer or | 1146 | // for inventory_offered, task_inventory_offer or |
1120 | // group_notice_inventory is 1 greater than the offer integer value. | 1147 | // group_notice_inventory is 1 greater than the offer integer value. |
@@ -1277,6 +1304,13 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task) | |||
1277 | if(indx >= 0) | 1304 | if(indx >= 0) |
1278 | { | 1305 | { |
1279 | LLStringUtil::truncate(msg, indx); | 1306 | LLStringUtil::truncate(msg, indx); |
1307 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-1.0.0a | ||
1308 | // TODO-RLVa: needs revisiting when LL saves open notifications to disk to accept them on the next relog | ||
1309 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
1310 | { | ||
1311 | gRlvHandler.filterLocation(info->mDesc); | ||
1312 | } | ||
1313 | // [/RLVa:KB] | ||
1280 | } | 1314 | } |
1281 | 1315 | ||
1282 | LLSD args; | 1316 | LLSD args; |
@@ -1505,7 +1539,20 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1505 | // do nothing -- don't distract newbies in | 1539 | // do nothing -- don't distract newbies in |
1506 | // Prelude with global IMs | 1540 | // Prelude with global IMs |
1507 | } | 1541 | } |
1508 | else if (offline == IM_ONLINE && !is_linden && is_busy && name != SYSTEM_FROM) | 1542 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) |
1543 | else if ( (rlv_handler_t::isEnabled()) && (offline == IM_ONLINE) && ("@version" == message) ) | ||
1544 | { | ||
1545 | rlvSendBusyMessage(from_id, gRlvHandler.getVersionString(), session_id); | ||
1546 | // We won't receive a typing stop message, so do that manually (see comment at the end of LLFloaterIMPanel::sendMsg) | ||
1547 | LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem); | ||
1548 | gIMMgr->processIMTypingStop(im_info); | ||
1549 | } | ||
1550 | // [/RLVa:KB] | ||
1551 | // else if (offline == IM_ONLINE && !is_linden && is_busy && name != SYSTEM_FROM) | ||
1552 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
1553 | else if ( (offline == IM_ONLINE && !is_linden && is_busy && name != SYSTEM_FROM) && | ||
1554 | ( (!gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) || (gRlvHandler.isException(RLV_BHVR_RECVIM, from_id))) ) | ||
1555 | // [/RLVa:KB] | ||
1509 | { | 1556 | { |
1510 | // return a standard "busy" message, but only do it to online IM | 1557 | // return a standard "busy" message, but only do it to online IM |
1511 | // (i.e. not other auto responses and not store-and-forward IM) | 1558 | // (i.e. not other auto responses and not store-and-forward IM) |
@@ -1562,6 +1609,21 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1562 | } | 1609 | } |
1563 | else if (to_id.isNull()) | 1610 | else if (to_id.isNull()) |
1564 | { | 1611 | { |
1612 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
1613 | // Filter region messages that weren't sent by a Linden | ||
1614 | if ( (rlv_handler_t::isEnabled()) && (LLMuteList::getInstance()) && | ||
1615 | (!LLMuteList::getInstance()->isLinden(name)) && (from_id != gAgent.getID()) ) | ||
1616 | { | ||
1617 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
1618 | gRlvHandler.filterLocation(message); | ||
1619 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
1620 | { | ||
1621 | name = gRlvHandler.getAnonym(name); | ||
1622 | gRlvHandler.filterNames(message); | ||
1623 | } | ||
1624 | } | ||
1625 | // [/RLVa:KB] | ||
1626 | |||
1565 | // Message to everyone from GOD | 1627 | // Message to everyone from GOD |
1566 | args["NAME"] = name; | 1628 | args["NAME"] = name; |
1567 | args["MESSAGE"] = message; | 1629 | args["MESSAGE"] = message; |
@@ -1577,6 +1639,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1577 | else | 1639 | else |
1578 | { | 1640 | { |
1579 | // standard message, not from system | 1641 | // standard message, not from system |
1642 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
1643 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) && (!gRlvHandler.isException(RLV_BHVR_RECVIM, from_id)) ) | ||
1644 | { | ||
1645 | rlvSendBusyMessage(from_id, rlv_handler_t::cstrMsgRecvIM, session_id); | ||
1646 | |||
1647 | message = message.substr(0, message_offset) + rlv_handler_t::cstrBlockedRecvIM; | ||
1648 | } | ||
1649 | // [/RLVa:KB] | ||
1650 | |||
1580 | std::string saved; | 1651 | std::string saved; |
1581 | if(offline == IM_OFFLINE) | 1652 | if(offline == IM_OFFLINE) |
1582 | { | 1653 | { |
@@ -1794,6 +1865,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1794 | bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; | 1865 | bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; |
1795 | info->mType = (LLAssetType::EType) bucketp->asset_type; | 1866 | info->mType = (LLAssetType::EType) bucketp->asset_type; |
1796 | info->mObjectID = bucketp->object_id; | 1867 | info->mObjectID = bucketp->object_id; |
1868 | |||
1869 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
1870 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (gRlvHandler.isAgentNearby(from_id)) ) | ||
1871 | { | ||
1872 | name = gRlvHandler.getAnonym(name); | ||
1873 | } | ||
1874 | // [/RLVa:KB] | ||
1797 | } | 1875 | } |
1798 | else | 1876 | else |
1799 | { | 1877 | { |
@@ -1831,6 +1909,14 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1831 | } | 1909 | } |
1832 | else | 1910 | else |
1833 | { | 1911 | { |
1912 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-09-10 (RLVa-1.0.3a) | ||
1913 | if ( (rlv_handler_t::isEnabled()) && (dialog == IM_TASK_INVENTORY_OFFERED) && | ||
1914 | (info->mDesc.find(RLV_PUTINV_PREFIX) == 1) && (gRlvHandler.getSharedRoot()) ) | ||
1915 | { | ||
1916 | LLFirstUse::warnRlvGiveToRLV(); | ||
1917 | } | ||
1918 | // [/RLVa:KB] | ||
1919 | |||
1834 | inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED); | 1920 | inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED); |
1835 | } | 1921 | } |
1836 | } | 1922 | } |
@@ -1880,6 +1966,22 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1880 | return; | 1966 | return; |
1881 | } | 1967 | } |
1882 | 1968 | ||
1969 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
1970 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) ) | ||
1971 | { | ||
1972 | if (gAgent.isInGroup(session_id)) | ||
1973 | { | ||
1974 | if (!gRlvHandler.isException(RLV_BHVR_RECVIM, session_id)) | ||
1975 | return; | ||
1976 | } | ||
1977 | else | ||
1978 | { | ||
1979 | if ( (from_id != gAgent.getID()) && (!gRlvHandler.isException(RLV_BHVR_RECVIM, from_id)) ) | ||
1980 | message = message.substr(0, message_offset) + rlv_handler_t::cstrBlockedRecvIM; | ||
1981 | } | ||
1982 | } | ||
1983 | // [/RLVa:KB] | ||
1984 | |||
1883 | // standard message, not from system | 1985 | // standard message, not from system |
1884 | std::string saved; | 1986 | std::string saved; |
1885 | if(offline == IM_OFFLINE) | 1987 | if(offline == IM_OFFLINE) |
@@ -1915,12 +2017,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1915 | { | 2017 | { |
1916 | return; | 2018 | return; |
1917 | } | 2019 | } |
1918 | chat.mText = name + separator_string + message.substr(message_offset); | 2020 | chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset); |
1919 | chat.mFromName = name; | 2021 | chat.mFromName = name; |
1920 | 2022 | ||
1921 | // Build a link to open the object IM info window. | 2023 | // Build a link to open the object IM info window. |
1922 | std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size); | 2024 | std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size); |
1923 | 2025 | ||
1924 | LLSD query_string; | 2026 | LLSD query_string; |
1925 | query_string["owner"] = from_id; | 2027 | query_string["owner"] = from_id; |
1926 | query_string["slurl"] = location.c_str(); | 2028 | query_string["slurl"] = location.c_str(); |
@@ -1928,7 +2030,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1928 | if (from_group) | 2030 | if (from_group) |
1929 | { | 2031 | { |
1930 | query_string["groupowned"] = "true"; | 2032 | query_string["groupowned"] = "true"; |
1931 | } | 2033 | } |
1932 | 2034 | ||
1933 | if (session_id.notNull()) | 2035 | if (session_id.notNull()) |
1934 | { | 2036 | { |
@@ -1949,11 +2051,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1949 | << LLURI::mapToQueryString(query_string); | 2051 | << LLURI::mapToQueryString(query_string); |
1950 | 2052 | ||
1951 | chat.mURL = link.str(); | 2053 | chat.mURL = link.str(); |
1952 | chat.mText = name + separator_string + message.substr(message_offset); | 2054 | chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset); |
1953 | 2055 | ||
1954 | // Note: lie to LLFloaterChat::addChat(), pretending that this is NOT an IM, because | 2056 | // Note: lie to LLFloaterChat::addChat(), pretending that this is NOT an IM, because |
1955 | // IMs from objcts don't open IM sessions. | 2057 | // IMs from objcts don't open IM sessions. |
1956 | chat.mSourceType = CHAT_SOURCE_OBJECT; | 2058 | chat.mSourceType = CHAT_SOURCE_OBJECT_IM; |
1957 | LLFloaterChat::addChat(chat, FALSE, FALSE); | 2059 | LLFloaterChat::addChat(chat, FALSE, FALSE); |
1958 | } | 2060 | } |
1959 | break; | 2061 | break; |
@@ -1963,6 +2065,17 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) | |||
1963 | return; | 2065 | return; |
1964 | } | 2066 | } |
1965 | { | 2067 | { |
2068 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) | ||
2069 | // TODO-RLVa: what actually generates this? | ||
2070 | if (rlv_handler_t::isEnabled()) | ||
2071 | { | ||
2072 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
2073 | gRlvHandler.filterLocation(message); | ||
2074 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
2075 | gRlvHandler.filterNames(message); | ||
2076 | } | ||
2077 | // [/RLVa:KB] | ||
2078 | |||
1966 | // Construct a viewer alert for this message. | 2079 | // Construct a viewer alert for this message. |
1967 | args["NAME"] = name; | 2080 | args["NAME"] = name; |
1968 | args["MESSAGE"] = message; | 2081 | args["MESSAGE"] = message; |
@@ -2283,8 +2396,13 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2283 | chat.mPosAgent = chatter->getPositionAgent(); | 2396 | chat.mPosAgent = chatter->getPositionAgent(); |
2284 | 2397 | ||
2285 | // Make swirly things only for talking objects. (not script debug messages, though) | 2398 | // Make swirly things only for talking objects. (not script debug messages, though) |
2286 | if (chat.mSourceType == CHAT_SOURCE_OBJECT | 2399 | // if (chat.mSourceType == CHAT_SOURCE_OBJECT |
2287 | && chat.mChatType != CHAT_TYPE_DEBUG_MSG) | 2400 | // && chat.mChatType != CHAT_TYPE_DEBUG_MSG) |
2401 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
2402 | // Don't show swirly things for llOwnerSay() chat here because we handle those further down | ||
2403 | if ( (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) && | ||
2404 | ((!rlv_handler_t::isEnabled()) || (CHAT_TYPE_OWNER != chat.mChatType)) ) | ||
2405 | // [/RLVa:KB] | ||
2288 | { | 2406 | { |
2289 | LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); | 2407 | LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); |
2290 | psc->setSourceObject(chatter); | 2408 | psc->setSourceObject(chatter); |
@@ -2309,6 +2427,32 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2309 | is_owned_by_me = chatter->permYouOwner(); | 2427 | is_owned_by_me = chatter->permYouOwner(); |
2310 | } | 2428 | } |
2311 | 2429 | ||
2430 | if(chat.mSourceType == CHAT_SOURCE_OBJECT | ||
2431 | && chat.mChatType != CHAT_TYPE_DEBUG_MSG | ||
2432 | && !owner_id.isNull() | ||
2433 | && owner_id != gAgent.getID()) | ||
2434 | { | ||
2435 | std::string tempname = from_name; | ||
2436 | |||
2437 | size_t found = tempname.find(" "); | ||
2438 | while(found != std::string::npos) | ||
2439 | { | ||
2440 | tempname.replace(found, 1, ""); | ||
2441 | found = tempname.find(" "); | ||
2442 | } | ||
2443 | |||
2444 | if (tempname.length() < 1) | ||
2445 | { | ||
2446 | from_name = "no name"; | ||
2447 | chat.mFromName = from_name; | ||
2448 | } | ||
2449 | |||
2450 | // std::string ownername; | ||
2451 | // if(gCacheName->getFullName(owner_id,ownername)) | ||
2452 | // from_name += (" (" + ownername + ")"); | ||
2453 | chat.mURL = llformat("secondlife:///app/agent/%s/about",owner_id.asString().c_str()); | ||
2454 | } | ||
2455 | |||
2312 | if (is_audible) | 2456 | if (is_audible) |
2313 | { | 2457 | { |
2314 | BOOL visible_in_chat_bubble = FALSE; | 2458 | BOOL visible_in_chat_bubble = FALSE; |
@@ -2317,6 +2461,51 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2317 | color.setVec(1.f,1.f,1.f,1.f); | 2461 | color.setVec(1.f,1.f,1.f,1.f); |
2318 | msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg); | 2462 | msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg); |
2319 | 2463 | ||
2464 | // [RLVa:KB] - Checked: 2009-10-06 (RLVa-1.0.4d) | Modified: RLVa-1.0.4d | ||
2465 | if ( (rlv_handler_t::isEnabled()) && | ||
2466 | (CHAT_TYPE_START != chat.mChatType) && (CHAT_TYPE_STOP != chat.mChatType) && (CHAT_TYPE_OWNER != chat.mChatType) ) | ||
2467 | { | ||
2468 | // NOTE: chatter can be NULL (may not have rezzed yet, or could be another avie's HUD attachment) | ||
2469 | BOOL is_attachment = (chatter) ? chatter->isAttachment() : FALSE; | ||
2470 | |||
2471 | // Filtering "rules": | ||
2472 | // avatar => filter all avie text (unless it's this avie or they're an exemption) | ||
2473 | // objects => filter everything except attachments this avie owns | ||
2474 | if ( ( (CHAT_SOURCE_AGENT == chat.mSourceType) && (from_id != gAgent.getID()) ) || | ||
2475 | ( (CHAT_SOURCE_OBJECT == chat.mSourceType) && ((!is_owned_by_me) || (!is_attachment)) ) ) | ||
2476 | { | ||
2477 | if (!rlvIsEmote(mesg)) | ||
2478 | { | ||
2479 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_RECVCHAT)) && (!gRlvHandler.isException(RLV_BHVR_RECVCHAT, from_id)) ) | ||
2480 | gRlvHandler.filterChat(mesg, false); | ||
2481 | } | ||
2482 | else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_RECVEMOTE)) && (!gRlvHandler.isException(RLV_BHVR_RECVEMOTE, from_id)) ) | ||
2483 | { | ||
2484 | mesg = "/me ..."; | ||
2485 | } | ||
2486 | } | ||
2487 | |||
2488 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
2489 | { | ||
2490 | // Filtering "rules": | ||
2491 | // avatar => filter only their name (unless it's this avie) | ||
2492 | // other => filter everything except attachments this avie owns but then we still do filter their text | ||
2493 | if (CHAT_SOURCE_AGENT == chat.mSourceType) | ||
2494 | { | ||
2495 | if (chat.mFromID != gAgent.getID()) | ||
2496 | from_name = gRlvHandler.getAnonym(from_name); | ||
2497 | } | ||
2498 | else | ||
2499 | { | ||
2500 | if ( (!is_owned_by_me) || (!is_attachment) ) | ||
2501 | gRlvHandler.filterNames(from_name); | ||
2502 | gRlvHandler.filterNames(mesg); | ||
2503 | } | ||
2504 | chat.mRlvNamesFiltered = true; | ||
2505 | } | ||
2506 | } | ||
2507 | // [/RLVa:KB] | ||
2508 | |||
2320 | BOOL ircstyle = FALSE; | 2509 | BOOL ircstyle = FALSE; |
2321 | 2510 | ||
2322 | // Look for IRC-style emotes here so chatbubbles work | 2511 | // Look for IRC-style emotes here so chatbubbles work |
@@ -2342,6 +2531,12 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2342 | { | 2531 | { |
2343 | ((LLVOAvatar*)chatter)->startTyping(); | 2532 | ((LLVOAvatar*)chatter)->startTyping(); |
2344 | } | 2533 | } |
2534 | |||
2535 | if (LLFloaterMap::getInstance()) | ||
2536 | { | ||
2537 | LLFloaterMap::getInstance()->updateTypingList(from_id, false); | ||
2538 | } | ||
2539 | |||
2345 | return; | 2540 | return; |
2346 | } | 2541 | } |
2347 | else if (CHAT_TYPE_STOP == chat.mChatType) | 2542 | else if (CHAT_TYPE_STOP == chat.mChatType) |
@@ -2353,6 +2548,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2353 | { | 2548 | { |
2354 | ((LLVOAvatar*)chatter)->stopTyping(); | 2549 | ((LLVOAvatar*)chatter)->stopTyping(); |
2355 | } | 2550 | } |
2551 | |||
2552 | if (LLFloaterMap::getInstance()) | ||
2553 | { | ||
2554 | if (LLFloaterMap::getInstance()->isTyping(from_id)) | ||
2555 | { | ||
2556 | LLFloaterMap::getInstance()->updateTypingList(from_id, true); | ||
2557 | } | ||
2558 | } | ||
2559 | |||
2356 | return; | 2560 | return; |
2357 | } | 2561 | } |
2358 | 2562 | ||
@@ -2381,8 +2585,74 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
2381 | case CHAT_TYPE_WHISPER: | 2585 | case CHAT_TYPE_WHISPER: |
2382 | verb = " " + LLTrans::getString("whisper") + " "; | 2586 | verb = " " + LLTrans::getString("whisper") + " "; |
2383 | break; | 2587 | break; |
2384 | case CHAT_TYPE_DEBUG_MSG: | ||
2385 | case CHAT_TYPE_OWNER: | 2588 | case CHAT_TYPE_OWNER: |
2589 | // [RLVa:KB] - Checked: 2009-08-28 (RLVa-1.0.2a) | Modified: RLVa-1.0.2a | ||
2590 | if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) ) | ||
2591 | { | ||
2592 | mesg.erase(0, 1); | ||
2593 | LLStringUtil::toLower(mesg); | ||
2594 | |||
2595 | std::string strExecuted, strFailed, strRetained, *pstr; | ||
2596 | |||
2597 | boost_tokenizer tokens(mesg, boost::char_separator<char>(",", "", boost::drop_empty_tokens)); | ||
2598 | for (boost_tokenizer::const_iterator itToken = tokens.begin(); itToken != tokens.end(); ++itToken) | ||
2599 | { | ||
2600 | if (LLStartUp::getStartupState() == STATE_STARTED) | ||
2601 | { | ||
2602 | if (gRlvHandler.processCommand(from_id, *itToken, true)) | ||
2603 | pstr = &strExecuted; | ||
2604 | else | ||
2605 | pstr = &strFailed; | ||
2606 | } | ||
2607 | else | ||
2608 | { | ||
2609 | gRlvHandler.retainCommand(from_name, from_id, *itToken); | ||
2610 | pstr = &strRetained; | ||
2611 | } | ||
2612 | |||
2613 | if (!pstr->empty()) | ||
2614 | pstr->push_back(','); | ||
2615 | pstr->append(*itToken); | ||
2616 | } | ||
2617 | |||
2618 | if (!RlvSettings::getDebug()) | ||
2619 | return; | ||
2620 | |||
2621 | // Silly people want comprehensive debug messages, blah :p | ||
2622 | if ( (!strExecuted.empty()) && (strFailed.empty()) && (strRetained.empty()) ) | ||
2623 | verb = " executes: @"; | ||
2624 | else if ( (strExecuted.empty()) && (!strFailed.empty()) && (strRetained.empty()) ) | ||
2625 | verb = " failed: @"; | ||
2626 | else if ( (strExecuted.empty()) && (strFailed.empty()) && (!strRetained.empty()) ) | ||
2627 | verb = " retained: @"; | ||
2628 | else | ||
2629 | { | ||
2630 | verb = ": @"; | ||
2631 | if (!strExecuted.empty()) | ||
2632 | mesg += "\n - executed: @" + strExecuted; | ||
2633 | if (!strFailed.empty()) | ||
2634 | mesg += "\n - failed: @" + strFailed; | ||
2635 | if (!strRetained.empty()) | ||
2636 | mesg += "\n - retained: @" + strRetained; | ||
2637 | } | ||
2638 | |||
2639 | break; | ||
2640 | } | ||
2641 | // [/RLVa:KB] | ||
2642 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
2643 | // Copy/paste from above | ||
2644 | if ( (chatter) && (chat.mChatType != CHAT_TYPE_DEBUG_MSG) ) | ||
2645 | { | ||
2646 | LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); | ||
2647 | psc->setSourceObject(chatter); | ||
2648 | psc->setColor(color); | ||
2649 | //We set the particles to be owned by the object's owner, | ||
2650 | //just in case they should be muted by the mute list | ||
2651 | psc->setOwnerUUID(owner_id); | ||
2652 | LLViewerPartSim::getInstance()->addPartSource(psc); | ||
2653 | } | ||
2654 | // [/RLVa:KB] | ||
2655 | case CHAT_TYPE_DEBUG_MSG: | ||
2386 | case CHAT_TYPE_NORMAL: | 2656 | case CHAT_TYPE_NORMAL: |
2387 | verb = ": "; | 2657 | verb = ": "; |
2388 | break; | 2658 | break; |
@@ -2451,7 +2721,10 @@ void process_teleport_start(LLMessageSystem *msg, void**) | |||
2451 | U32 teleport_flags = 0x0; | 2721 | U32 teleport_flags = 0x0; |
2452 | msg->getU32("Info", "TeleportFlags", teleport_flags); | 2722 | msg->getU32("Info", "TeleportFlags", teleport_flags); |
2453 | 2723 | ||
2454 | if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) | 2724 | //if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) |
2725 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b | ||
2726 | if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) ) | ||
2727 | // [/RLVa:KB] | ||
2455 | { | 2728 | { |
2456 | gViewerWindow->setProgressCancelButtonVisible(FALSE); | 2729 | gViewerWindow->setProgressCancelButtonVisible(FALSE); |
2457 | } | 2730 | } |
@@ -2486,7 +2759,10 @@ void process_teleport_progress(LLMessageSystem* msg, void**) | |||
2486 | } | 2759 | } |
2487 | U32 teleport_flags = 0x0; | 2760 | U32 teleport_flags = 0x0; |
2488 | msg->getU32("Info", "TeleportFlags", teleport_flags); | 2761 | msg->getU32("Info", "TeleportFlags", teleport_flags); |
2489 | if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) | 2762 | //if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) |
2763 | // [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b | ||
2764 | if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) ) | ||
2765 | // [/RLVa:KB] | ||
2490 | { | 2766 | { |
2491 | gViewerWindow->setProgressCancelButtonVisible(FALSE); | 2767 | gViewerWindow->setProgressCancelButtonVisible(FALSE); |
2492 | } | 2768 | } |
@@ -2796,6 +3072,10 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) | |||
2796 | // appropriate. | 3072 | // appropriate. |
2797 | LLVector3 shift_vector = regionp->getPosRegionFromGlobal( | 3073 | LLVector3 shift_vector = regionp->getPosRegionFromGlobal( |
2798 | gAgent.getRegion()->getOriginGlobal()); | 3074 | gAgent.getRegion()->getOriginGlobal()); |
3075 | // don't shift objects, if teleporting more than about 1000 sims, as | ||
3076 | // for long teleports shifting objects garbles the view at the target region | ||
3077 | if (shift_vector.lengthSquared() > 6.5e10f) | ||
3078 | shift_vector = LLVector3::zero; | ||
2799 | gAgent.setRegion(regionp); | 3079 | gAgent.setRegion(regionp); |
2800 | gObjectList.shiftObjects(shift_vector); | 3080 | gObjectList.shiftObjects(shift_vector); |
2801 | gAssetStorage->setUpstream(msg->getSender()); | 3081 | gAssetStorage->setUpstream(msg->getSender()); |
@@ -2818,7 +3098,10 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) | |||
2818 | // know what you look like. | 3098 | // know what you look like. |
2819 | gAgent.sendAgentSetAppearance(); | 3099 | gAgent.sendAgentSetAppearance(); |
2820 | 3100 | ||
2821 | if (avatarp) | 3101 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) |
3102 | if ( (avatarp) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
3103 | // [/RLVa:KB] | ||
3104 | // if (avatarp) | ||
2822 | { | 3105 | { |
2823 | // Chat the "back" SLURL. (DEV-4907) | 3106 | // Chat the "back" SLURL. (DEV-4907) |
2824 | LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL()); | 3107 | LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL()); |
@@ -2898,6 +3181,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) | |||
2898 | 3181 | ||
2899 | // If the server version has changed, display an info box and offer | 3182 | // If the server version has changed, display an info box and offer |
2900 | // to display the release notes, unless this is the initial log in. | 3183 | // to display the release notes, unless this is the initial log in. |
3184 | // Also verify we're on an OpenSimulator here. | ||
2901 | if (gLastVersionChannel == version_channel) | 3185 | if (gLastVersionChannel == version_channel) |
2902 | { | 3186 | { |
2903 | return; | 3187 | return; |
@@ -2910,6 +3194,15 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) | |||
2910 | LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload); | 3194 | LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload); |
2911 | } | 3195 | } |
2912 | 3196 | ||
3197 | if (version_channel.find("OpenSim") != std::string::npos) | ||
3198 | { | ||
3199 | gSavedSettings.setBOOL("LoggedIntoOpenSim", TRUE); | ||
3200 | } | ||
3201 | else | ||
3202 | { | ||
3203 | gSavedSettings.setBOOL("LoggedIntoOpenSim", FALSE); | ||
3204 | } | ||
3205 | |||
2913 | gLastVersionChannel = version_channel; | 3206 | gLastVersionChannel = version_channel; |
2914 | } | 3207 | } |
2915 | 3208 | ||
@@ -4126,7 +4419,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) | |||
4126 | LLUUID tid; | 4419 | LLUUID tid; |
4127 | msg->getUUID("MoneyData", "TransactionID", tid); | 4420 | msg->getUUID("MoneyData", "TransactionID", tid); |
4128 | static std::deque<LLUUID> recent; | 4421 | static std::deque<LLUUID> recent; |
4129 | if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange") | 4422 | if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange") && !gDisconnected |
4130 | && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend())) | 4423 | && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend())) |
4131 | { | 4424 | { |
4132 | // Make the user confirm the transaction, since they might | 4425 | // Make the user confirm the transaction, since they might |
@@ -4537,7 +4830,13 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp | |||
4537 | if (viewregion) | 4830 | if (viewregion) |
4538 | { | 4831 | { |
4539 | // got the region, so include the region and 3d coordinates of the object | 4832 | // got the region, so include the region and 3d coordinates of the object |
4540 | notice.setArg("[REGIONNAME]", viewregion->getName()); | 4833 | notice.setArg("[REGIONNAME]", viewregion->getName()); |
4834 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | ||
4835 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
4836 | { | ||
4837 | notice.setArg("[REGIONNAME]", rlv_handler_t::cstrHiddenRegion); | ||
4838 | } | ||
4839 | // [/RLVa:KB] | ||
4541 | std::string formatpos = llformat("%.1f, %.1f,%.1f", objpos[VX], objpos[VY], objpos[VZ]); | 4840 | std::string formatpos = llformat("%.1f, %.1f,%.1f", objpos[VX], objpos[VY], objpos[VZ]); |
4542 | notice.setArg("[REGIONPOS]", formatpos); | 4841 | notice.setArg("[REGIONPOS]", formatpos); |
4543 | 4842 | ||
@@ -4749,8 +5048,31 @@ void process_script_question(LLMessageSystem *msg, void **user_data) | |||
4749 | payload["object_name"] = object_name; | 5048 | payload["object_name"] = object_name; |
4750 | payload["owner_name"] = owner_name; | 5049 | payload["owner_name"] = owner_name; |
4751 | 5050 | ||
5051 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0e | ||
5052 | S32 rlvQuestionsOther = questions; | ||
5053 | |||
5054 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTPERMISSION)) ) | ||
5055 | { | ||
5056 | LLViewerObject* pObj = gObjectList.findObject(taskid); | ||
5057 | if (pObj) | ||
5058 | { | ||
5059 | if (pObj->permYouOwner()) | ||
5060 | { | ||
5061 | // PERMISSION_TAKE_CONTROLS and PERMISSION_ATTACH are only auto-granted to objects this avie owns | ||
5062 | rlvQuestionsOther &= ~(LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TAKE_CONTROLS] | | ||
5063 | LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_ATTACH]); | ||
5064 | } | ||
5065 | } | ||
5066 | } | ||
5067 | |||
5068 | if ( (!caution) && (!rlvQuestionsOther) ) | ||
5069 | { | ||
5070 | script_question_cb(0, cbdata); | ||
5071 | } | ||
5072 | else if (gSavedSettings.getBOOL("PermissionsCautionEnabled")) | ||
5073 | // [/RLVa:KB] | ||
4752 | // check whether cautions are even enabled or not | 5074 | // check whether cautions are even enabled or not |
4753 | if (gSavedSettings.getBOOL("PermissionsCautionEnabled")) | 5075 | //if (gSavedSettings.getBOOL("PermissionsCautionEnabled")) |
4754 | { | 5076 | { |
4755 | // display the caution permissions prompt | 5077 | // display the caution permissions prompt |
4756 | LLNotifications::instance().add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload); | 5078 | LLNotifications::instance().add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload); |
@@ -5081,6 +5403,21 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response) | |||
5081 | 5403 | ||
5082 | if(0 == option) | 5404 | if(0 == option) |
5083 | { | 5405 | { |
5406 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0b | ||
5407 | bool fRlvCensorMessage = false; | ||
5408 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) | ||
5409 | { | ||
5410 | for (LLDynamicArray<LLUUID>::iterator it = invitees->begin(); it != invitees->end(); ++it) | ||
5411 | { | ||
5412 | if (!gRlvHandler.isException(RLV_BHVR_SENDIM, *it)) | ||
5413 | { | ||
5414 | fRlvCensorMessage = true; | ||
5415 | break; | ||
5416 | } | ||
5417 | } | ||
5418 | } | ||
5419 | // [/RLVa:KB] | ||
5420 | |||
5084 | LLMessageSystem* msg = gMessageSystem; | 5421 | LLMessageSystem* msg = gMessageSystem; |
5085 | msg->newMessageFast(_PREHASH_StartLure); | 5422 | msg->newMessageFast(_PREHASH_StartLure); |
5086 | msg->nextBlockFast(_PREHASH_AgentData); | 5423 | msg->nextBlockFast(_PREHASH_AgentData); |
@@ -5088,7 +5425,10 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response) | |||
5088 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | 5425 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); |
5089 | msg->nextBlockFast(_PREHASH_Info); | 5426 | msg->nextBlockFast(_PREHASH_Info); |
5090 | msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in. | 5427 | msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in. |
5091 | msg->addStringFast(_PREHASH_Message, text); | 5428 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0b |
5429 | msg->addStringFast(_PREHASH_Message, (!fRlvCensorMessage) ? text : rlv_handler_t::cstrHidden); | ||
5430 | // [/RLVa:KB] | ||
5431 | //msg->addStringFast(_PREHASH_Message, text); | ||
5092 | for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray(); | 5432 | for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray(); |
5093 | it != notification["payload"]["ids"].endArray(); | 5433 | it != notification["payload"]["ids"].endArray(); |
5094 | ++it) | 5434 | ++it) |
@@ -5266,6 +5606,35 @@ void process_script_dialog(LLMessageSystem* msg, void**) | |||
5266 | msg->getString("Data", "Message", message); | 5606 | msg->getString("Data", "Message", message); |
5267 | msg->getS32("Data", "ChatChannel", chat_channel); | 5607 | msg->getS32("Data", "ChatChannel", chat_channel); |
5268 | 5608 | ||
5609 | // Don't show lldialog boxes from muted avs -- McCabe | ||
5610 | std::string agent_name = first_name + " " + last_name; | ||
5611 | if (!last_name.empty()) | ||
5612 | { | ||
5613 | std::vector<LLMute> mutes = LLMuteList::getInstance()->getMutes(); | ||
5614 | for (U32 i = 0; i < mutes.size(); i++) | ||
5615 | { | ||
5616 | //this is almost like saying (mutes[i].mType != LLMute::Object), but more verbose ... -Kaku | ||
5617 | if ( | ||
5618 | ((mutes[i].mType == LLMute::AGENT) | ||
5619 | && (mutes[i].mName == agent_name)) | ||
5620 | || ((mutes[i].mType == LLMute::GROUP) | ||
5621 | && (mutes[i].mName == last_name)) | ||
5622 | || ((mutes[i].mType == LLMute::BY_NAME) | ||
5623 | //don't mute groups by name in case a group has a last name as a group name. | ||
5624 | && ((mutes[i].mName == agent_name))) | ||
5625 | ) | ||
5626 | { | ||
5627 | delete info; | ||
5628 | return; | ||
5629 | } | ||
5630 | } | ||
5631 | } | ||
5632 | // or Scriptdialog boxes from muted objects -- Kakurady | ||
5633 | if (LLMuteList::getInstance()->isMuted(info->mObjectID, title)){ | ||
5634 | delete info; | ||
5635 | return; | ||
5636 | } | ||
5637 | |||
5269 | // unused for now | 5638 | // unused for now |
5270 | LLUUID image_id; | 5639 | LLUUID image_id; |
5271 | msg->getUUID("Data", "ImageID", image_id); | 5640 | msg->getUUID("Data", "ImageID", image_id); |
@@ -5296,6 +5665,45 @@ void process_script_dialog(LLMessageSystem* msg, void**) | |||
5296 | LLNotificationPtr notification; | 5665 | LLNotificationPtr notification; |
5297 | if (!first_name.empty()) | 5666 | if (!first_name.empty()) |
5298 | { | 5667 | { |
5668 | // Dialog Spam Prevention by Cryogenic | ||
5669 | if(dialogSpamOn) | ||
5670 | { | ||
5671 | if(!d_spam.getStarted()) | ||
5672 | { | ||
5673 | d_spam.start(); | ||
5674 | } | ||
5675 | if(blacklisted_names.find(agent_name) != -1) | ||
5676 | { | ||
5677 | return; | ||
5678 | } | ||
5679 | std::map< std::string , S32 >::iterator itr = lastd_names.find(agent_name); | ||
5680 | if(itr != lastd_names.end()) | ||
5681 | { | ||
5682 | if(d_spam.getElapsedTimeF32() <= gSavedSettings.getF32("SpamTime")) | ||
5683 | { | ||
5684 | if((*itr).second > gSavedSettings.getF32("SpamCount")) | ||
5685 | { | ||
5686 | blacklisted_names.put(agent_name); | ||
5687 | LL_INFOS("process_script_dialog") << "blocked " << info->mObjectID.asString() << " owned by " << agent_name << LL_ENDL;//" (" << key.asString() << ")" <<LL_ENDL; | ||
5688 | return; | ||
5689 | } | ||
5690 | else | ||
5691 | { | ||
5692 | (*itr).second++; | ||
5693 | } | ||
5694 | } | ||
5695 | else | ||
5696 | { | ||
5697 | lastd_names.erase(lastd_names.begin(),lastd_names.end()); | ||
5698 | d_spam.reset(); | ||
5699 | } | ||
5700 | } | ||
5701 | else | ||
5702 | { | ||
5703 | //llinfos << "Added " << fullname << " to list" << llendl; | ||
5704 | lastd_names[agent_name] = 0; | ||
5705 | } | ||
5706 | } | ||
5299 | args["FIRST"] = first_name; | 5707 | args["FIRST"] = first_name; |
5300 | args["LAST"] = last_name; | 5708 | args["LAST"] = last_name; |
5301 | notification = LLNotifications::instance().add( | 5709 | notification = LLNotifications::instance().add( |
diff --git a/linden/indra/newview/llviewermessage.h b/linden/indra/newview/llviewermessage.h index e7a4303..c920f85 100644 --- a/linden/indra/newview/llviewermessage.h +++ b/linden/indra/newview/llviewermessage.h | |||
@@ -37,7 +37,7 @@ | |||
37 | #include "lltransactiontypes.h" | 37 | #include "lltransactiontypes.h" |
38 | #include "lluuid.h" | 38 | #include "lluuid.h" |
39 | #include "stdenums.h" | 39 | #include "stdenums.h" |
40 | 40 | #include "llfloaterbump.h" | |
41 | // | 41 | // |
42 | // Forward declarations | 42 | // Forward declarations |
43 | // | 43 | // |
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp index 8608b34..c1d5013 100644 --- a/linden/indra/newview/llviewernetwork.cpp +++ b/linden/indra/newview/llviewernetwork.cpp | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * $LicenseInfo:firstyear=2006&license=viewergpl$ | 6 | * $LicenseInfo:firstyear=2006&license=viewergpl$ |
7 | * | 7 | * |
8 | * Copyright (c) 2006-2009, Linden Research, Inc. | 8 | * Copyright (c) 2006-2008, Linden Research, Inc. |
9 | * | 9 | * |
10 | * Second Life Viewer Source Code | 10 | * Second Life Viewer Source Code |
11 | * The source code in this file ("Source Code") is provided by Linden Lab | 11 | * The source code in this file ("Source Code") is provided by Linden Lab |
@@ -35,158 +35,19 @@ | |||
35 | 35 | ||
36 | #include "llviewernetwork.h" | 36 | #include "llviewernetwork.h" |
37 | #include "llviewercontrol.h" | 37 | #include "llviewercontrol.h" |
38 | #include "llstartup.h" | ||
38 | 39 | ||
39 | struct LLGridData | 40 | #include "hippoGridManager.h" |
40 | { | ||
41 | const char* mLabel; | ||
42 | const char* mCodeName; | ||
43 | const char* mName; | ||
44 | const char* mLoginURI; | ||
45 | const char* mHelperURI; | ||
46 | }; | ||
47 | |||
48 | static LLGridData gGridInfo[GRID_INFO_COUNT] = | ||
49 | { | ||
50 | { "None", "", "", "", "" }, | ||
51 | { "SL Main Grid", | ||
52 | "Agni", | ||
53 | "util.agni.lindenlab.com", | ||
54 | "https://login.agni.lindenlab.com/cgi-bin/login.cgi", | ||
55 | "https://secondlife.com/helpers/" }, | ||
56 | { "SL Beta Grid", | ||
57 | "Aditi", | ||
58 | "util.aditi.lindenlab.com", | ||
59 | "https://login.aditi.lindenlab.com/cgi-bin/login.cgi", | ||
60 | "http://aditi-secondlife.webdev.lindenlab.com/helpers/" }, | ||
61 | { "Local OpenSim", | ||
62 | "", | ||
63 | "localhost", | ||
64 | "http://127.0.0.1:9000", | ||
65 | "" }, | ||
66 | { "Other", "", "", "", "" } | ||
67 | }; | ||
68 | |||
69 | const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI; | ||
70 | 41 | ||
71 | 42 | ||
72 | unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ | 43 | unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ |
73 | 44 | ||
74 | LLViewerLogin::LLViewerLogin() : | ||
75 | mGridChoice(DEFAULT_GRID_CHOICE) | ||
76 | { | ||
77 | } | ||
78 | |||
79 | void LLViewerLogin::setGridChoice(EGridInfo grid) | ||
80 | { | ||
81 | if(grid < 0 || grid >= GRID_INFO_COUNT) | ||
82 | { | ||
83 | llerrs << "Invalid grid index specified." << llendl; | ||
84 | } | ||
85 | |||
86 | if(mGridChoice != grid || gSavedSettings.getS32("ServerChoice") != grid) | ||
87 | { | ||
88 | mGridChoice = grid; | ||
89 | if(GRID_INFO_LOCAL == mGridChoice) | ||
90 | { | ||
91 | mGridName = LOOPBACK_ADDRESS_STRING; | ||
92 | } | ||
93 | else if(GRID_INFO_OTHER == mGridChoice) | ||
94 | { | ||
95 | // *FIX:Mani - could this possibly be valid? | ||
96 | mGridName = "other"; | ||
97 | } | ||
98 | else | ||
99 | { | ||
100 | mGridName = gGridInfo[mGridChoice].mLabel; | ||
101 | } | ||
102 | |||
103 | gSavedSettings.setS32("ServerChoice", mGridChoice); | ||
104 | gSavedSettings.setString("CustomServer", ""); | ||
105 | } | ||
106 | } | ||
107 | |||
108 | void LLViewerLogin::setGridChoice(const std::string& grid_name) | ||
109 | { | ||
110 | // Set the grid choice based on a string. | ||
111 | // The string can be: | ||
112 | // - a grid label from the gGridInfo table | ||
113 | // - an ip address | ||
114 | if(!grid_name.empty()) | ||
115 | { | ||
116 | // find the grid choice from the user setting. | ||
117 | int grid_index = GRID_INFO_NONE; | ||
118 | for(;grid_index < GRID_INFO_OTHER; ++grid_index) | ||
119 | { | ||
120 | if(0 == LLStringUtil::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name)) | ||
121 | { | ||
122 | // Founding a matching label in the list... | ||
123 | setGridChoice((EGridInfo)grid_index); | ||
124 | break; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | if(GRID_INFO_OTHER == grid_index) | ||
129 | { | ||
130 | // *FIX:MEP Can and should we validate that this is an IP address? | ||
131 | mGridChoice = GRID_INFO_OTHER; | ||
132 | mGridName = grid_name; | ||
133 | gSavedSettings.setS32("ServerChoice", mGridChoice); | ||
134 | gSavedSettings.setString("CustomServer", mGridName); | ||
135 | } | ||
136 | } | ||
137 | } | ||
138 | |||
139 | void LLViewerLogin::resetURIs() | ||
140 | { | ||
141 | // Clear URIs when picking a new server | ||
142 | gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray()); | ||
143 | gSavedSettings.setString("CmdLineHelperURI", ""); | ||
144 | } | ||
145 | |||
146 | EGridInfo LLViewerLogin::getGridChoice() const | ||
147 | { | ||
148 | return mGridChoice; | ||
149 | } | ||
150 | |||
151 | std::string LLViewerLogin::getGridLabel() const | ||
152 | { | ||
153 | if(mGridChoice == GRID_INFO_NONE) | ||
154 | { | ||
155 | return "None"; | ||
156 | } | ||
157 | else if(mGridChoice < GRID_INFO_OTHER) | ||
158 | { | ||
159 | return gGridInfo[mGridChoice].mLabel; | ||
160 | } | ||
161 | |||
162 | return mGridName; | ||
163 | } | ||
164 | |||
165 | std::string LLViewerLogin::getGridCodeName() const | ||
166 | { | ||
167 | // Fall back to grid label if code name is empty. | ||
168 | if( strcmp(gGridInfo[mGridChoice].mCodeName, "") == 0 ) | ||
169 | { | ||
170 | return getGridLabel(); | ||
171 | } | ||
172 | |||
173 | return gGridInfo[mGridChoice].mCodeName; | ||
174 | } | ||
175 | |||
176 | std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const | ||
177 | { | ||
178 | if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER) | ||
179 | { | ||
180 | return gGridInfo[grid_index].mLabel; | ||
181 | } | ||
182 | return gGridInfo[GRID_INFO_NONE].mLabel; | ||
183 | } | ||
184 | 45 | ||
185 | void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const | 46 | void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const |
186 | { | 47 | { |
187 | // return the login uri set on the command line. | 48 | // return the login uri set on the command line. |
188 | LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI"); | 49 | LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI"); |
189 | if(c) | 50 | if(c && !LLStartUp::shouldAutoLogin()) |
190 | { | 51 | { |
191 | LLSD v = c->getValue(); | 52 | LLSD v = c->getValue(); |
192 | if(v.isArray()) | 53 | if(v.isArray()) |
@@ -210,10 +71,12 @@ void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const | |||
210 | } | 71 | } |
211 | } | 72 | } |
212 | } | 73 | } |
213 | 74 | ||
214 | // If there was no command line uri... | 75 | // If there was no command line uri... |
215 | if(uris.empty()) | 76 | if(uris.empty()) |
216 | { | 77 | { |
78 | uris.push_back(gHippoGridManager->getConnectedGrid()->getLoginUri()); | ||
79 | /* | ||
217 | // If its a known grid choice, get the uri from the table, | 80 | // If its a known grid choice, get the uri from the table, |
218 | // else try the grid name. | 81 | // else try the grid name. |
219 | if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER) | 82 | if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER) |
@@ -223,44 +86,36 @@ void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const | |||
223 | else | 86 | else |
224 | { | 87 | { |
225 | uris.push_back(mGridName); | 88 | uris.push_back(mGridName); |
226 | } | 89 | } */ |
227 | } | 90 | } |
228 | } | 91 | } |
229 | 92 | ||
230 | std::string LLViewerLogin::getHelperURI() const | 93 | const std::string &LLViewerLogin::getGridLabel() const |
231 | { | 94 | { |
232 | std::string helper_uri = gSavedSettings.getString("CmdLineHelperURI"); | 95 | return gHippoGridManager->getConnectedGrid()->getGridNick(); |
233 | if (helper_uri.empty()) | 96 | } |
234 | { | ||
235 | // grab URI from selected grid | ||
236 | if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER) | ||
237 | { | ||
238 | helper_uri = gGridInfo[mGridChoice].mHelperURI; | ||
239 | } | ||
240 | 97 | ||
241 | if (helper_uri.empty()) | 98 | const std::string &LLViewerLogin::getLoginPage() const |
242 | { | 99 | { |
243 | // what do we do with unnamed/miscellaneous grids? | 100 | return gHippoGridManager->getConnectedGrid()->getLoginPage(); |
244 | // for now, operations that rely on the helper URI (currency/land purchasing) will fail | ||
245 | } | ||
246 | } | ||
247 | return helper_uri; | ||
248 | } | 101 | } |
249 | 102 | ||
250 | bool LLViewerLogin::isInProductionGrid() | 103 | const std::string &LLViewerLogin::getHelperURI() const |
251 | { | 104 | { |
252 | // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice, | 105 | return gHippoGridManager->getConnectedGrid()->getHelperUri(); |
253 | // but it seems that loginURI trumps that. | 106 | } |
254 | std::vector<std::string> uris; | 107 | |
255 | getLoginURIs(uris); | 108 | bool LLViewerLogin::isOpenSimulator() |
256 | LLStringUtil::toLower(uris[0]); | 109 | { |
110 | return gHippoGridManager->getConnectedGrid()->isOpenSimulator(); | ||
111 | } | ||
257 | 112 | ||
258 | // Returns true for every grid but Aditi now, | 113 | bool LLViewerLogin::isSecondLife() |
259 | // because opensim grids have feelings too! -- McCabe | 114 | { |
260 | if((uris[0].find("aditi") != std::string::npos)) | 115 | return gHippoGridManager->getConnectedGrid()->isSecondLife(); |
261 | { | 116 | } |
262 | return false; | ||
263 | } | ||
264 | 117 | ||
118 | bool LLViewerLogin::isInProductionGrid() | ||
119 | { | ||
265 | return true; | 120 | return true; |
266 | } | 121 | } |
diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h index 45d19d6..fd1a34b 100644 --- a/linden/indra/newview/llviewernetwork.h +++ b/linden/indra/newview/llviewernetwork.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * $LicenseInfo:firstyear=2006&license=viewergpl$ | 6 | * $LicenseInfo:firstyear=2006&license=viewergpl$ |
7 | * | 7 | * |
8 | * Copyright (c) 2006-2009, Linden Research, Inc. | 8 | * Copyright (c) 2006-2008, Linden Research, Inc. |
9 | * | 9 | * |
10 | * Second Life Viewer Source Code | 10 | * Second Life Viewer Source Code |
11 | * The source code in this file ("Source Code") is provided by Linden Lab | 11 | * The source code in this file ("Source Code") is provided by Linden Lab |
@@ -30,21 +30,9 @@ | |||
30 | * COMPLETENESS OR PERFORMANCE. | 30 | * COMPLETENESS OR PERFORMANCE. |
31 | * $/LicenseInfo$ | 31 | * $/LicenseInfo$ |
32 | */ | 32 | */ |
33 | |||
34 | #ifndef LL_LLVIEWERNETWORK_H | 33 | #ifndef LL_LLVIEWERNETWORK_H |
35 | #define LL_LLVIEWERNETWORK_H | 34 | #define LL_LLVIEWERNETWORK_H |
36 | 35 | ||
37 | class LLHost; | ||
38 | |||
39 | enum EGridInfo | ||
40 | { | ||
41 | GRID_INFO_NONE, | ||
42 | GRID_INFO_AGNI, | ||
43 | GRID_INFO_ADITI, | ||
44 | GRID_INFO_LOCAL, | ||
45 | GRID_INFO_OTHER, // IP address set via command line option | ||
46 | GRID_INFO_COUNT | ||
47 | }; | ||
48 | 36 | ||
49 | /** | 37 | /** |
50 | * @brief A class to manage the viewer's login state. | 38 | * @brief A class to manage the viewer's login state. |
@@ -53,53 +41,20 @@ enum EGridInfo | |||
53 | class LLViewerLogin : public LLSingleton<LLViewerLogin> | 41 | class LLViewerLogin : public LLSingleton<LLViewerLogin> |
54 | { | 42 | { |
55 | public: | 43 | public: |
56 | LLViewerLogin(); | ||
57 | |||
58 | void setGridChoice(EGridInfo grid); | ||
59 | void setGridChoice(const std::string& grid_name); | ||
60 | void resetURIs(); | ||
61 | |||
62 | /** | ||
63 | * @brief Get the enumeration of the grid choice. | ||
64 | * Should only return values > 0 && < GRID_INFO_COUNT | ||
65 | **/ | ||
66 | EGridInfo getGridChoice() const; | ||
67 | |||
68 | /** | ||
69 | * @brief Get a readable label for the grid choice. | ||
70 | * Returns the readable name for the grid choice. | ||
71 | * If the grid is 'other', returns something | ||
72 | * the string used to specifiy the grid. | ||
73 | **/ | ||
74 | std::string getGridLabel() const; | ||
75 | |||
76 | /** | ||
77 | * @brief Get the code name for the grid choice. | ||
78 | * | ||
79 | * Returns the code name for the grid choice, as designated | ||
80 | * by Linden Lab. The SL main grid is Agni, and the beta | ||
81 | * grid is Aditi. There are other LL testing grids with code | ||
82 | * names, but we don't care about those. | ||
83 | * | ||
84 | * This string is used primarily for fetching the proper | ||
85 | * login splash page, since the web server expects "Agni" | ||
86 | * and "Aditi", not "SL Main Grid" and "SL Beta Grid". | ||
87 | */ | ||
88 | std::string getGridCodeName() const; | ||
89 | |||
90 | std::string getKnownGridLabel(EGridInfo grid_index) const; | ||
91 | |||
92 | void getLoginURIs(std::vector<std::string>& uris) const; | 44 | void getLoginURIs(std::vector<std::string>& uris) const; |
93 | std::string getHelperURI() const; | 45 | const std::string &getGridLabel() const; |
46 | const std::string &getLoginPage() const; | ||
47 | const std::string &getHelperURI() const; | ||
94 | 48 | ||
95 | bool isInProductionGrid(); | 49 | bool isOpenSimulator(); |
50 | bool isSecondLife(); | ||
96 | 51 | ||
97 | private: | 52 | bool isInProductionGrid(); |
98 | EGridInfo mGridChoice; | ||
99 | std::string mGridName; | ||
100 | }; | 53 | }; |
101 | 54 | ||
55 | |||
102 | const S32 MAC_ADDRESS_BYTES = 6; | 56 | const S32 MAC_ADDRESS_BYTES = 6; |
103 | extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ | 57 | extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ |
104 | 58 | ||
59 | |||
105 | #endif | 60 | #endif |
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp index 6591cd3..51908a5 100644 --- a/linden/indra/newview/llviewerobject.cpp +++ b/linden/indra/newview/llviewerobject.cpp | |||
@@ -1007,6 +1007,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, | |||
1007 | coloru.mV[3] = 255 - coloru.mV[3]; | 1007 | coloru.mV[3] = 255 - coloru.mV[3]; |
1008 | mText->setColor(LLColor4(coloru)); | 1008 | mText->setColor(LLColor4(coloru)); |
1009 | mText->setStringUTF8(temp_string); | 1009 | mText->setStringUTF8(temp_string); |
1010 | // [RLVa:KB] - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
1011 | if (rlv_handler_t::isEnabled()) | ||
1012 | { | ||
1013 | mText->setObjectText(temp_string); | ||
1014 | } | ||
1015 | // [/RLVa:KB] | ||
1010 | 1016 | ||
1011 | if (mDrawable.notNull()) | 1017 | if (mDrawable.notNull()) |
1012 | { | 1018 | { |
@@ -1424,6 +1430,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, | |||
1424 | coloru.mV[3] = 255 - coloru.mV[3]; | 1430 | coloru.mV[3] = 255 - coloru.mV[3]; |
1425 | mText->setColor(LLColor4(coloru)); | 1431 | mText->setColor(LLColor4(coloru)); |
1426 | mText->setStringUTF8(temp_string); | 1432 | mText->setStringUTF8(temp_string); |
1433 | // [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
1434 | if (rlv_handler_t::isEnabled()) | ||
1435 | { | ||
1436 | mText->setObjectText(temp_string); | ||
1437 | } | ||
1438 | // [/RLVa:KB] | ||
1427 | 1439 | ||
1428 | setChanged(TEXTURE); | 1440 | setChanged(TEXTURE); |
1429 | } | 1441 | } |
@@ -4820,7 +4832,10 @@ BOOL LLViewerObject::permTransfer() const | |||
4820 | // given you modify rights to. JC | 4832 | // given you modify rights to. JC |
4821 | BOOL LLViewerObject::allowOpen() const | 4833 | BOOL LLViewerObject::allowOpen() const |
4822 | { | 4834 | { |
4823 | return !flagInventoryEmpty() && (permYouOwner() || permModify()); | 4835 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0b) |
4836 | return !flagInventoryEmpty() && (permYouOwner() || permModify()) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)); | ||
4837 | // [/RLVa:KB] | ||
4838 | // return !flagInventoryEmpty() && (permYouOwner() || permModify()); | ||
4824 | } | 4839 | } |
4825 | 4840 | ||
4826 | LLViewerObject::LLInventoryCallbackInfo::~LLInventoryCallbackInfo() | 4841 | LLViewerObject::LLInventoryCallbackInfo::~LLInventoryCallbackInfo() |
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h index db69399..633e0eb 100644 --- a/linden/indra/newview/llviewerobject.h +++ b/linden/indra/newview/llviewerobject.h | |||
@@ -50,6 +50,7 @@ | |||
50 | #include "v3dmath.h" | 50 | #include "v3dmath.h" |
51 | #include "v3math.h" | 51 | #include "v3math.h" |
52 | #include "llvertexbuffer.h" | 52 | #include "llvertexbuffer.h" |
53 | #include "llpartdata.h" | ||
53 | 54 | ||
54 | class LLAgent; // TODO: Get rid of this. | 55 | class LLAgent; // TODO: Get rid of this. |
55 | class LLAudioSource; | 56 | class LLAudioSource; |
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp index 4961f48..059925e 100644 --- a/linden/indra/newview/llviewerobjectlist.cpp +++ b/linden/indra/newview/llviewerobjectlist.cpp | |||
@@ -75,6 +75,8 @@ | |||
75 | 75 | ||
76 | #include "llappviewer.h" | 76 | #include "llappviewer.h" |
77 | 77 | ||
78 | #include "primbackup.h" | ||
79 | |||
78 | extern F32 gMinObjectDistance; | 80 | extern F32 gMinObjectDistance; |
79 | extern BOOL gAnimateTextures; | 81 | extern BOOL gAnimateTextures; |
80 | 82 | ||
@@ -164,7 +166,7 @@ U64 LLViewerObjectList::getIndex(const U32 local_id, | |||
164 | 166 | ||
165 | BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) | 167 | BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) |
166 | { | 168 | { |
167 | if(object.getRegion()) | 169 | if (object.mRegionp) |
168 | { | 170 | { |
169 | U32 local_id = object.mLocalID; | 171 | U32 local_id = object.mLocalID; |
170 | LLHost region_host = object.getRegion()->getHost(); | 172 | LLHost region_host = object.getRegion()->getHost(); |
@@ -176,8 +178,7 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) | |||
176 | U64 indexid = (((U64)index) << 32) | (U64)local_id; | 178 | U64 indexid = (((U64)index) << 32) | (U64)local_id; |
177 | return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE; | 179 | return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE; |
178 | } | 180 | } |
179 | 181 | return FALSE; | |
180 | return FALSE ; | ||
181 | } | 182 | } |
182 | 183 | ||
183 | void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id, | 184 | void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id, |
@@ -223,6 +224,11 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp, | |||
223 | 224 | ||
224 | updateActive(objectp); | 225 | updateActive(objectp); |
225 | 226 | ||
227 | if(!just_created) | ||
228 | primbackup::getInstance()->prim_update(objectp); | ||
229 | |||
230 | |||
231 | |||
226 | if (just_created) | 232 | if (just_created) |
227 | { | 233 | { |
228 | gPipeline.addObject(objectp); | 234 | gPipeline.addObject(objectp); |
@@ -252,6 +258,9 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp, | |||
252 | objectp->mCreateSelected = false; | 258 | objectp->mCreateSelected = false; |
253 | gViewerWindow->getWindow()->decBusyCount(); | 259 | gViewerWindow->getWindow()->decBusyCount(); |
254 | gViewerWindow->getWindow()->setCursor( UI_CURSOR_ARROW ); | 260 | gViewerWindow->getWindow()->setCursor( UI_CURSOR_ARROW ); |
261 | |||
262 | primbackup::getInstance()->newprim(objectp); | ||
263 | |||
255 | } | 264 | } |
256 | } | 265 | } |
257 | 266 | ||
@@ -828,17 +837,10 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep) | |||
828 | 837 | ||
829 | for (S32 i = 0; i < drawablep->getNumFaces(); i++) | 838 | for (S32 i = 0; i < drawablep->getNumFaces(); i++) |
830 | { | 839 | { |
831 | LLFace* facep = drawablep->getFace(i) ; | 840 | LLViewerObject* objectp = drawablep->getFace(i)->getViewerObject(); |
832 | if(facep) | ||
833 | { | ||
834 | LLViewerObject* objectp = facep->getViewerObject(); | ||
835 | if(objectp) | ||
836 | { | ||
837 | mSelectPickList.erase(objectp); | 841 | mSelectPickList.erase(objectp); |
838 | } | 842 | } |
839 | } | 843 | } |
840 | } | ||
841 | } | ||
842 | 844 | ||
843 | BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) | 845 | BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) |
844 | { | 846 | { |
@@ -915,7 +917,7 @@ void LLViewerObjectList::killAllObjects() | |||
915 | if (!mMapObjects.empty()) | 917 | if (!mMapObjects.empty()) |
916 | { | 918 | { |
917 | llwarns << "Some objects still on map object list!" << llendl; | 919 | llwarns << "Some objects still on map object list!" << llendl; |
918 | mMapObjects.clear(); | 920 | mActiveObjects.clear(); |
919 | } | 921 | } |
920 | } | 922 | } |
921 | 923 | ||
diff --git a/linden/indra/newview/llviewerobjectlist.h b/linden/indra/newview/llviewerobjectlist.h index ba31f70..721bab1 100644 --- a/linden/indra/newview/llviewerobjectlist.h +++ b/linden/indra/newview/llviewerobjectlist.h | |||
@@ -44,6 +44,7 @@ | |||
44 | // project includes | 44 | // project includes |
45 | #include "llviewerobject.h" | 45 | #include "llviewerobject.h" |
46 | 46 | ||
47 | class LLCamera; | ||
47 | class LLNetMap; | 48 | class LLNetMap; |
48 | class LLDebugBeacon; | 49 | class LLDebugBeacon; |
49 | 50 | ||
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp index 0a01e23..19b646c 100644 --- a/linden/indra/newview/llviewerregion.cpp +++ b/linden/indra/newview/llviewerregion.cpp | |||
@@ -887,10 +887,12 @@ bool LLViewerRegion::isAlive() | |||
887 | 887 | ||
888 | BOOL LLViewerRegion::isOwnedSelf(const LLVector3& pos) | 888 | BOOL LLViewerRegion::isOwnedSelf(const LLVector3& pos) |
889 | { | 889 | { |
890 | if (mParcelOverlay) | 890 | if (mParcelOverlay && !gDisconnected) |
891 | { | 891 | { |
892 | return mParcelOverlay->isOwnedSelf(pos); | 892 | return mParcelOverlay->isOwnedSelf(pos); |
893 | } else { | 893 | } |
894 | else | ||
895 | { | ||
894 | return FALSE; | 896 | return FALSE; |
895 | } | 897 | } |
896 | } | 898 | } |
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp index 46908f5..5e131b9 100644 --- a/linden/indra/newview/llviewertexteditor.cpp +++ b/linden/indra/newview/llviewertexteditor.cpp | |||
@@ -96,6 +96,13 @@ public: | |||
96 | } | 96 | } |
97 | else | 97 | else |
98 | { | 98 | { |
99 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
100 | if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) ) | ||
101 | { | ||
102 | return; | ||
103 | } | ||
104 | // [/RLVa:KB] | ||
105 | |||
99 | // See if we can bring an existing preview to the front | 106 | // See if we can bring an existing preview to the front |
100 | if(!LLPreview::show(item->getUUID(), true)) | 107 | if(!LLPreview::show(item->getUUID(), true)) |
101 | { | 108 | { |
@@ -896,51 +903,9 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask) | |||
896 | 903 | ||
897 | BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) | 904 | BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) |
898 | { | 905 | { |
899 | BOOL handled = FALSE; | 906 | BOOL handled = FALSE; |
900 | |||
901 | // let scrollbar have first dibs | ||
902 | handled = LLView::childrenHandleMouseUp(x, y, mask) != NULL; | ||
903 | |||
904 | // Used to enable I Agree checkbox if the user scrolled through entire text | ||
905 | BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax()); | ||
906 | if (mOnScrollEndCallback && was_scrolled_to_bottom) | ||
907 | { | ||
908 | mOnScrollEndCallback(mOnScrollEndData); | ||
909 | } | ||
910 | |||
911 | if( !handled && mTakesNonScrollClicks) | ||
912 | { | ||
913 | if( mIsSelecting ) | ||
914 | { | ||
915 | // Finish selection | ||
916 | if( y > getTextRect().mTop ) | ||
917 | { | ||
918 | mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 ); | ||
919 | } | ||
920 | else | ||
921 | if( y < getTextRect().mBottom ) | ||
922 | { | ||
923 | mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 ); | ||
924 | } | ||
925 | |||
926 | setCursorAtLocalPos( x, y, TRUE ); | ||
927 | endSelection(); | ||
928 | |||
929 | updateScrollFromCursor(); | ||
930 | } | ||
931 | |||
932 | if( !hasSelection() ) | ||
933 | { | ||
934 | handleMouseUpOverSegment( x, y, mask ); | ||
935 | } | ||
936 | |||
937 | handled = TRUE; | ||
938 | } | ||
939 | |||
940 | // Delay cursor flashing | ||
941 | resetKeystrokeTimer(); | ||
942 | 907 | ||
943 | if( hasMouseCapture() ) | 908 | if( hasMouseCapture() ) |
944 | { | 909 | { |
945 | if (mDragItem) | 910 | if (mDragItem) |
946 | { | 911 | { |
@@ -960,8 +925,15 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) | |||
960 | } | 925 | } |
961 | } | 926 | } |
962 | mDragItem = NULL; | 927 | mDragItem = NULL; |
963 | gFocusMgr.setMouseCapture( NULL ); | 928 | } |
964 | handled = TRUE; | 929 | |
930 | handled = LLTextEditor::handleMouseUp(x,y,mask); | ||
931 | |||
932 | // Used to enable I Agree checkbox if the user scrolled through entire text | ||
933 | BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax()); | ||
934 | if (mOnScrollEndCallback && was_scrolled_to_bottom) | ||
935 | { | ||
936 | mOnScrollEndCallback(mOnScrollEndData); | ||
965 | } | 937 | } |
966 | 938 | ||
967 | return handled; | 939 | return handled; |
@@ -1003,6 +975,24 @@ BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) | |||
1003 | return handled; | 975 | return handled; |
1004 | } | 976 | } |
1005 | 977 | ||
978 | BOOL LLViewerTextEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask) | ||
979 | { | ||
980 | BOOL handled = FALSE; | ||
981 | handled = childrenHandleMiddleMouseDown(x, y, mask) != NULL; | ||
982 | if (!handled) | ||
983 | { | ||
984 | handled = LLTextEditor::handleMiddleMouseDown(x, y, mask); | ||
985 | } | ||
986 | return handled; | ||
987 | } | ||
988 | |||
989 | BOOL LLViewerTextEditor::handleMiddleMouseUp(S32 x, S32 y, MASK mask) | ||
990 | { | ||
991 | BOOL handled = childrenHandleMiddleMouseUp(x, y, mask) != NULL; | ||
992 | |||
993 | return handled; | ||
994 | } | ||
995 | |||
1006 | BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) | 996 | BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) |
1007 | { | 997 | { |
1008 | BOOL handled = FALSE; | 998 | BOOL handled = FALSE; |
@@ -1025,7 +1015,6 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
1025 | } | 1015 | } |
1026 | } | 1016 | } |
1027 | } | 1017 | } |
1028 | |||
1029 | 1018 | ||
1030 | setCursorAtLocalPos( x, y, FALSE ); | 1019 | setCursorAtLocalPos( x, y, FALSE ); |
1031 | deselect(); | 1020 | deselect(); |
@@ -1063,6 +1052,9 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
1063 | // delay cursor flashing | 1052 | // delay cursor flashing |
1064 | resetKeystrokeTimer(); | 1053 | resetKeystrokeTimer(); |
1065 | 1054 | ||
1055 | // take selection to 'primary' clipboard | ||
1056 | updatePrimary(); | ||
1057 | |||
1066 | handled = TRUE; | 1058 | handled = TRUE; |
1067 | } | 1059 | } |
1068 | return handled; | 1060 | return handled; |
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h index ae672d8..f29caee 100644 --- a/linden/indra/newview/llviewertexteditor.h +++ b/linden/indra/newview/llviewertexteditor.h | |||
@@ -59,6 +59,8 @@ public: | |||
59 | // mousehandler overrides | 59 | // mousehandler overrides |
60 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); | 60 | virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); |
61 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); | 61 | virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); |
62 | virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask); | ||
63 | virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask); | ||
62 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); | 64 | virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); |
63 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); | 65 | virtual BOOL handleHover(S32 x, S32 y, MASK mask); |
64 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); | 66 | virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); |
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp index bf779c4..246e5e4 100644 --- a/linden/indra/newview/llviewerthrottle.cpp +++ b/linden/indra/newview/llviewerthrottle.cpp | |||
@@ -50,7 +50,7 @@ const F32 MAX_FRACTIONAL = 1.5f; | |||
50 | const F32 MIN_FRACTIONAL = 0.2f; | 50 | const F32 MIN_FRACTIONAL = 0.2f; |
51 | 51 | ||
52 | const F32 MIN_BANDWIDTH = 50.f; | 52 | const F32 MIN_BANDWIDTH = 50.f; |
53 | const F32 MAX_BANDWIDTH = 1500.f; | 53 | const F32 MAX_BANDWIDTH = 5000.f; |
54 | const F32 STEP_FRACTIONAL = 0.1f; | 54 | const F32 STEP_FRACTIONAL = 0.1f; |
55 | const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s | 55 | const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s |
56 | const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s | 56 | const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s |
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index c0e4fed..022515a 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp | |||
@@ -589,19 +589,42 @@ bool LLViewerWindow::shouldShowToolTipFor(LLMouseHandler *mh) | |||
589 | return false; | 589 | return false; |
590 | } | 590 | } |
591 | 591 | ||
592 | BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) | 592 | BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down) |
593 | { | 593 | { |
594 | std::string buttonname; | ||
595 | std::string buttonstatestr; | ||
596 | BOOL handled = FALSE; | ||
594 | S32 x = pos.mX; | 597 | S32 x = pos.mX; |
595 | S32 y = pos.mY; | 598 | S32 y = pos.mY; |
596 | x = llround((F32)x / mDisplayScale.mV[VX]); | 599 | x = llround((F32)x / mDisplayScale.mV[VX]); |
597 | y = llround((F32)y / mDisplayScale.mV[VY]); | 600 | y = llround((F32)y / mDisplayScale.mV[VY]); |
598 | 601 | ||
599 | LLView::sMouseHandlerMessage.clear(); | 602 | if (down) |
600 | 603 | buttonstatestr = "down" ; | |
601 | if (gDebugClicks) | 604 | else |
605 | buttonstatestr = "up" ; | ||
606 | |||
607 | switch (clicktype) | ||
602 | { | 608 | { |
603 | llinfos << "ViewerWindow left mouse down at " << x << "," << y << llendl; | 609 | case LLMouseHandler::CLICK_LEFT: |
610 | mLeftMouseDown = down; | ||
611 | buttonname = "Left"; | ||
612 | break; | ||
613 | case LLMouseHandler::CLICK_RIGHT: | ||
614 | mRightMouseDown = down; | ||
615 | buttonname = "Right"; | ||
616 | break; | ||
617 | case LLMouseHandler::CLICK_MIDDLE: | ||
618 | mMiddleMouseDown = down; | ||
619 | buttonname = "Middle"; | ||
620 | break; | ||
621 | case LLMouseHandler::CLICK_DOUBLELEFT: | ||
622 | mLeftMouseDown = down; | ||
623 | buttonname = "Left Double Click"; | ||
624 | break; | ||
604 | } | 625 | } |
626 | |||
627 | LLView::sMouseHandlerMessage.clear(); | ||
605 | 628 | ||
606 | if (gMenuBarView) | 629 | if (gMenuBarView) |
607 | { | 630 | { |
@@ -609,18 +632,28 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask | |||
609 | gMenuBarView->resetMenuTrigger(); | 632 | gMenuBarView->resetMenuTrigger(); |
610 | } | 633 | } |
611 | 634 | ||
612 | mLeftMouseDown = TRUE; | 635 | if (gDebugClicks) |
636 | { | ||
637 | llinfos << "ViewerWindow " << buttonname << " mouse " << buttonstatestr << " at " << x << "," << y << llendl; | ||
638 | } | ||
613 | 639 | ||
614 | // Make sure we get a coresponding mouseup event, even if the mouse leaves the window | 640 | // Make sure we get a coresponding mouseup event, even if the mouse leaves the window |
615 | mWindow->captureMouse(); | 641 | if (down) |
642 | { | ||
643 | mWindow->captureMouse(); | ||
644 | } | ||
645 | else | ||
646 | { | ||
647 | mWindow->releaseMouse(); | ||
648 | } | ||
616 | 649 | ||
617 | // Indicate mouse was active | 650 | // Indicate mouse was active |
618 | gMouseIdleTimer.reset(); | 651 | gMouseIdleTimer.reset(); |
619 | 652 | ||
620 | // Hide tooltips on mousedown | 653 | // Hide tooltips on mousedown |
621 | mToolTipBlocked = TRUE; | 654 | mToolTipBlocked = down; |
622 | 655 | ||
623 | // Also hide hover info on mousedown | 656 | // Also hide hover info on mousedown/mouseup |
624 | if (gHoverView) | 657 | if (gHoverView) |
625 | { | 658 | { |
626 | gHoverView->cancelHover(); | 659 | gHoverView->cancelHover(); |
@@ -629,7 +662,7 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask | |||
629 | // Don't let the user move the mouse out of the window until mouse up. | 662 | // Don't let the user move the mouse out of the window until mouse up. |
630 | if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() ) | 663 | if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() ) |
631 | { | 664 | { |
632 | mWindow->setMouseClipping(TRUE); | 665 | mWindow->setMouseClipping(down); |
633 | } | 666 | } |
634 | 667 | ||
635 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); | 668 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); |
@@ -640,10 +673,9 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask | |||
640 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); | 673 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); |
641 | if (LLView::sDebugMouseHandling) | 674 | if (LLView::sDebugMouseHandling) |
642 | { | 675 | { |
643 | llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl; | 676 | llinfos << buttonname << " Mouse " << buttonstatestr << " handled by captor " << mouse_captor->getName() << llendl; |
644 | } | 677 | } |
645 | 678 | return mouse_captor->handleAnyMouseClick(local_x, local_y, mask, clicktype, down); | |
646 | return mouse_captor->handleMouseDown(local_x, local_y, mask); | ||
647 | } | 679 | } |
648 | 680 | ||
649 | // Topmost view gets a chance before the hierarchy | 681 | // Topmost view gets a chance before the hierarchy |
@@ -652,215 +684,95 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask | |||
652 | { | 684 | { |
653 | S32 local_x, local_y; | 685 | S32 local_x, local_y; |
654 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); | 686 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); |
655 | if (top_ctrl->pointInView(local_x, local_y)) | 687 | if (down) |
656 | { | 688 | { |
657 | return top_ctrl->handleMouseDown(local_x, local_y, mask); | 689 | if (top_ctrl->pointInView(local_x, local_y)) |
658 | } | 690 | { |
659 | else | 691 | return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ; |
660 | { | 692 | } |
661 | gFocusMgr.setTopCtrl(NULL); | 693 | else |
694 | { | ||
695 | gFocusMgr.setTopCtrl(NULL); | ||
696 | } | ||
662 | } | 697 | } |
663 | } | 698 | else |
699 | handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask); | ||
700 | |||
664 | 701 | ||
702 | } | ||
665 | // Give the UI views a chance to process the click | 703 | // Give the UI views a chance to process the click |
666 | if( mRootView->handleMouseDown(x, y, mask) ) | 704 | if( mRootView->handleAnyMouseClick(x, y, mask, clicktype, down) ) |
667 | { | 705 | { |
668 | if (LLView::sDebugMouseHandling) | 706 | if (LLView::sDebugMouseHandling) |
669 | { | 707 | { |
670 | llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl; | 708 | llinfos << buttonname << " Mouse " << buttonstatestr << " " << LLView::sMouseHandlerMessage << llendl; |
671 | } | 709 | } |
672 | return TRUE; | 710 | return TRUE; |
673 | } | 711 | } |
674 | else if (LLView::sDebugMouseHandling) | 712 | else if (LLView::sDebugMouseHandling) |
675 | { | 713 | { |
676 | llinfos << "Left Mouse Down not handled by view" << llendl; | 714 | llinfos << buttonname << " Mouse " << buttonstatestr << " not handled by view" << llendl; |
677 | } | 715 | } |
678 | 716 | if (down) | |
679 | if (gDisconnected) | ||
680 | { | 717 | { |
681 | return FALSE; | 718 | if (gDisconnected) |
682 | } | ||
683 | |||
684 | if(LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask ) ) | ||
685 | { | ||
686 | // This is necessary to force clicks in the world to cause edit | ||
687 | // boxes that might have keyboard focus to relinquish it, and hence | ||
688 | // cause a commit to update their value. JC | ||
689 | gFocusMgr.setKeyboardFocus(NULL); | ||
690 | return TRUE; | ||
691 | } | ||
692 | |||
693 | return FALSE; | ||
694 | } | ||
695 | |||
696 | BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK mask) | ||
697 | { | ||
698 | S32 x = pos.mX; | ||
699 | S32 y = pos.mY; | ||
700 | x = llround((F32)x / mDisplayScale.mV[VX]); | ||
701 | y = llround((F32)y / mDisplayScale.mV[VY]); | ||
702 | |||
703 | LLView::sMouseHandlerMessage.clear(); | ||
704 | |||
705 | if (gDebugClicks) | ||
706 | { | ||
707 | llinfos << "ViewerWindow left mouse double-click at " << x << "," << y << llendl; | ||
708 | } | ||
709 | |||
710 | mLeftMouseDown = TRUE; | ||
711 | |||
712 | // Hide tooltips | ||
713 | if( mToolTip ) | ||
714 | { | ||
715 | mToolTip->setVisible( FALSE ); | ||
716 | } | ||
717 | |||
718 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); | ||
719 | if( mouse_captor ) | ||
720 | { | ||
721 | S32 local_x; | ||
722 | S32 local_y; | ||
723 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); | ||
724 | if (LLView::sDebugMouseHandling) | ||
725 | { | 719 | { |
726 | llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl; | 720 | return FALSE; |
727 | } | ||
728 | |||
729 | return mouse_captor->handleDoubleClick(local_x, local_y, mask); | ||
730 | } | ||
731 | |||
732 | // Check for hit on UI. | ||
733 | LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); | ||
734 | if (top_ctrl) | ||
735 | { | ||
736 | S32 local_x, local_y; | ||
737 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); | ||
738 | if (top_ctrl->pointInView(local_x, local_y)) | ||
739 | { | ||
740 | return top_ctrl->handleDoubleClick(local_x, local_y, mask); | ||
741 | } | 721 | } |
742 | else | 722 | |
723 | if(LLToolMgr::getInstance()->getCurrentTool()->handleAnyMouseClick( x, y, mask, clicktype, down ) ) | ||
743 | { | 724 | { |
744 | gFocusMgr.setTopCtrl(NULL); | 725 | // This is necessary to force clicks in the world to cause edit |
726 | // boxes that might have keyboard focus to relinquish it, and hence | ||
727 | // cause a commit to update their value. JC | ||
728 | gFocusMgr.setKeyboardFocus(NULL); | ||
729 | return TRUE; | ||
745 | } | 730 | } |
746 | } | 731 | } |
747 | 732 | else | |
748 | if (mRootView->handleDoubleClick(x, y, mask)) | ||
749 | { | 733 | { |
750 | if (LLView::sDebugMouseHandling) | 734 | |
735 | mWindow->releaseMouse(); | ||
736 | |||
737 | LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); | ||
738 | if( !handled ) | ||
751 | { | 739 | { |
752 | llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl; | 740 | handled = mRootView->handleAnyMouseClick(x, y, mask, clicktype, down); |
741 | } | ||
742 | |||
743 | |||
744 | |||
745 | if( !handled ) | ||
746 | { | ||
747 | if (tool) | ||
748 | { | ||
749 | handled = tool->handleAnyMouseClick(x, y, mask, clicktype, down); | ||
750 | } | ||
753 | } | 751 | } |
754 | return TRUE; | ||
755 | } | ||
756 | else if (LLView::sDebugMouseHandling) | ||
757 | { | ||
758 | llinfos << "Left Mouse Down not handled by view" << llendl; | ||
759 | } | 752 | } |
760 | 753 | ||
761 | // Why is this here? JC 9/3/2002 | 754 | return (!down); |
762 | if (gNoRender) | 755 | } |
763 | { | ||
764 | return TRUE; | ||
765 | } | ||
766 | 756 | ||
767 | if(LLToolMgr::getInstance()->getCurrentTool()->handleDoubleClick( x, y, mask ) ) | 757 | BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) |
768 | { | 758 | { |
769 | return TRUE; | 759 | BOOL down = TRUE; |
770 | } | 760 | return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down); |
761 | } | ||
771 | 762 | ||
772 | // if we got this far and nothing handled a double click, pass a normal mouse down | 763 | BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK mask) |
773 | return handleMouseDown(window, pos, mask); | 764 | { |
765 | // try handling as a double-click first, then a single-click if that | ||
766 | // wasn't handled. | ||
767 | BOOL down = TRUE; | ||
768 | return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_DOUBLELEFT,down) || | ||
769 | handleMouseDown(window, pos, mask); | ||
774 | } | 770 | } |
775 | 771 | ||
776 | BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) | 772 | BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) |
777 | { | 773 | { |
778 | S32 x = pos.mX; | 774 | BOOL down = FALSE; |
779 | S32 y = pos.mY; | 775 | return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down); |
780 | x = llround((F32)x / mDisplayScale.mV[VX]); | ||
781 | y = llround((F32)y / mDisplayScale.mV[VY]); | ||
782 | |||
783 | LLView::sMouseHandlerMessage.clear(); | ||
784 | |||
785 | if (gDebugClicks) | ||
786 | { | ||
787 | llinfos << "ViewerWindow left mouse up" << llendl; | ||
788 | } | ||
789 | |||
790 | mLeftMouseDown = FALSE; | ||
791 | |||
792 | // Indicate mouse was active | ||
793 | gMouseIdleTimer.reset(); | ||
794 | |||
795 | // Hide tooltips on mouseup | ||
796 | if( mToolTip ) | ||
797 | { | ||
798 | mToolTip->setVisible( FALSE ); | ||
799 | } | ||
800 | |||
801 | // Also hide hover info on mouseup | ||
802 | if (gHoverView) gHoverView->cancelHover(); | ||
803 | |||
804 | BOOL handled = FALSE; | ||
805 | |||
806 | mWindow->releaseMouse(); | ||
807 | |||
808 | LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); | ||
809 | |||
810 | if( tool->clipMouseWhenDown() ) | ||
811 | { | ||
812 | mWindow->setMouseClipping(FALSE); | ||
813 | } | ||
814 | |||
815 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); | ||
816 | if( mouse_captor ) | ||
817 | { | ||
818 | S32 local_x; | ||
819 | S32 local_y; | ||
820 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); | ||
821 | if (LLView::sDebugMouseHandling) | ||
822 | { | ||
823 | llinfos << "Left Mouse Up handled by captor " << mouse_captor->getName() << llendl; | ||
824 | } | ||
825 | |||
826 | return mouse_captor->handleMouseUp(local_x, local_y, mask); | ||
827 | } | ||
828 | |||
829 | LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); | ||
830 | if (top_ctrl) | ||
831 | { | ||
832 | S32 local_x, local_y; | ||
833 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); | ||
834 | handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask); | ||
835 | } | ||
836 | |||
837 | if( !handled ) | ||
838 | { | ||
839 | handled = mRootView->handleMouseUp(x, y, mask); | ||
840 | } | ||
841 | |||
842 | if (LLView::sDebugMouseHandling) | ||
843 | { | ||
844 | if (handled) | ||
845 | { | ||
846 | llinfos << "Left Mouse Up" << LLView::sMouseHandlerMessage << llendl; | ||
847 | } | ||
848 | else | ||
849 | { | ||
850 | llinfos << "Left Mouse Up not handled by view" << llendl; | ||
851 | } | ||
852 | } | ||
853 | |||
854 | if( !handled ) | ||
855 | { | ||
856 | if (tool) | ||
857 | { | ||
858 | handled = tool->handleMouseUp(x, y, mask); | ||
859 | } | ||
860 | } | ||
861 | |||
862 | // Always handled as far as the OS is concerned. | ||
863 | return TRUE; | ||
864 | } | 776 | } |
865 | 777 | ||
866 | 778 | ||
@@ -871,91 +783,10 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK | |||
871 | x = llround((F32)x / mDisplayScale.mV[VX]); | 783 | x = llround((F32)x / mDisplayScale.mV[VX]); |
872 | y = llround((F32)y / mDisplayScale.mV[VY]); | 784 | y = llround((F32)y / mDisplayScale.mV[VY]); |
873 | 785 | ||
874 | LLView::sMouseHandlerMessage.clear(); | 786 | BOOL down = TRUE; |
875 | 787 | BOOL handle = handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down); | |
876 | if (gDebugClicks) | 788 | if (handle) |
877 | { | 789 | return handle; |
878 | llinfos << "ViewerWindow right mouse down at " << x << "," << y << llendl; | ||
879 | } | ||
880 | |||
881 | if (gMenuBarView) | ||
882 | { | ||
883 | // stop ALT-key access to menu | ||
884 | gMenuBarView->resetMenuTrigger(); | ||
885 | } | ||
886 | |||
887 | mRightMouseDown = TRUE; | ||
888 | |||
889 | // Make sure we get a coresponding mouseup event, even if the mouse leaves the window | ||
890 | mWindow->captureMouse(); | ||
891 | |||
892 | // Hide tooltips | ||
893 | if( mToolTip ) | ||
894 | { | ||
895 | mToolTip->setVisible( FALSE ); | ||
896 | } | ||
897 | |||
898 | // Also hide hover info on mousedown | ||
899 | if (gHoverView) | ||
900 | { | ||
901 | gHoverView->cancelHover(); | ||
902 | } | ||
903 | |||
904 | // Don't let the user move the mouse out of the window until mouse up. | ||
905 | if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() ) | ||
906 | { | ||
907 | mWindow->setMouseClipping(TRUE); | ||
908 | } | ||
909 | |||
910 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); | ||
911 | if( mouse_captor ) | ||
912 | { | ||
913 | S32 local_x; | ||
914 | S32 local_y; | ||
915 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); | ||
916 | if (LLView::sDebugMouseHandling) | ||
917 | { | ||
918 | llinfos << "Right Mouse Down handled by captor " << mouse_captor->getName() << llendl; | ||
919 | } | ||
920 | return mouse_captor->handleRightMouseDown(local_x, local_y, mask); | ||
921 | } | ||
922 | |||
923 | LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); | ||
924 | if (top_ctrl) | ||
925 | { | ||
926 | S32 local_x, local_y; | ||
927 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); | ||
928 | if (top_ctrl->pointInView(local_x, local_y)) | ||
929 | { | ||
930 | return top_ctrl->handleRightMouseDown(local_x, local_y, mask); | ||
931 | } | ||
932 | else | ||
933 | { | ||
934 | gFocusMgr.setTopCtrl(NULL); | ||
935 | } | ||
936 | } | ||
937 | |||
938 | if( mRootView->handleRightMouseDown(x, y, mask) ) | ||
939 | { | ||
940 | if (LLView::sDebugMouseHandling) | ||
941 | { | ||
942 | llinfos << "Right Mouse Down" << LLView::sMouseHandlerMessage << llendl; | ||
943 | } | ||
944 | return TRUE; | ||
945 | } | ||
946 | else if (LLView::sDebugMouseHandling) | ||
947 | { | ||
948 | llinfos << "Right Mouse Down not handled by view" << llendl; | ||
949 | } | ||
950 | |||
951 | if(LLToolMgr::getInstance()->getCurrentTool()->handleRightMouseDown( x, y, mask ) ) | ||
952 | { | ||
953 | // This is necessary to force clicks in the world to cause edit | ||
954 | // boxes that might have keyboard focus to relinquish it, and hence | ||
955 | // cause a commit to update their value. JC | ||
956 | gFocusMgr.setKeyboardFocus(NULL); | ||
957 | return TRUE; | ||
958 | } | ||
959 | 790 | ||
960 | // *HACK: this should be rolled into the composite tool logic, not | 791 | // *HACK: this should be rolled into the composite tool logic, not |
961 | // hardcoded at the top level. | 792 | // hardcoded at the top level. |
@@ -973,107 +804,27 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK | |||
973 | 804 | ||
974 | BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) | 805 | BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) |
975 | { | 806 | { |
976 | S32 x = pos.mX; | 807 | BOOL down = FALSE; |
977 | S32 y = pos.mY; | 808 | return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down); |
978 | x = llround((F32)x / mDisplayScale.mV[VX]); | ||
979 | y = llround((F32)y / mDisplayScale.mV[VY]); | ||
980 | |||
981 | LLView::sMouseHandlerMessage.clear(); | ||
982 | |||
983 | // Don't care about caps lock for mouse events. | ||
984 | if (gDebugClicks) | ||
985 | { | ||
986 | llinfos << "ViewerWindow right mouse up" << llendl; | ||
987 | } | ||
988 | |||
989 | mRightMouseDown = FALSE; | ||
990 | |||
991 | // Indicate mouse was active | ||
992 | gMouseIdleTimer.reset(); | ||
993 | |||
994 | // Hide tooltips on mouseup | ||
995 | if( mToolTip ) | ||
996 | { | ||
997 | mToolTip->setVisible( FALSE ); | ||
998 | } | ||
999 | |||
1000 | // Also hide hover info on mouseup | ||
1001 | if (gHoverView) gHoverView->cancelHover(); | ||
1002 | |||
1003 | BOOL handled = FALSE; | ||
1004 | |||
1005 | mWindow->releaseMouse(); | ||
1006 | |||
1007 | LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); | ||
1008 | |||
1009 | if( tool->clipMouseWhenDown() ) | ||
1010 | { | ||
1011 | mWindow->setMouseClipping(FALSE); | ||
1012 | } | ||
1013 | |||
1014 | LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); | ||
1015 | if( mouse_captor ) | ||
1016 | { | ||
1017 | S32 local_x; | ||
1018 | S32 local_y; | ||
1019 | mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); | ||
1020 | if (LLView::sDebugMouseHandling) | ||
1021 | { | ||
1022 | llinfos << "Right Mouse Up handled by captor " << mouse_captor->getName() << llendl; | ||
1023 | } | ||
1024 | return mouse_captor->handleRightMouseUp(local_x, local_y, mask); | ||
1025 | } | ||
1026 | |||
1027 | LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); | ||
1028 | if (top_ctrl) | ||
1029 | { | ||
1030 | S32 local_x, local_y; | ||
1031 | top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); | ||
1032 | handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleRightMouseUp(local_x, local_y, mask); | ||
1033 | } | ||
1034 | |||
1035 | if( !handled ) | ||
1036 | { | ||
1037 | handled = mRootView->handleRightMouseUp(x, y, mask); | ||
1038 | } | ||
1039 | |||
1040 | if (LLView::sDebugMouseHandling) | ||
1041 | { | ||
1042 | if (handled) | ||
1043 | { | ||
1044 | llinfos << "Right Mouse Up" << LLView::sMouseHandlerMessage << llendl; | ||
1045 | } | ||
1046 | else | ||
1047 | { | ||
1048 | llinfos << "Right Mouse Up not handled by view" << llendl; | ||
1049 | } | ||
1050 | } | ||
1051 | |||
1052 | if( !handled ) | ||
1053 | { | ||
1054 | if (tool) | ||
1055 | { | ||
1056 | handled = tool->handleRightMouseUp(x, y, mask); | ||
1057 | } | ||
1058 | } | ||
1059 | |||
1060 | // Always handled as far as the OS is concerned. | ||
1061 | return TRUE; | ||
1062 | } | 809 | } |
1063 | 810 | ||
1064 | BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) | 811 | BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) |
1065 | { | 812 | { |
813 | BOOL down = TRUE; | ||
1066 | gVoiceClient->middleMouseState(true); | 814 | gVoiceClient->middleMouseState(true); |
1067 | 815 | handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down); | |
1068 | // Always handled as far as the OS is concerned. | 816 | |
817 | // Always handled as far as the OS is concerned. | ||
1069 | return TRUE; | 818 | return TRUE; |
1070 | } | 819 | } |
1071 | 820 | ||
1072 | BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) | 821 | BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) |
1073 | { | 822 | { |
823 | BOOL down = FALSE; | ||
1074 | gVoiceClient->middleMouseState(false); | 824 | gVoiceClient->middleMouseState(false); |
1075 | 825 | handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down); | |
1076 | // Always handled as far as the OS is concerned. | 826 | |
827 | // Always handled as far as the OS is concerned. | ||
1077 | return TRUE; | 828 | return TRUE; |
1078 | } | 829 | } |
1079 | 830 | ||
@@ -1447,6 +1198,7 @@ LLViewerWindow::LLViewerWindow( | |||
1447 | mWindowRect(0, height, width, 0), | 1198 | mWindowRect(0, height, width, 0), |
1448 | mVirtualWindowRect(0, height, width, 0), | 1199 | mVirtualWindowRect(0, height, width, 0), |
1449 | mLeftMouseDown(FALSE), | 1200 | mLeftMouseDown(FALSE), |
1201 | mMiddleMouseDown(FALSE), | ||
1450 | mRightMouseDown(FALSE), | 1202 | mRightMouseDown(FALSE), |
1451 | mToolTip(NULL), | 1203 | mToolTip(NULL), |
1452 | mToolTipBlocked(FALSE), | 1204 | mToolTipBlocked(FALSE), |
@@ -1887,69 +1639,82 @@ void LLViewerWindow::initWorldUI() | |||
1887 | S32 width = mRootView->getRect().getWidth(); | 1639 | S32 width = mRootView->getRect().getWidth(); |
1888 | LLRect full_window(0, height, width, 0); | 1640 | LLRect full_window(0, height, width, 0); |
1889 | 1641 | ||
1890 | if ( gBottomPanel == NULL ) // Don't re-enter if objects are alreay created | 1642 | if (gBottomPanel) |
1891 | { | 1643 | mRootView->removeChild(gBottomPanel, TRUE); |
1892 | // panel containing chatbar, toolbar, and overlay, over floaters | 1644 | // panel containing chatbar, toolbar, and overlay, over floaters |
1893 | gBottomPanel = new LLBottomPanel(mRootView->getRect()); | 1645 | gBottomPanel = new LLBottomPanel(mRootView->getRect()); |
1894 | mRootView->addChild(gBottomPanel); | 1646 | mRootView->addChild(gBottomPanel); |
1895 | 1647 | ||
1896 | // View for hover information | 1648 | if (gHoverView) |
1897 | gHoverView = new LLHoverView(std::string("gHoverView"), full_window); | 1649 | mRootView->removeChild(gHoverView, TRUE); |
1898 | gHoverView->setVisible(TRUE); | 1650 | // View for hover information |
1899 | mRootView->addChild(gHoverView); | 1651 | gHoverView = new LLHoverView(std::string("gHoverView"), full_window); |
1652 | gHoverView->setVisible(TRUE); | ||
1653 | mRootView->addChild(gHoverView); | ||
1900 | 1654 | ||
1901 | gIMMgr = LLIMMgr::getInstance(); | 1655 | gIMMgr = LLIMMgr::getInstance(); |
1902 | 1656 | ||
1903 | if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) | 1657 | if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) |
1904 | { | 1658 | { |
1905 | LLFloaterChat::getInstance(LLSD())->loadHistory(); | 1659 | LLFloaterChat::getInstance(LLSD())->loadHistory(); |
1906 | } | 1660 | } |
1907 | 1661 | ||
1908 | LLRect morph_view_rect = full_window; | 1662 | LLRect morph_view_rect = full_window; |
1909 | morph_view_rect.stretch( -STATUS_BAR_HEIGHT ); | 1663 | morph_view_rect.stretch( -STATUS_BAR_HEIGHT ); |
1910 | morph_view_rect.mTop = full_window.mTop - 32; | 1664 | morph_view_rect.mTop = full_window.mTop - 32; |
1911 | gMorphView = new LLMorphView(std::string("gMorphView"), morph_view_rect ); | 1665 | if (gMorphView) |
1912 | mRootView->addChild(gMorphView); | 1666 | mRootView->removeChild(gMorphView, TRUE); |
1913 | gMorphView->setVisible(FALSE); | ||
1914 | 1667 | ||
1915 | // *Note: this is where gFloaterMute used to be initialized. | 1668 | gMorphView = new LLMorphView(std::string("gMorphView"), morph_view_rect ); |
1669 | mRootView->addChild(gMorphView); | ||
1670 | gMorphView->setVisible(FALSE); | ||
1916 | 1671 | ||
1917 | LLWorldMapView::initClass(); | 1672 | // *Note: this is where gFloaterMute used to be initialized. |
1918 | 1673 | ||
1919 | adjust_rect_centered_partial_zoom("FloaterWorldMapRect2", full_window); | 1674 | LLWorldMapView::initClass(); |
1920 | 1675 | ||
1676 | adjust_rect_centered_partial_zoom("FloaterWorldMapRect2", full_window); | ||
1677 | |||
1678 | if (!gFloaterWorldMap) | ||
1679 | { | ||
1921 | gFloaterWorldMap = new LLFloaterWorldMap(); | 1680 | gFloaterWorldMap = new LLFloaterWorldMap(); |
1922 | gFloaterWorldMap->setVisible(FALSE); | 1681 | gFloaterWorldMap->setVisible(FALSE); |
1682 | } | ||
1923 | 1683 | ||
1924 | // | 1684 | // |
1925 | // Tools for building | 1685 | // Tools for building |
1926 | // | 1686 | // |
1927 | |||
1928 | // Toolbox floater | ||
1929 | init_menus(); | ||
1930 | 1687 | ||
1688 | // Toolbox floater | ||
1689 | init_menus(); | ||
1690 | if (!gFloaterTools) | ||
1691 | { | ||
1931 | gFloaterTools = new LLFloaterTools(); | 1692 | gFloaterTools = new LLFloaterTools(); |
1932 | gFloaterTools->setVisible(FALSE); | 1693 | gFloaterTools->setVisible(FALSE); |
1694 | } | ||
1933 | 1695 | ||
1696 | if (!gStatusBar) | ||
1697 | { | ||
1934 | // Status bar | 1698 | // Status bar |
1935 | S32 menu_bar_height = gMenuBarView->getRect().getHeight(); | 1699 | S32 menu_bar_height = gMenuBarView->getRect().getHeight(); |
1936 | LLRect root_rect = getRootView()->getRect(); | 1700 | LLRect root_rect = mRootView->getRect(); |
1937 | LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height); | 1701 | LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height); |
1938 | gStatusBar = new LLStatusBar(std::string("status"), status_rect); | 1702 | gStatusBar = new LLStatusBar(std::string("status"), status_rect); |
1939 | gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP); | 1703 | gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP); |
1940 | 1704 | ||
1941 | gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE); | 1705 | gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE); |
1942 | gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight()); | 1706 | gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight()); |
1943 | // sync bg color with menu bar | 1707 | // sync bg color with menu bar |
1944 | gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() ); | 1708 | gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() ); |
1709 | mRootView->addChild(gStatusBar); | ||
1710 | } | ||
1945 | 1711 | ||
1946 | LLFloaterChatterBox::createInstance(LLSD()); | 1712 | LLFloaterChatterBox::createInstance(LLSD()); |
1947 | 1713 | ||
1948 | getRootView()->addChild(gStatusBar); | ||
1949 | 1714 | ||
1950 | // menu holder appears on top to get first pass at all mouse events | 1715 | // menu holder appears on top to get first pass at all mouse events |
1951 | getRootView()->sendChildToFront(gMenuHolder); | 1716 | |
1952 | } | 1717 | mRootView->sendChildToFront(gMenuHolder); |
1953 | } | 1718 | } |
1954 | 1719 | ||
1955 | // Destroy the UI | 1720 | // Destroy the UI |
@@ -3311,6 +3076,16 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, | |||
3311 | { | 3076 | { |
3312 | moveable_object_selected = TRUE; | 3077 | moveable_object_selected = TRUE; |
3313 | this_object_movable = TRUE; | 3078 | this_object_movable = TRUE; |
3079 | |||
3080 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0g | ||
3081 | if ( (rlv_handler_t::isEnabled()) && | ||
3082 | ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP))) ) | ||
3083 | { | ||
3084 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
3085 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == object->getRootEdit()) ) | ||
3086 | moveable_object_selected = this_object_movable = FALSE; | ||
3087 | } | ||
3088 | // [/RLVa:KB] | ||
3314 | } | 3089 | } |
3315 | all_selected_objects_move = all_selected_objects_move && this_object_movable; | 3090 | all_selected_objects_move = all_selected_objects_move && this_object_movable; |
3316 | all_selected_objects_modify = all_selected_objects_modify && object->permModify(); | 3091 | all_selected_objects_modify = all_selected_objects_modify && object->permModify(); |
@@ -5151,7 +4926,6 @@ void LLBottomPanel::draw() | |||
5151 | 4926 | ||
5152 | void* LLBottomPanel::createHUD(void* data) | 4927 | void* LLBottomPanel::createHUD(void* data) |
5153 | { | 4928 | { |
5154 | delete gHUDView; | ||
5155 | gHUDView = new LLHUDView(); | 4929 | gHUDView = new LLHUDView(); |
5156 | return gHUDView; | 4930 | return gHUDView; |
5157 | } | 4931 | } |
@@ -5159,14 +4933,12 @@ void* LLBottomPanel::createHUD(void* data) | |||
5159 | 4933 | ||
5160 | void* LLBottomPanel::createOverlayBar(void* data) | 4934 | void* LLBottomPanel::createOverlayBar(void* data) |
5161 | { | 4935 | { |
5162 | delete gOverlayBar; | ||
5163 | gOverlayBar = new LLOverlayBar(); | 4936 | gOverlayBar = new LLOverlayBar(); |
5164 | return gOverlayBar; | 4937 | return gOverlayBar; |
5165 | } | 4938 | } |
5166 | 4939 | ||
5167 | void* LLBottomPanel::createToolBar(void* data) | 4940 | void* LLBottomPanel::createToolBar(void* data) |
5168 | { | 4941 | { |
5169 | delete gToolBar; | ||
5170 | gToolBar = new LLToolBar(); | 4942 | gToolBar = new LLToolBar(); |
5171 | return gToolBar; | 4943 | return gToolBar; |
5172 | } | 4944 | } |
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index 79828f1..74edd2e 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h | |||
@@ -49,6 +49,7 @@ | |||
49 | #include "llstat.h" | 49 | #include "llstat.h" |
50 | #include "llalertdialog.h" | 50 | #include "llalertdialog.h" |
51 | #include "llnotifications.h" | 51 | #include "llnotifications.h" |
52 | #include "llmousehandler.h" | ||
52 | 53 | ||
53 | class LLView; | 54 | class LLView; |
54 | class LLViewerObject; | 55 | class LLViewerObject; |
@@ -59,7 +60,6 @@ class LLVelocityBar; | |||
59 | class LLTextBox; | 60 | class LLTextBox; |
60 | class LLImageRaw; | 61 | class LLImageRaw; |
61 | class LLHUDIcon; | 62 | class LLHUDIcon; |
62 | class LLMouseHandler; | ||
63 | 63 | ||
64 | #define PICK_HALF_WIDTH 5 | 64 | #define PICK_HALF_WIDTH 5 |
65 | #define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1) | 65 | #define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1) |
@@ -83,7 +83,7 @@ public: | |||
83 | 83 | ||
84 | static bool isFlora(LLViewerObject* object); | 84 | static bool isFlora(LLViewerObject* object); |
85 | 85 | ||
86 | typedef enum e_pick_type | 86 | typedef enum |
87 | { | 87 | { |
88 | PICK_OBJECT, | 88 | PICK_OBJECT, |
89 | PICK_FLORA, | 89 | PICK_FLORA, |
@@ -152,6 +152,7 @@ public: | |||
152 | /*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask); | 152 | /*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask); |
153 | /*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level); | 153 | /*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level); |
154 | /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended | 154 | /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended |
155 | /*virtual*/ BOOL handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down); | ||
155 | /*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask); | 156 | /*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask); |
156 | /*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); | 157 | /*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); |
157 | /*virtual*/ BOOL handleCloseRequest(LLWindow *window); | 158 | /*virtual*/ BOOL handleCloseRequest(LLWindow *window); |
@@ -214,6 +215,7 @@ public: | |||
214 | LLCoordGL getCurrentMouseDelta() const { return mCurrentMouseDelta; } | 215 | LLCoordGL getCurrentMouseDelta() const { return mCurrentMouseDelta; } |
215 | LLStat * getMouseVelocityStat() { return &mMouseVelocityStat; } | 216 | LLStat * getMouseVelocityStat() { return &mMouseVelocityStat; } |
216 | BOOL getLeftMouseDown() const { return mLeftMouseDown; } | 217 | BOOL getLeftMouseDown() const { return mLeftMouseDown; } |
218 | BOOL getMiddleMouseDown() const { return mMiddleMouseDown; } | ||
217 | BOOL getRightMouseDown() const { return mRightMouseDown; } | 219 | BOOL getRightMouseDown() const { return mRightMouseDown; } |
218 | 220 | ||
219 | const LLPickInfo& getLastPick() const { return mLastPick; } | 221 | const LLPickInfo& getLastPick() const { return mLastPick; } |
@@ -281,7 +283,7 @@ public: | |||
281 | 283 | ||
282 | // snapshot functionality. | 284 | // snapshot functionality. |
283 | // perhaps some of this should move to llfloatershapshot? -MG | 285 | // perhaps some of this should move to llfloatershapshot? -MG |
284 | typedef enum e_snapshot_type | 286 | typedef enum |
285 | { | 287 | { |
286 | SNAPSHOT_TYPE_COLOR, | 288 | SNAPSHOT_TYPE_COLOR, |
287 | SNAPSHOT_TYPE_DEPTH, | 289 | SNAPSHOT_TYPE_DEPTH, |
@@ -390,6 +392,7 @@ protected: | |||
390 | LLCoordGL mCurrentMouseDelta; //amount mouse moved this frame | 392 | LLCoordGL mCurrentMouseDelta; //amount mouse moved this frame |
391 | LLStat mMouseVelocityStat; | 393 | LLStat mMouseVelocityStat; |
392 | BOOL mLeftMouseDown; | 394 | BOOL mLeftMouseDown; |
395 | BOOL mMiddleMouseDown; | ||
393 | BOOL mRightMouseDown; | 396 | BOOL mRightMouseDown; |
394 | 397 | ||
395 | LLProgressView *mProgressView; | 398 | LLProgressView *mProgressView; |
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp index b79d7d1..a269225 100644 --- a/linden/indra/newview/llvlcomposition.cpp +++ b/linden/indra/newview/llvlcomposition.cpp | |||
@@ -80,8 +80,13 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32 | |||
80 | // Initialize the texture matrix to defaults. | 80 | // Initialize the texture matrix to defaults. |
81 | for (S32 i = 0; i < CORNER_COUNT; ++i) | 81 | for (S32 i = 0; i < CORNER_COUNT; ++i) |
82 | { | 82 | { |
83 | mStartHeight[i] = gSavedSettings.getF32("TerrainColorStartHeight"); | 83 | //Zwag: I'm making these static values because they are a LARGE performance problem |
84 | mHeightRange[i] = gSavedSettings.getF32("TerrainColorHeightRange"); | 84 | // right now, and I've never heard of anyone changing them, they are not referenced |
85 | // elsewhere, and have not changed in defaults since the original source code release. | ||
86 | // We can move these back to signal connected statics if they really become important | ||
87 | // variables in the future. | ||
88 | mStartHeight[i] = 20.f;//gSavedSettings.getF32("TerrainColorStartHeight"); | ||
89 | mHeightRange[i] = 60.f;//gSavedSettings.getF32("TerrainColorHeightRange"); | ||
85 | } | 90 | } |
86 | mTexScaleX = 16.f; | 91 | mTexScaleX = 16.f; |
87 | mTexScaleY = 16.f; | 92 | mTexScaleY = 16.f; |
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index 1203c56..d35ad40 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp | |||
@@ -83,6 +83,9 @@ | |||
83 | #include "llvoicevisualizer.h" // Ventrella | 83 | #include "llvoicevisualizer.h" // Ventrella |
84 | 84 | ||
85 | #include "boost/lexical_cast.hpp" | 85 | #include "boost/lexical_cast.hpp" |
86 | // [RLVa:KB] | ||
87 | #include "llstartup.h" | ||
88 | // [/RLVa:KB] | ||
86 | 89 | ||
87 | using namespace LLVOAvatarDefines; | 90 | using namespace LLVOAvatarDefines; |
88 | 91 | ||
@@ -175,6 +178,10 @@ enum ERenderName | |||
175 | //----------------------------------------------------------------------------- | 178 | //----------------------------------------------------------------------------- |
176 | // Callback data | 179 | // Callback data |
177 | //----------------------------------------------------------------------------- | 180 | //----------------------------------------------------------------------------- |
181 | LLVector3d LLVOAvatar::sBeamLastAt; | ||
182 | int LLVOAvatar::sPartsNow; | ||
183 | |||
184 | |||
178 | struct LLAvatarTexData | 185 | struct LLAvatarTexData |
179 | { | 186 | { |
180 | LLAvatarTexData( const LLUUID& id, ETextureIndex index ) | 187 | LLAvatarTexData( const LLUUID& id, ETextureIndex index ) |
@@ -741,7 +748,11 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, | |||
741 | mTexEyeColor( NULL ), | 748 | mTexEyeColor( NULL ), |
742 | mNeedsSkin(FALSE), | 749 | mNeedsSkin(FALSE), |
743 | mUpdatePeriod(1), | 750 | mUpdatePeriod(1), |
751 | // mFullyLoadedInitialized(FALSE) | ||
752 | mPreviousFullyLoaded(FALSE), | ||
753 | mVisibleChat( FALSE ), | ||
744 | mFullyLoadedInitialized(FALSE), | 754 | mFullyLoadedInitialized(FALSE), |
755 | mFullyLoaded(FALSE), | ||
745 | mHasBakedHair( FALSE ) | 756 | mHasBakedHair( FALSE ) |
746 | { | 757 | { |
747 | LLMemType mt(LLMemType::MTYPE_AVATAR); | 758 | LLMemType mt(LLMemType::MTYPE_AVATAR); |
@@ -1717,6 +1728,10 @@ BOOL LLVOAvatar::buildSkeleton(const LLVOAvatarSkeletonInfo *info) | |||
1717 | { | 1728 | { |
1718 | LLMemType mt(LLMemType::MTYPE_AVATAR); | 1729 | LLMemType mt(LLMemType::MTYPE_AVATAR); |
1719 | 1730 | ||
1731 | //this can get called with null info on startup sometimes | ||
1732 | if (!info) | ||
1733 | return FALSE; | ||
1734 | |||
1720 | //------------------------------------------------------------------------- | 1735 | //------------------------------------------------------------------------- |
1721 | // allocate joints | 1736 | // allocate joints |
1722 | //------------------------------------------------------------------------- | 1737 | //------------------------------------------------------------------------- |
@@ -1981,9 +1996,15 @@ void LLVOAvatar::buildCharacter() | |||
1981 | if (attachment->getGroup() == i) | 1996 | if (attachment->getGroup() == i) |
1982 | { | 1997 | { |
1983 | LLMenuItemCallGL* item; | 1998 | LLMenuItemCallGL* item; |
1999 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2000 | // We need the userdata param to disable options in this pie menu later on (Left Hand / Right Hand option) | ||
1984 | item = new LLMenuItemCallGL(attachment->getName(), | 2001 | item = new LLMenuItemCallGL(attachment->getName(), |
1985 | NULL, | 2002 | NULL, |
1986 | object_selected_and_point_valid); | 2003 | object_selected_and_point_valid, attachment); |
2004 | // [/RLVa:KB] | ||
2005 | // item = new LLMenuItemCallGL(attachment->getName(), | ||
2006 | // NULL, | ||
2007 | // object_selected_and_point_valid); | ||
1987 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); | 2008 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); |
1988 | 2009 | ||
1989 | gAttachPieMenu->append(item); | 2010 | gAttachPieMenu->append(item); |
@@ -2038,9 +2059,15 @@ void LLVOAvatar::buildCharacter() | |||
2038 | if (attachment->getGroup() == 8) | 2059 | if (attachment->getGroup() == 8) |
2039 | { | 2060 | { |
2040 | LLMenuItemCallGL* item; | 2061 | LLMenuItemCallGL* item; |
2062 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2063 | // We need the userdata param to disable options in this pie menu later on | ||
2041 | item = new LLMenuItemCallGL(attachment->getName(), | 2064 | item = new LLMenuItemCallGL(attachment->getName(), |
2042 | NULL, | 2065 | NULL, |
2043 | object_selected_and_point_valid); | 2066 | object_selected_and_point_valid, attachment); |
2067 | // [/RLVa:KB] | ||
2068 | // item = new LLMenuItemCallGL(attachment->getName(), | ||
2069 | // NULL, | ||
2070 | // object_selected_and_point_valid); | ||
2044 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); | 2071 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); |
2045 | gAttachScreenPieMenu->append(item); | 2072 | gAttachScreenPieMenu->append(item); |
2046 | gDetachScreenPieMenu->append(new LLMenuItemCallGL(attachment->getName(), | 2073 | gDetachScreenPieMenu->append(new LLMenuItemCallGL(attachment->getName(), |
@@ -2059,12 +2086,14 @@ void LLVOAvatar::buildCharacter() | |||
2059 | { | 2086 | { |
2060 | continue; | 2087 | continue; |
2061 | } | 2088 | } |
2089 | // RELEASE-RLVa: random comment because we want know if LL ever changes this to not include "attachment" as userdata | ||
2062 | LLMenuItemCallGL* item = new LLMenuItemCallGL(attachment->getName(), | 2090 | LLMenuItemCallGL* item = new LLMenuItemCallGL(attachment->getName(), |
2063 | NULL, &object_selected_and_point_valid, | 2091 | NULL, &object_selected_and_point_valid, |
2064 | &attach_label, attachment); | 2092 | &attach_label, attachment); |
2093 | if (item){ | ||
2065 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); | 2094 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", curiter->first); |
2066 | gAttachSubMenu->append(item); | 2095 | gAttachSubMenu->append(item); |
2067 | 2096 | } | |
2068 | gDetachSubMenu->append(new LLMenuItemCallGL(attachment->getName(), | 2097 | gDetachSubMenu->append(new LLMenuItemCallGL(attachment->getName(), |
2069 | &handle_detach_from_avatar, object_attached, &detach_label, attachment)); | 2098 | &handle_detach_from_avatar, object_attached, &detach_label, attachment)); |
2070 | 2099 | ||
@@ -2118,8 +2147,13 @@ void LLVOAvatar::buildCharacter() | |||
2118 | LLViewerJointAttachment* attachment = get_if_there(mAttachmentPoints, attach_index, (LLViewerJointAttachment*)NULL); | 2147 | LLViewerJointAttachment* attachment = get_if_there(mAttachmentPoints, attach_index, (LLViewerJointAttachment*)NULL); |
2119 | if (attachment) | 2148 | if (attachment) |
2120 | { | 2149 | { |
2150 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2151 | // We need the userdata param to disable options in this pie menu later on | ||
2121 | LLMenuItemCallGL* item = new LLMenuItemCallGL(attachment->getName(), | 2152 | LLMenuItemCallGL* item = new LLMenuItemCallGL(attachment->getName(), |
2122 | NULL, object_selected_and_point_valid); | 2153 | NULL, object_selected_and_point_valid, attachment); |
2154 | // [/RLVa:KB] | ||
2155 | // LLMenuItemCallGL* item = new LLMenuItemCallGL(attachment->getName(), | ||
2156 | // NULL, object_selected_and_point_valid); | ||
2123 | gAttachBodyPartPieMenus[group]->append(item); | 2157 | gAttachBodyPartPieMenus[group]->append(item); |
2124 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", attach_index); | 2158 | item->addListener(gMenuHolder->getListenerByName("Object.AttachToAvatar"), "on_click", attach_index); |
2125 | gDetachBodyPartPieMenus[group]->append(new LLMenuItemCallGL(attachment->getName(), | 2159 | gDetachBodyPartPieMenus[group]->append(new LLMenuItemCallGL(attachment->getName(), |
@@ -2944,10 +2978,16 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) | |||
2944 | const F32 time_visible = mTimeVisible.getElapsedTimeF32(); | 2978 | const F32 time_visible = mTimeVisible.getElapsedTimeF32(); |
2945 | const F32 NAME_SHOW_TIME = gSavedSettings.getF32("RenderNameShowTime"); // seconds | 2979 | const F32 NAME_SHOW_TIME = gSavedSettings.getF32("RenderNameShowTime"); // seconds |
2946 | const F32 FADE_DURATION = gSavedSettings.getF32("RenderNameFadeDuration"); // seconds | 2980 | const F32 FADE_DURATION = gSavedSettings.getF32("RenderNameFadeDuration"); // seconds |
2981 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.0b | ||
2982 | bool fRlvShowNames = gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES); | ||
2983 | // [/RLVa:KB] | ||
2947 | BOOL visible_avatar = isVisible() || mNeedsAnimUpdate; | 2984 | BOOL visible_avatar = isVisible() || mNeedsAnimUpdate; |
2948 | BOOL visible_chat = gSavedSettings.getBOOL("UseChatBubbles") && (mChats.size() || mTyping); | 2985 | BOOL visible_chat = gSavedSettings.getBOOL("UseChatBubbles") && (mChats.size() || mTyping); |
2949 | BOOL render_name = visible_chat || | 2986 | BOOL render_name = visible_chat || |
2950 | (visible_avatar && | 2987 | (visible_avatar && |
2988 | // [RLVa:KB] - Checked: 2009-08-11 (RLVa-1.0.1h) | Added: RLVa-1.0.0h | ||
2989 | ( (!fRlvShowNames) || (RlvSettings::fShowNameTags) ) && | ||
2990 | // [/RLVa:KB] | ||
2951 | ((sRenderName == RENDER_NAME_ALWAYS) || | 2991 | ((sRenderName == RENDER_NAME_ALWAYS) || |
2952 | (sRenderName == RENDER_NAME_FADE && time_visible < NAME_SHOW_TIME))); | 2992 | (sRenderName == RENDER_NAME_FADE && time_visible < NAME_SHOW_TIME))); |
2953 | // If it's your own avatar, don't draw in mouselook, and don't | 2993 | // If it's your own avatar, don't draw in mouselook, and don't |
@@ -2968,7 +3008,18 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) | |||
2968 | new_name = TRUE; | 3008 | new_name = TRUE; |
2969 | } | 3009 | } |
2970 | 3010 | ||
2971 | if (sRenderGroupTitles != mRenderGroupTitles) | 3011 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.0b |
3012 | if (fRlvShowNames) | ||
3013 | { | ||
3014 | if (mRenderGroupTitles) | ||
3015 | { | ||
3016 | mRenderGroupTitles = FALSE; | ||
3017 | new_name = TRUE; | ||
3018 | } | ||
3019 | } | ||
3020 | else if (sRenderGroupTitles != mRenderGroupTitles) | ||
3021 | // [/RLVa] | ||
3022 | //if (sRenderGroupTitles != mRenderGroupTitles) | ||
2972 | { | 3023 | { |
2973 | mRenderGroupTitles = sRenderGroupTitles; | 3024 | mRenderGroupTitles = sRenderGroupTitles; |
2974 | new_name = TRUE; | 3025 | new_name = TRUE; |
@@ -3073,17 +3124,11 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) | |||
3073 | || is_appearance != mNameAppearance) | 3124 | || is_appearance != mNameAppearance) |
3074 | { | 3125 | { |
3075 | std::string line; | 3126 | std::string line; |
3076 | if (!sRenderGroupTitles) | 3127 | |
3077 | { | 3128 | if (title && title->getString() && title->getString()[0] != '\0') |
3078 | // If all group titles are turned off, stack first name | ||
3079 | // on a line above last name | ||
3080 | line += firstname->getString(); | ||
3081 | line += "\n"; | ||
3082 | } | ||
3083 | else if (title && title->getString() && title->getString()[0] != '\0') | ||
3084 | { | 3129 | { |
3085 | line += title->getString(); | 3130 | line += title->getString(); |
3086 | LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR); | 3131 | //LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR); IMP-136 -- McCabe |
3087 | line += "\n"; | 3132 | line += "\n"; |
3088 | line += firstname->getString(); | 3133 | line += firstname->getString(); |
3089 | } | 3134 | } |
@@ -3094,6 +3139,15 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) | |||
3094 | 3139 | ||
3095 | line += " "; | 3140 | line += " "; |
3096 | line += lastname->getString(); | 3141 | line += lastname->getString(); |
3142 | |||
3143 | // [RLVa:KB] | ||
3144 | if (fRlvShowNames) | ||
3145 | { | ||
3146 | // User is not allowed to see who it is, due to RLV settings. | ||
3147 | line = gRlvHandler.getAnonym(line); | ||
3148 | } | ||
3149 | // [/RLVa:KB] | ||
3150 | |||
3097 | BOOL need_comma = FALSE; | 3151 | BOOL need_comma = FALSE; |
3098 | 3152 | ||
3099 | if (is_away || is_muted || is_busy) | 3153 | if (is_away || is_muted || is_busy) |
@@ -3134,7 +3188,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) | |||
3134 | mNameMute = is_muted; | 3188 | mNameMute = is_muted; |
3135 | mNameAppearance = is_appearance; | 3189 | mNameAppearance = is_appearance; |
3136 | mTitle = title ? title->getString() : ""; | 3190 | mTitle = title ? title->getString() : ""; |
3137 | LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR); | 3191 | //LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR); IMP-136 -- McCabe |
3138 | mNameString = utf8str_to_wstring(line); | 3192 | mNameString = utf8str_to_wstring(line); |
3139 | new_name = TRUE; | 3193 | new_name = TRUE; |
3140 | } | 3194 | } |
@@ -3258,6 +3312,26 @@ void LLVOAvatar::idleUpdateTractorBeam() | |||
3258 | if (!needsRenderBeam() || !mIsBuilt) | 3312 | if (!needsRenderBeam() || !mIsBuilt) |
3259 | { | 3313 | { |
3260 | mBeam = NULL; | 3314 | mBeam = NULL; |
3315 | if(gSavedSettings.getBOOL("ParticleChat")) | ||
3316 | { | ||
3317 | if(sPartsNow != FALSE) | ||
3318 | { | ||
3319 | sPartsNow = FALSE; | ||
3320 | LLMessageSystem* msg = gMessageSystem; | ||
3321 | msg->newMessageFast(_PREHASH_ChatFromViewer); | ||
3322 | msg->nextBlockFast(_PREHASH_AgentData); | ||
3323 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
3324 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
3325 | msg->nextBlockFast(_PREHASH_ChatData); | ||
3326 | msg->addStringFast(_PREHASH_Message, "stop"); | ||
3327 | msg->addU8Fast(_PREHASH_Type, CHAT_TYPE_WHISPER); | ||
3328 | msg->addS32("Channel", 9000); | ||
3329 | |||
3330 | gAgent.sendReliableMessage(); | ||
3331 | sBeamLastAt = LLVector3d::zero; | ||
3332 | LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT); | ||
3333 | } | ||
3334 | } | ||
3261 | } | 3335 | } |
3262 | else if (!mBeam || mBeam->isDead()) | 3336 | else if (!mBeam || mBeam->isDead()) |
3263 | { | 3337 | { |
@@ -3276,6 +3350,48 @@ void LLVOAvatar::idleUpdateTractorBeam() | |||
3276 | { | 3350 | { |
3277 | // get point from pointat effect | 3351 | // get point from pointat effect |
3278 | mBeam->setPositionGlobal(gAgent.mPointAt->getPointAtPosGlobal()); | 3352 | mBeam->setPositionGlobal(gAgent.mPointAt->getPointAtPosGlobal()); |
3353 | |||
3354 | if(gSavedSettings.getBOOL("ParticleChat")) | ||
3355 | { | ||
3356 | if(sPartsNow != TRUE) | ||
3357 | { | ||
3358 | sPartsNow = TRUE; | ||
3359 | LLMessageSystem* msg = gMessageSystem; | ||
3360 | msg->newMessageFast(_PREHASH_ChatFromViewer); | ||
3361 | msg->nextBlockFast(_PREHASH_AgentData); | ||
3362 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
3363 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
3364 | msg->nextBlockFast(_PREHASH_ChatData); | ||
3365 | msg->addStringFast(_PREHASH_Message, "start"); | ||
3366 | msg->addU8Fast(_PREHASH_Type, CHAT_TYPE_WHISPER); | ||
3367 | msg->addS32("Channel", 9000); | ||
3368 | |||
3369 | gAgent.sendReliableMessage(); | ||
3370 | |||
3371 | LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT); | ||
3372 | } | ||
3373 | //LLVector3d a = sBeamLastAt-gAgent.mPointAt->getPointAtPosGlobal(); | ||
3374 | //if(a.length > 2) | ||
3375 | if( (sBeamLastAt-gAgent.mPointAt->getPointAtPosGlobal()).length() > .2) | ||
3376 | //if(sBeamLastAt!=gAgent.mPointAt->getPointAtPosGlobal()) | ||
3377 | { | ||
3378 | sBeamLastAt = gAgent.mPointAt->getPointAtPosGlobal(); | ||
3379 | |||
3380 | LLMessageSystem* msg = gMessageSystem; | ||
3381 | msg->newMessageFast(_PREHASH_ChatFromViewer); | ||
3382 | msg->nextBlockFast(_PREHASH_AgentData); | ||
3383 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
3384 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
3385 | msg->nextBlockFast(_PREHASH_ChatData); | ||
3386 | msg->addStringFast(_PREHASH_Message, llformat("<%.6f, %.6f, %.6f>",(F32)(sBeamLastAt.mdV[VX]),(F32)(sBeamLastAt.mdV[VY]),(F32)(sBeamLastAt.mdV[VZ]))); | ||
3387 | msg->addU8Fast(_PREHASH_Type, CHAT_TYPE_WHISPER); | ||
3388 | msg->addS32("Channel", 9000); // *TODO: make configurable | ||
3389 | |||
3390 | gAgent.sendReliableMessage(); | ||
3391 | } | ||
3392 | |||
3393 | } | ||
3394 | |||
3279 | mBeam->triggerLocal(); | 3395 | mBeam->triggerLocal(); |
3280 | } | 3396 | } |
3281 | else if (selection->getFirstRootObject() && | 3397 | else if (selection->getFirstRootObject() && |
@@ -5932,6 +6048,40 @@ BOOL LLVOAvatar::attachObject(LLViewerObject *viewer_object) | |||
5932 | { | 6048 | { |
5933 | updateAttachmentVisibility(gAgent.getCameraMode()); | 6049 | updateAttachmentVisibility(gAgent.getCameraMode()); |
5934 | 6050 | ||
6051 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
6052 | if (rlv_handler_t::isEnabled()) | ||
6053 | { | ||
6054 | static bool fRlvFullyLoaded = false; | ||
6055 | static LLFrameTimer* pRlvFullyLoadedTimer = NULL; | ||
6056 | |||
6057 | // There's no way to know when we're done reattaching what was attached at log-off but this ugly evil bad hack tries anyway | ||
6058 | if (!fRlvFullyLoaded) | ||
6059 | { | ||
6060 | if (pRlvFullyLoadedTimer) | ||
6061 | { | ||
6062 | if (pRlvFullyLoadedTimer->getElapsedTimeF32() > 30.0f) | ||
6063 | { | ||
6064 | fRlvFullyLoaded = true; | ||
6065 | delete pRlvFullyLoadedTimer; | ||
6066 | pRlvFullyLoadedTimer = NULL; | ||
6067 | } | ||
6068 | else | ||
6069 | { | ||
6070 | pRlvFullyLoadedTimer->reset(); | ||
6071 | } | ||
6072 | } | ||
6073 | else if ( (!pRlvFullyLoadedTimer) && | ||
6074 | ( (0 == mPendingAttachment.size()) || | ||
6075 | ((1 == mPendingAttachment.size()) && (mPendingAttachment[0] == viewer_object)) ) ) | ||
6076 | { | ||
6077 | pRlvFullyLoadedTimer = new LLFrameTimer(); | ||
6078 | } | ||
6079 | } | ||
6080 | |||
6081 | gRlvHandler.onAttach(attachment, fRlvFullyLoaded); | ||
6082 | } | ||
6083 | // [/RLVa:KB] | ||
6084 | |||
5935 | // Then make sure the inventory is in sync with the avatar. | 6085 | // Then make sure the inventory is in sync with the avatar. |
5936 | gInventory.addChangedMask( LLInventoryObserver::LABEL, attachment->getItemID() ); | 6086 | gInventory.addChangedMask( LLInventoryObserver::LABEL, attachment->getItemID() ); |
5937 | gInventory.notifyObservers(); | 6087 | gInventory.notifyObservers(); |
@@ -5993,6 +6143,14 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) | |||
5993 | // only one object per attachment point for now | 6143 | // only one object per attachment point for now |
5994 | if (attachment->getObject() == viewer_object) | 6144 | if (attachment->getObject() == viewer_object) |
5995 | { | 6145 | { |
6146 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
6147 | // URGENT-RLV: it looks like LLApp::isExiting() isn't always accurate so find something better (if it exists) | ||
6148 | if ( (rlv_handler_t::isEnabled()) && (!LLApp::isExiting()) && (mIsSelf) ) | ||
6149 | { | ||
6150 | gRlvHandler.onDetach(attachment); | ||
6151 | } | ||
6152 | // [/RLVa:KB] | ||
6153 | |||
5996 | LLUUID item_id = attachment->getItemID(); | 6154 | LLUUID item_id = attachment->getItemID(); |
5997 | attachment->removeObject(viewer_object); | 6155 | attachment->removeObject(viewer_object); |
5998 | if (mIsSelf) | 6156 | if (mIsSelf) |
@@ -6051,6 +6209,14 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object) | |||
6051 | 6209 | ||
6052 | gPipeline.markMoved(mDrawable, TRUE); | 6210 | gPipeline.markMoved(mDrawable, TRUE); |
6053 | mIsSitting = TRUE; | 6211 | mIsSitting = TRUE; |
6212 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
6213 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
6214 | if (rlv_handler_t::isEnabled()) | ||
6215 | { | ||
6216 | RlvSettings::updateLoginLastLocation(); | ||
6217 | } | ||
6218 | #endif // RLV_EXTENSION_STARTLOCATION | ||
6219 | // [/RLVa:KB] | ||
6054 | mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject | 6220 | mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject |
6055 | mRoot.setPosition(getPosition()); | 6221 | mRoot.setPosition(getPosition()); |
6056 | mRoot.updateWorldMatrixChildren(); | 6222 | mRoot.updateWorldMatrixChildren(); |
@@ -6112,6 +6278,14 @@ void LLVOAvatar::getOffObject() | |||
6112 | gPipeline.markMoved(mDrawable, TRUE); | 6278 | gPipeline.markMoved(mDrawable, TRUE); |
6113 | 6279 | ||
6114 | mIsSitting = FALSE; | 6280 | mIsSitting = FALSE; |
6281 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
6282 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
6283 | if (rlv_handler_t::isEnabled()) | ||
6284 | { | ||
6285 | RlvSettings::updateLoginLastLocation(); | ||
6286 | } | ||
6287 | #endif // RLV_EXTENSION_STARTLOCATION | ||
6288 | // [/RLVa:KB] | ||
6115 | mRoot.getXform()->setParent(NULL); // LLVOAvatar::getOffObject | 6289 | mRoot.getXform()->setParent(NULL); // LLVOAvatar::getOffObject |
6116 | mRoot.setPosition(cur_position_world); | 6290 | mRoot.setPosition(cur_position_world); |
6117 | mRoot.setRotation(cur_rotation_world); | 6291 | mRoot.setRotation(cur_rotation_world); |
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h index f8b2c06..f6d5e27 100644 --- a/linden/indra/newview/llvoavatar.h +++ b/linden/indra/newview/llvoavatar.h | |||
@@ -592,6 +592,10 @@ private: | |||
592 | LLTimer mAnimTimer; | 592 | LLTimer mAnimTimer; |
593 | F32 mTimeLast; | 593 | F32 mTimeLast; |
594 | 594 | ||
595 | // Send selection beam info to scripts | ||
596 | static int sPartsNow; | ||
597 | static LLVector3d sBeamLastAt; | ||
598 | |||
595 | LLPointer<LLHUDEffectSpiral> mBeam; | 599 | LLPointer<LLHUDEffectSpiral> mBeam; |
596 | LLFrameTimer mBeamTimer; | 600 | LLFrameTimer mBeamTimer; |
597 | 601 | ||
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index dd68733..d543a65 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp | |||
@@ -1978,7 +1978,11 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e | |||
1978 | 1978 | ||
1979 | { | 1979 | { |
1980 | if (!mbCanSelect || | 1980 | if (!mbCanSelect || |
1981 | (gHideSelectedObjects && isSelected()) || | 1981 | // (gHideSelectedObjects && isSelected()) || |
1982 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
1983 | ( (gHideSelectedObjects && isSelected()) && | ||
1984 | ((!rlv_handler_t::isEnabled()) || (!isHUDAttachment()) || (gRlvHandler.isDetachable(this))) ) || | ||
1985 | // [/RLVa:KB] | ||
1982 | mDrawable->isDead() || | 1986 | mDrawable->isDead() || |
1983 | !gPipeline.hasRenderType(mDrawable->getRenderType())) | 1987 | !gPipeline.hasRenderType(mDrawable->getRenderType())) |
1984 | { | 1988 | { |
@@ -2120,10 +2124,18 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, | |||
2120 | { | 2124 | { |
2121 | LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); | 2125 | LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); |
2122 | 2126 | ||
2123 | if (facep->getViewerObject()->isSelected() && gHideSelectedObjects) | 2127 | // if (facep->getViewerObject()->isSelected() && gHideSelectedObjects) |
2128 | // { | ||
2129 | // return; | ||
2130 | // } | ||
2131 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
2132 | LLViewerObject* pObj = facep->getViewerObject(); | ||
2133 | if ( (pObj->isSelected() && gHideSelectedObjects) && | ||
2134 | ((!rlv_handler_t::isEnabled()) || (!pObj->isHUDAttachment()) || (gRlvHandler.isDetachable(pObj))) ) | ||
2124 | { | 2135 | { |
2125 | return; | 2136 | return; |
2126 | } | 2137 | } |
2138 | // [/RVLa:KB] | ||
2127 | 2139 | ||
2128 | //add face to drawmap | 2140 | //add face to drawmap |
2129 | LLSpatialGroup::drawmap_elem_t& draw_vec = group->mDrawMap[type]; | 2141 | LLSpatialGroup::drawmap_elem_t& draw_vec = group->mDrawMap[type]; |
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp index a5f4dc9..bf5fd4a 100644 --- a/linden/indra/newview/llwearable.cpp +++ b/linden/indra/newview/llwearable.cpp | |||
@@ -153,41 +153,87 @@ EWearableType LLWearable::typeNameToType( const std::string& type_name ) | |||
153 | return WT_INVALID; | 153 | return WT_INVALID; |
154 | } | 154 | } |
155 | 155 | ||
156 | 156 | const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ignore */ | |
157 | std::string terse_F32_to_string( F32 f ) | ||
158 | { | 157 | { |
159 | std::string r = llformat( "%.2f", f ); | 158 | char* r = s; |
159 | S32 len = snprintf( s, MAX_STRING, "%.2f", f ); /* Flawfinder: ignore */ | ||
160 | 160 | ||
161 | // "1.20" -> "1.2" | 161 | // "1.20" -> "1.2" |
162 | // "24.00" -> "24." | 162 | // "24.00" -> "24." |
163 | S32 len = r.length(); | 163 | while( '0' == r[len - 1] ) |
164 | while( len > 0 && '0' == r[len - 1] ) | ||
165 | { | 164 | { |
166 | r.erase(len-1, 1); | 165 | len--; |
167 | len--; | 166 | r[len] = '\0'; |
168 | } | 167 | } |
169 | 168 | ||
170 | if( '.' == r[len - 1] ) | 169 | if( '.' == r[len - 1] ) |
171 | { | 170 | { |
172 | // "24." -> "24" | 171 | // "24." -> "24" |
173 | r.erase(len-1, 1); | 172 | len--; |
173 | r[len] = '\0'; | ||
174 | } | 174 | } |
175 | else | 175 | else |
176 | if( ('-' == r[0]) && ('0' == r[1]) ) | 176 | if( ('-' == r[0]) && ('0' == r[1]) ) |
177 | { | 177 | { |
178 | // "-0.59" -> "-.59" | 178 | // "-0.59" -> "-.59" |
179 | r.erase(1, 1); | 179 | r++; |
180 | r[0] = '-'; | ||
180 | } | 181 | } |
181 | else | 182 | else |
182 | if( '0' == r[0] ) | 183 | if( '0' == r[0] ) |
183 | { | 184 | { |
184 | // "0.59" -> ".59" | 185 | // "0.59" -> ".59" |
185 | r.erase(0, 1); | 186 | r++; |
186 | } | 187 | } |
187 | 188 | ||
188 | return r; | 189 | return r; |
189 | } | 190 | } |
190 | 191 | ||
192 | // reX: new function | ||
193 | BOOL LLWearable::FileExportParams( FILE* file ) | ||
194 | { | ||
195 | // wearable type | ||
196 | S32 type = (S32)mType; | ||
197 | fprintf( file, "type %d\n", type ); | ||
198 | |||
199 | // parameters | ||
200 | S32 num_parameters = mVisualParamMap.size(); | ||
201 | fprintf( file, "parameters %d\n", num_parameters ); | ||
202 | |||
203 | char s[ MAX_STRING ]; /* Flawfinder: ignore */ | ||
204 | for (param_map_t::iterator iter = mVisualParamMap.begin(); | ||
205 | iter != mVisualParamMap.end(); ++iter) | ||
206 | { | ||
207 | S32 param_id = iter->first; | ||
208 | F32 param_weight = iter->second; | ||
209 | fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight, s ) ); | ||
210 | } | ||
211 | |||
212 | return TRUE; | ||
213 | } | ||
214 | |||
215 | // reX: new function | ||
216 | BOOL LLWearable::FileExportTextures( FILE* file ) | ||
217 | { | ||
218 | // wearable type | ||
219 | S32 type = (S32)mType; | ||
220 | fprintf( file, "type %d\n", type ); | ||
221 | |||
222 | // texture entries | ||
223 | S32 num_textures = mTEMap.size(); | ||
224 | fprintf( file, "textures %d\n", num_textures ); | ||
225 | |||
226 | for (te_map_t::iterator iter = mTEMap.begin(); | ||
227 | iter != mTEMap.end(); ++iter) | ||
228 | { | ||
229 | S32 te = iter->first; | ||
230 | LLUUID& image_id = iter->second; | ||
231 | fprintf( file, "%d %s\n", te, image_id.asString().c_str() ); | ||
232 | } | ||
233 | |||
234 | return TRUE; | ||
235 | } | ||
236 | |||
191 | BOOL LLWearable::exportFile( LLFILE* file ) | 237 | BOOL LLWearable::exportFile( LLFILE* file ) |
192 | { | 238 | { |
193 | // header and version | 239 | // header and version |
@@ -234,12 +280,13 @@ BOOL LLWearable::exportFile( LLFILE* file ) | |||
234 | return FALSE; | 280 | return FALSE; |
235 | } | 281 | } |
236 | 282 | ||
283 | char s[ MAX_STRING ]; /* Flawfinder: ignore */ | ||
237 | for (param_map_t::iterator iter = mVisualParamMap.begin(); | 284 | for (param_map_t::iterator iter = mVisualParamMap.begin(); |
238 | iter != mVisualParamMap.end(); ++iter) | 285 | iter != mVisualParamMap.end(); ++iter) |
239 | { | 286 | { |
240 | S32 param_id = iter->first; | 287 | S32 param_id = iter->first; |
241 | F32 param_weight = iter->second; | 288 | F32 param_weight = iter->second; |
242 | if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight ).c_str() ) < 0 ) | 289 | if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight, s ) ) < 0 ) |
243 | { | 290 | { |
244 | return FALSE; | 291 | return FALSE; |
245 | } | 292 | } |
diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h index 252f80c..6e473c1 100644 --- a/linden/indra/newview/llwearable.h +++ b/linden/indra/newview/llwearable.h | |||
@@ -61,6 +61,10 @@ public: | |||
61 | 61 | ||
62 | BOOL exportFile(LLFILE* file); | 62 | BOOL exportFile(LLFILE* file); |
63 | BOOL importFile(LLFILE* file); | 63 | BOOL importFile(LLFILE* file); |
64 | // reX: new function | ||
65 | BOOL FileExportParams(FILE* file); | ||
66 | // reX: new function | ||
67 | BOOL FileExportTextures(FILE* file); | ||
64 | 68 | ||
65 | EWearableType getType() const { return mType; } | 69 | EWearableType getType() const { return mType; } |
66 | void setType( EWearableType type ) { mType = type; } | 70 | void setType( EWearableType type ) { mType = type; } |
diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp index 512c03f..954321f 100644 --- a/linden/indra/newview/llwearablelist.cpp +++ b/linden/indra/newview/llwearablelist.cpp | |||
@@ -43,6 +43,9 @@ | |||
43 | #include "llviewerstats.h" | 43 | #include "llviewerstats.h" |
44 | #include "llnotify.h" | 44 | #include "llnotify.h" |
45 | 45 | ||
46 | #include "llstartup.h" | ||
47 | #include "llpanellogin.h" | ||
48 | |||
46 | // Globals | 49 | // Globals |
47 | LLWearableList gWearableList; // Globally constructed; be careful that there's no dependency with gAgent. | 50 | LLWearableList gWearableList; // Globally constructed; be careful that there's no dependency with gAgent. |
48 | 51 | ||
@@ -195,12 +198,15 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID | |||
195 | } | 198 | } |
196 | else if (data->mName.empty()) | 199 | else if (data->mName.empty()) |
197 | { | 200 | { |
198 | LLNotifications::instance().add("FailedToFindWearableUnnamed", args); | 201 | // work around missing avatar part spam on grid to grid teleport login |
202 | //if(LLStartUp::shouldAutoLogin() && !gLoginHandler.mPassword.empty()) Jacek - Grid manager stuff that's changed with 1.23 | ||
203 | LLNotifications::instance().add("FailedToFindWearableUnnamed", args); | ||
199 | } | 204 | } |
200 | else | 205 | else |
201 | { | 206 | { |
202 | args["DESC"] = data->mName; | 207 | args["DESC"] = data->mName; |
203 | LLNotifications::instance().add("FailedToFindWearable", args); | 208 | //if(LLStartUp::shouldAutoLogin() && !gLoginHandler.mPassword.empty()) Jacek - Grid manager stuff that's changed with 1.23 |
209 | LLNotifications::instance().add("FailedToFindWearable", args); | ||
204 | } | 210 | } |
205 | } | 211 | } |
206 | // Always call callback; wearable will be NULL if we failed | 212 | // Always call callback; wearable will be NULL if we failed |
diff --git a/linden/indra/newview/llwindlightremotectrl.cpp b/linden/indra/newview/llwindlightremotectrl.cpp new file mode 100644 index 0000000..f805763 --- /dev/null +++ b/linden/indra/newview/llwindlightremotectrl.cpp | |||
@@ -0,0 +1,312 @@ | |||
1 | /** | ||
2 | * @file llwindlightremotectrl.cpp | ||
3 | * @brief toolbar remote for windlight options and presets | ||
4 | * | ||
5 | * $LicenseInfo:firstyear=2009&license=viewergpl$ | ||
6 | * | ||
7 | * Copyright (c) 2009, McCabe Maxsted | ||
8 | * | ||
9 | * Imprudence Viewer Source Code | ||
10 | * The source code in this file ("Source Code") is provided to you | ||
11 | * under the terms of the GNU General Public License, version 2.0 | ||
12 | * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in | ||
13 | * this distribution, or online at | ||
14 | * http://secondlifegrid.net/programs/open_source/licensing/gplv2 | ||
15 | * | ||
16 | * There are special exceptions to the terms and conditions of the GPL as | ||
17 | * it is applied to this Source Code. View the full text of the exception | ||
18 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
19 | * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
20 | * | ||
21 | * By copying, modifying or distributing this software, you acknowledge | ||
22 | * that you have read and understood your obligations described above, | ||
23 | * and agree to abide by those obligations. | ||
24 | * | ||
25 | * ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO | ||
26 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
27 | * COMPLETENESS OR PERFORMANCE. | ||
28 | * $/LicenseInfo$ | ||
29 | */ | ||
30 | |||
31 | #include "llviewerprecompiledheaders.h" | ||
32 | |||
33 | #include "llwindlightremotectrl.h" | ||
34 | |||
35 | #include "llbutton.h" | ||
36 | #include "llcombobox.h" | ||
37 | #include "llfloaterenvsettings.h" | ||
38 | #include "llfloaterwater.h" | ||
39 | #include "llfloaterwindlight.h" | ||
40 | #include "lloverlaybar.h" | ||
41 | #include "lluictrlfactory.h" | ||
42 | #include "llwlparammanager.h" | ||
43 | #include "llviewercontrol.h" | ||
44 | |||
45 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
46 | #include "rlvhandler.h" | ||
47 | // [/RLVa:KB] | ||
48 | |||
49 | class LLWindlightRemoteObserver : public LLWLPresetsObserver | ||
50 | { | ||
51 | public: | ||
52 | LLWindlightRemoteObserver(LLWindlightRemoteCtrl* wind_rem) : mWindlightRemote(wind_rem){} | ||
53 | virtual ~LLWindlightRemoteObserver() {} | ||
54 | virtual void changed() { mWindlightRemote->refreshPresets(); } | ||
55 | private: | ||
56 | LLWindlightRemoteCtrl* mWindlightRemote; | ||
57 | }; | ||
58 | |||
59 | |||
60 | LLWindlightRemoteCtrl::LLWindlightRemoteCtrl() | ||
61 | { | ||
62 | mPresetsCombo = NULL; | ||
63 | mObserver = NULL; | ||
64 | setIsChrome(TRUE); | ||
65 | |||
66 | build(); | ||
67 | |||
68 | setFocusRoot(TRUE); | ||
69 | } | ||
70 | |||
71 | LLWindlightRemoteCtrl::~LLWindlightRemoteCtrl() | ||
72 | { | ||
73 | delete mObserver; | ||
74 | mObserver = NULL; | ||
75 | } | ||
76 | |||
77 | void LLWindlightRemoteCtrl::draw() | ||
78 | { | ||
79 | LLButton* expand_button = getChild<LLButton>("Popup"); | ||
80 | if (expand_button) | ||
81 | { | ||
82 | if (expand_button->getToggleState()) | ||
83 | { | ||
84 | expand_button->setImageOverlay("arrow_down.tga"); | ||
85 | } | ||
86 | else | ||
87 | { | ||
88 | expand_button->setImageOverlay("arrow_up.tga"); | ||
89 | } | ||
90 | } | ||
91 | |||
92 | // [RLVa:KB] - Alternate: Imprudence-1.2.0 | ||
93 | if (rlv_handler_t::isEnabled()) | ||
94 | { | ||
95 | childSetEnabled("Environment", !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)); | ||
96 | mPresetsCombo->setEnabled(!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)); | ||
97 | } | ||
98 | // [/RLVA:KB] | ||
99 | |||
100 | LLPanel::draw(); | ||
101 | } | ||
102 | |||
103 | void LLWindlightRemoteCtrl::build() | ||
104 | { | ||
105 | if (gSavedSettings.getBOOL("ShowWindlightSettingsPopup")) | ||
106 | { | ||
107 | LLUICtrlFactory::getInstance()->buildPanel(this, "panel_windlight_remote_expanded.xml"); | ||
108 | } | ||
109 | else | ||
110 | { | ||
111 | LLUICtrlFactory::getInstance()->buildPanel(this, "panel_windlight_remote.xml"); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | BOOL LLWindlightRemoteCtrl::postBuild() | ||
116 | { | ||
117 | |||
118 | childSetAction("Environment", onClickToggleEnvironment, this); | ||
119 | childSetAction("Popup", onClickPopupBtn, this); | ||
120 | |||
121 | mPresetsCombo = getChild<LLComboBox>("Presets"); | ||
122 | if (mPresetsCombo) | ||
123 | { | ||
124 | mPresetsCombo->setCommitCallback(onCommitPreset); | ||
125 | mPresetsCombo->setCallbackUserData(this); | ||
126 | |||
127 | // set up observer to follow changes | ||
128 | mObserver = new LLWindlightRemoteObserver(this); | ||
129 | LLWLParamManager::addObserver(mObserver); | ||
130 | |||
131 | // refresh list from current presets | ||
132 | refreshPresets(); | ||
133 | } | ||
134 | |||
135 | return TRUE; | ||
136 | } | ||
137 | |||
138 | void LLWindlightRemoteCtrl::refreshPresets() | ||
139 | { | ||
140 | if (mPresetsCombo) | ||
141 | { | ||
142 | // snag current preset | ||
143 | LLWLParamManager * param_mgr = LLWLParamManager::instance(); | ||
144 | LLWLParamSet& currentParams = param_mgr->mCurParams; | ||
145 | |||
146 | // clear in case presets names have changed | ||
147 | mPresetsCombo->clearRows(); | ||
148 | |||
149 | std::map<std::string, LLWLParamSet>::iterator mIt = | ||
150 | param_mgr->mParamList.begin(); | ||
151 | for(; mIt != param_mgr->mParamList.end(); mIt++) | ||
152 | { | ||
153 | mPresetsCombo->add(mIt->first); | ||
154 | } | ||
155 | |||
156 | // insert separator and add World menu options | ||
157 | mPresetsCombo->addSeparator(ADD_BOTTOM); | ||
158 | mPresetsCombo->addSimpleElement(getString("atmosphere"), ADD_BOTTOM); | ||
159 | mPresetsCombo->addSimpleElement(getString("lighting"), ADD_BOTTOM); | ||
160 | mPresetsCombo->addSimpleElement(getString("clouds"), ADD_BOTTOM); | ||
161 | mPresetsCombo->addSimpleElement(getString("advanced_water"), ADD_BOTTOM); | ||
162 | mPresetsCombo->addSeparator(ADD_BOTTOM); | ||
163 | mPresetsCombo->addSimpleElement(getString("sunrise"), ADD_BOTTOM); | ||
164 | mPresetsCombo->addSimpleElement(getString("noon"), ADD_BOTTOM); | ||
165 | mPresetsCombo->addSimpleElement(getString("sunset"), ADD_BOTTOM); | ||
166 | mPresetsCombo->addSimpleElement(getString("midnight"), ADD_BOTTOM); | ||
167 | mPresetsCombo->addSimpleElement(getString("revert_region"), ADD_BOTTOM); | ||
168 | |||
169 | if (mPresetsCombo->getSelectedItemLabel() != currentParams.mName && | ||
170 | !currentParams.mName.empty()) | ||
171 | { | ||
172 | mPresetsCombo->selectByValue(LLSD(currentParams.mName)); | ||
173 | } | ||
174 | else | ||
175 | { | ||
176 | mPresetsCombo->selectByValue(LLSD("Default")); | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | |||
181 | // static | ||
182 | void LLWindlightRemoteCtrl::onCommitPreset(LLUICtrl* ctrl, void* data) | ||
183 | { | ||
184 | LLWindlightRemoteCtrl* self = (LLWindlightRemoteCtrl*)data; | ||
185 | |||
186 | LLCtrlListInterface* presets = self->mPresetsCombo ? self->mPresetsCombo->getListInterface() : NULL; | ||
187 | if (presets) | ||
188 | { | ||
189 | S32 index = presets->getFirstSelectedIndex(); | ||
190 | if (index < 0) | ||
191 | { | ||
192 | // Open Advanced Sky | ||
193 | LLFloaterWindLight::show(); | ||
194 | return; | ||
195 | } | ||
196 | |||
197 | // check for World menu options; if none, apply preset | ||
198 | std::string selected = self->mPresetsCombo->getSelectedValue().asString(); | ||
199 | |||
200 | if (selected == self->getString("atmosphere")) | ||
201 | { | ||
202 | if (!LLFloaterWindLight::instance()->getVisible()) | ||
203 | { | ||
204 | LLFloaterWindLight::show(); | ||
205 | } | ||
206 | LLFloaterWindLight::instance()->selectTab("Atmosphere"); | ||
207 | } | ||
208 | else if (selected == self->getString("lighting")) | ||
209 | { | ||
210 | if (!LLFloaterWindLight::instance()->getVisible()) | ||
211 | { | ||
212 | LLFloaterWindLight::show(); | ||
213 | } | ||
214 | LLFloaterWindLight::instance()->selectTab("Lighting"); | ||
215 | } | ||
216 | else if (selected == self->getString("clouds")) | ||
217 | { | ||
218 | if (!LLFloaterWindLight::instance()->getVisible()) | ||
219 | { | ||
220 | LLFloaterWindLight::show(); | ||
221 | } | ||
222 | LLFloaterWindLight::instance()->selectTab("Clouds"); | ||
223 | } | ||
224 | else if (selected == self->getString("advanced_water")) | ||
225 | { | ||
226 | LLFloaterWater::show(); | ||
227 | } | ||
228 | else if (selected == self->getString("sunrise")) | ||
229 | { | ||
230 | // set the value, turn off animation | ||
231 | LLWLParamManager::instance()->mAnimator.setDayTime(0.25); | ||
232 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | ||
233 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | ||
234 | |||
235 | // then call update once | ||
236 | LLWLParamManager::instance()->mAnimator.update( | ||
237 | LLWLParamManager::instance()->mCurParams); | ||
238 | } | ||
239 | else if (selected == self->getString("noon")) | ||
240 | { | ||
241 | // set the value, turn off animation | ||
242 | LLWLParamManager::instance()->mAnimator.setDayTime(0.567); | ||
243 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | ||
244 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | ||
245 | |||
246 | // then call update once | ||
247 | LLWLParamManager::instance()->mAnimator.update( | ||
248 | LLWLParamManager::instance()->mCurParams); | ||
249 | } | ||
250 | else if (selected == self->getString("sunset")) | ||
251 | { | ||
252 | // set the value, turn off animation | ||
253 | LLWLParamManager::instance()->mAnimator.setDayTime(0.75); | ||
254 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | ||
255 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | ||
256 | |||
257 | // then call update once | ||
258 | LLWLParamManager::instance()->mAnimator.update( | ||
259 | LLWLParamManager::instance()->mCurParams); | ||
260 | } | ||
261 | else if (selected == self->getString("midnight")) | ||
262 | { | ||
263 | // set the value, turn off animation | ||
264 | LLWLParamManager::instance()->mAnimator.setDayTime(0.0); | ||
265 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | ||
266 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | ||
267 | |||
268 | // then call update once | ||
269 | LLWLParamManager::instance()->mAnimator.update( | ||
270 | LLWLParamManager::instance()->mCurParams); | ||
271 | } | ||
272 | else if (selected == self->getString("revert_region")) | ||
273 | { | ||
274 | LLWLParamManager::instance()->mAnimator.mIsRunning = true; | ||
275 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = true; | ||
276 | } | ||
277 | else | ||
278 | { | ||
279 | // Apply preset | ||
280 | LLWLParamManager::instance()->mAnimator.mIsRunning = false; | ||
281 | LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; | ||
282 | LLWLParamManager::instance()->loadPreset(selected, true); | ||
283 | } | ||
284 | } | ||
285 | } | ||
286 | |||
287 | // static | ||
288 | void LLWindlightRemoteCtrl::onClickToggleEnvironment(void* data) | ||
289 | { | ||
290 | // if evn settings not there or is hidden, show it | ||
291 | if( !LLFloaterEnvSettings::isOpen() || | ||
292 | !LLFloaterEnvSettings::instance()->getVisible()) | ||
293 | { | ||
294 | LLFloaterEnvSettings::show(); | ||
295 | |||
296 | // otherwise, close it button acts like a toggle | ||
297 | } | ||
298 | else | ||
299 | { | ||
300 | LLFloaterEnvSettings::instance()->close(); | ||
301 | } | ||
302 | } | ||
303 | |||
304 | //static | ||
305 | void LLWindlightRemoteCtrl::onClickPopupBtn(void* data) | ||
306 | { | ||
307 | LLWindlightRemoteCtrl* remotep = (LLWindlightRemoteCtrl*)data; | ||
308 | |||
309 | remotep->deleteAllChildren(); | ||
310 | remotep->build(); | ||
311 | gOverlayBar->layoutButtons(); | ||
312 | } | ||
diff --git a/linden/indra/newview/llwindlightremotectrl.h b/linden/indra/newview/llwindlightremotectrl.h new file mode 100644 index 0000000..e4ad2d5 --- /dev/null +++ b/linden/indra/newview/llwindlightremotectrl.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /** | ||
2 | * @file llwindlightremotectrl.h | ||
3 | * @brief toolbar remote for windlight options and presets | ||
4 | * | ||
5 | * $LicenseInfo:firstyear=2009&license=viewergpl$ | ||
6 | * | ||
7 | * Copyright (c) 2009, McCabe Maxsted | ||
8 | * | ||
9 | * Imprudence Viewer Source Code | ||
10 | * The source code in this file ("Source Code") is provided to you | ||
11 | * under the terms of the GNU General Public License, version 2.0 | ||
12 | * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in | ||
13 | * this distribution, or online at | ||
14 | * http://secondlifegrid.net/programs/open_source/licensing/gplv2 | ||
15 | * | ||
16 | * There are special exceptions to the terms and conditions of the GPL as | ||
17 | * it is applied to this Source Code. View the full text of the exception | ||
18 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
19 | * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
20 | * | ||
21 | * By copying, modifying or distributing this software, you acknowledge | ||
22 | * that you have read and understood your obligations described above, | ||
23 | * and agree to abide by those obligations. | ||
24 | * | ||
25 | * ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO | ||
26 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
27 | * COMPLETENESS OR PERFORMANCE. | ||
28 | * $/LicenseInfo$ | ||
29 | */ | ||
30 | |||
31 | #ifndef LL_LLWINDLIGHTREMOTECTRL_H | ||
32 | #define LL_LLWINDLIGHTREMOTECTRL_H | ||
33 | |||
34 | #include "llpanel.h" | ||
35 | |||
36 | class LLComboBox; | ||
37 | class LLWLPresetsObserver; | ||
38 | |||
39 | class LLWindlightRemoteCtrl : public LLPanel | ||
40 | { | ||
41 | public: | ||
42 | LLWindlightRemoteCtrl(); | ||
43 | virtual ~LLWindlightRemoteCtrl(); | ||
44 | /*virtual*/ BOOL postBuild(); | ||
45 | /*virtual*/ void draw(); | ||
46 | |||
47 | void refreshPresets(); | ||
48 | |||
49 | private: | ||
50 | LLComboBox* mPresetsCombo; | ||
51 | LLWLPresetsObserver* mObserver; | ||
52 | |||
53 | void build(); | ||
54 | |||
55 | static void onCommitPreset(LLUICtrl* ctrl, void* data); | ||
56 | static void onClickToggleEnvironment(void* data); | ||
57 | static void onClickPopupBtn(void* data); | ||
58 | }; | ||
59 | |||
60 | #endif | ||
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp index b8a2bf0..081313c 100644 --- a/linden/indra/newview/llwlparammanager.cpp +++ b/linden/indra/newview/llwlparammanager.cpp | |||
@@ -63,6 +63,7 @@ | |||
63 | #include "curl/curl.h" | 63 | #include "curl/curl.h" |
64 | 64 | ||
65 | LLWLParamManager * LLWLParamManager::sInstance = NULL; | 65 | LLWLParamManager * LLWLParamManager::sInstance = NULL; |
66 | std::vector<LLWLPresetsObserver*> LLWLParamManager::sObservers; | ||
66 | 67 | ||
67 | LLWLParamManager::LLWLParamManager() : | 68 | LLWLParamManager::LLWLParamManager() : |
68 | 69 | ||
@@ -239,6 +240,8 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate) | |||
239 | getParamSet(name, mCurParams); | 240 | getParamSet(name, mCurParams); |
240 | propagateParameters(); | 241 | propagateParameters(); |
241 | } | 242 | } |
243 | |||
244 | notifyObservers(); | ||
242 | } | 245 | } |
243 | 246 | ||
244 | void LLWLParamManager::savePreset(const std::string & name) | 247 | void LLWLParamManager::savePreset(const std::string & name) |
@@ -265,6 +268,7 @@ void LLWLParamManager::savePreset(const std::string & name) | |||
265 | presetsXML.close(); | 268 | presetsXML.close(); |
266 | 269 | ||
267 | propagateParameters(); | 270 | propagateParameters(); |
271 | notifyObservers(); | ||
268 | } | 272 | } |
269 | 273 | ||
270 | void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader) | 274 | void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader) |
@@ -539,6 +543,8 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_ | |||
539 | gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); | 543 | gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); |
540 | } | 544 | } |
541 | 545 | ||
546 | notifyObservers(); | ||
547 | |||
542 | return true; | 548 | return true; |
543 | } | 549 | } |
544 | 550 | ||
@@ -567,3 +573,37 @@ LLWLParamManager * LLWLParamManager::instance() | |||
567 | 573 | ||
568 | return sInstance; | 574 | return sInstance; |
569 | } | 575 | } |
576 | |||
577 | // static | ||
578 | void LLWLParamManager::addObserver(LLWLPresetsObserver* observer) | ||
579 | { | ||
580 | sObservers.push_back(observer); | ||
581 | } | ||
582 | |||
583 | // static | ||
584 | void LLWLParamManager::removeObserver(LLWLPresetsObserver* observer) | ||
585 | { | ||
586 | std::vector<LLWLPresetsObserver*>::iterator it; | ||
587 | it = std::find(sObservers.begin(), sObservers.end(), observer); | ||
588 | if (it != sObservers.end()) | ||
589 | { | ||
590 | sObservers.erase(it); | ||
591 | } | ||
592 | } | ||
593 | |||
594 | // Call this method when it's time to update everyone on a new state. | ||
595 | // Copy the list because an observer could respond by removing itself | ||
596 | // from the list. Static | ||
597 | void LLWLParamManager::notifyObservers() | ||
598 | { | ||
599 | lldebugs << "LLWLPresetsObserver::notifyObservers" << llendl; | ||
600 | |||
601 | std::vector<LLWLPresetsObserver*> observers = sObservers; | ||
602 | |||
603 | std::vector<LLWLPresetsObserver*>::iterator it; | ||
604 | for (it = observers.begin(); it != observers.end(); ++it) | ||
605 | { | ||
606 | LLWLPresetsObserver* observer = *it; | ||
607 | observer->changed(); | ||
608 | } | ||
609 | } | ||
diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h index a117dc1..6b6300c 100644 --- a/linden/indra/newview/llwlparammanager.h +++ b/linden/indra/newview/llwlparammanager.h | |||
@@ -41,6 +41,13 @@ | |||
41 | #include "llviewercamera.h" | 41 | #include "llviewercamera.h" |
42 | 42 | ||
43 | class LLGLSLShader; | 43 | class LLGLSLShader; |
44 | |||
45 | class LLWLPresetsObserver | ||
46 | { | ||
47 | public: | ||
48 | virtual ~LLWLPresetsObserver() { }; | ||
49 | virtual void changed() = 0; | ||
50 | }; | ||
44 | 51 | ||
45 | // color control | 52 | // color control |
46 | struct WLColorControl { | 53 | struct WLColorControl { |
@@ -196,6 +203,11 @@ public: | |||
196 | // singleton pattern implementation | 203 | // singleton pattern implementation |
197 | static LLWLParamManager * instance(); | 204 | static LLWLParamManager * instance(); |
198 | 205 | ||
206 | // manage observers | ||
207 | static void addObserver(LLWLPresetsObserver* observer); | ||
208 | static void removeObserver(LLWLPresetsObserver* observer); | ||
209 | static void notifyObservers(); | ||
210 | |||
199 | public: | 211 | public: |
200 | 212 | ||
201 | // helper variables | 213 | // helper variables |
@@ -250,12 +262,13 @@ public: | |||
250 | F32 mDomeRadius; | 262 | F32 mDomeRadius; |
251 | 263 | ||
252 | // list of all the parameters, listed by name | 264 | // list of all the parameters, listed by name |
253 | std::map<std::string, LLWLParamSet> mParamList; | 265 | std::map<std::string, LLWLParamSet> mParamList; |
254 | |||
255 | 266 | ||
256 | private: | 267 | private: |
257 | // our parameter manager singleton instance | 268 | // our parameter manager singleton instance |
258 | static LLWLParamManager * sInstance; | 269 | static LLWLParamManager * sInstance; |
270 | |||
271 | static std::vector<LLWLPresetsObserver*> sObservers; | ||
259 | 272 | ||
260 | }; | 273 | }; |
261 | 274 | ||
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp index 5944bce..02c7be3 100644 --- a/linden/indra/newview/llworld.cpp +++ b/linden/indra/newview/llworld.cpp | |||
@@ -118,6 +118,7 @@ LLWorld::LLWorld() : | |||
118 | 118 | ||
119 | void LLWorld::destroyClass() | 119 | void LLWorld::destroyClass() |
120 | { | 120 | { |
121 | mHoleWaterObjects.clear(); | ||
121 | gObjectList.destroy(); | 122 | gObjectList.destroy(); |
122 | for(region_list_t::iterator region_it = mRegionList.begin(); region_it != mRegionList.end(); ) | 123 | for(region_list_t::iterator region_it = mRegionList.begin(); region_it != mRegionList.end(); ) |
123 | { | 124 | { |
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp index cc94529..64e84c5 100644 --- a/linden/indra/newview/llworldmapview.cpp +++ b/linden/indra/newview/llworldmapview.cpp | |||
@@ -73,9 +73,10 @@ const S32 SCROLL_HINT_WIDTH = 65; | |||
73 | const F32 BIG_DOT_RADIUS = 5.f; | 73 | const F32 BIG_DOT_RADIUS = 5.f; |
74 | BOOL LLWorldMapView::sHandledLastClick = FALSE; | 74 | BOOL LLWorldMapView::sHandledLastClick = FALSE; |
75 | 75 | ||
76 | LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL; | ||
77 | LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL; | 76 | LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL; |
78 | LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL; | 77 | LLUIImagePtr LLWorldMapView::sAvatarYouImage = NULL; |
78 | LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL; | ||
79 | LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL; | ||
79 | LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL; | 80 | LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL; |
80 | LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL; | 81 | LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL; |
81 | 82 | ||
@@ -117,11 +118,12 @@ std::map<std::string,std::string> LLWorldMapView::sStringsMap; | |||
117 | 118 | ||
118 | void LLWorldMapView::initClass() | 119 | void LLWorldMapView::initClass() |
119 | { | 120 | { |
120 | sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga"); | ||
121 | sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); | 121 | sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); |
122 | sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); | 122 | sAvatarYouImage = LLUI::getUIImage("map_avatar_16.tga"); |
123 | sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); | 123 | sAvatarYouLargeImage = LLUI::getUIImage("map_avatar_you_32.tga"); |
124 | sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); | 124 | sAvatarLevelImage = LLUI::getUIImage("map_avatar_32.tga"); |
125 | sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_32.tga"); | ||
126 | sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_32.tga"); | ||
125 | 127 | ||
126 | sHomeImage = LLUI::getUIImage("map_home.tga"); | 128 | sHomeImage = LLUI::getUIImage("map_home.tga"); |
127 | sTelehubImage = LLUI::getUIImage("map_telehub.tga"); | 129 | sTelehubImage = LLUI::getUIImage("map_telehub.tga"); |
@@ -145,9 +147,10 @@ void LLWorldMapView::initClass() | |||
145 | // static | 147 | // static |
146 | void LLWorldMapView::cleanupClass() | 148 | void LLWorldMapView::cleanupClass() |
147 | { | 149 | { |
148 | sAvatarYouSmallImage = NULL; | ||
149 | sAvatarSmallImage = NULL; | 150 | sAvatarSmallImage = NULL; |
150 | sAvatarLargeImage = NULL; | 151 | sAvatarYouImage = NULL; |
152 | sAvatarYouLargeImage = NULL; | ||
153 | sAvatarLevelImage = NULL; | ||
151 | sAvatarAboveImage = NULL; | 154 | sAvatarAboveImage = NULL; |
152 | sAvatarBelowImage = NULL; | 155 | sAvatarBelowImage = NULL; |
153 | 156 | ||
@@ -680,10 +683,43 @@ void LLWorldMapView::draw() | |||
680 | // info->mAgents, | 683 | // info->mAgents, |
681 | // info->mName.c_str(), | 684 | // info->mName.c_str(), |
682 | // LLViewerRegion::accessToShortString(info->mAccess).c_str() ); | 685 | // LLViewerRegion::accessToShortString(info->mAccess).c_str() ); |
683 | if (info->mAccess == SIM_ACCESS_DOWN) | 686 | // [RLVa:KB] - Alternate: Snowglobe-1.0 | Checked: 2009-07-04 (RLVa-1.0.0a) |
687 | if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) | ||
688 | { | ||
689 | mesg = rlv_handler_t::cstrHidden; | ||
690 | } | ||
691 | else if (info->mAccess == SIM_ACCESS_DOWN) | ||
692 | // [/RLVa:KB] | ||
693 | // if (info->mAccess == SIM_ACCESS_DOWN) | ||
684 | { | 694 | { |
685 | mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str()); | 695 | mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str()); |
686 | } | 696 | } |
697 | else if (gSavedSettings.getBOOL("MapShowAgentCount") && gSavedSettings.getBOOL("MapShowPeople")) | ||
698 | { | ||
699 | // Display the agent count after the region name | ||
700 | S32 agent_count = LLWorldMap::getInstance()->mNumAgents[handle]; | ||
701 | LLViewerRegion *region = gAgent.getRegion(); | ||
702 | |||
703 | if (region && region->getHandle() == info->mHandle) | ||
704 | { | ||
705 | ++agent_count; // Bump by 1 if we're in this region | ||
706 | } | ||
707 | |||
708 | if (agent_count > 0) | ||
709 | { | ||
710 | //TODO: move this and the tooltip strings into XML | ||
711 | std::string count = llformat("%d %s", agent_count, agent_count > 1 ? "avatars" : "avatar"); | ||
712 | font->renderUTF8( | ||
713 | count, 0, | ||
714 | llfloor(left + 3), | ||
715 | llfloor(bottom + 20), | ||
716 | LLColor4::white, | ||
717 | LLFontGL::LEFT, | ||
718 | LLFontGL::BASELINE, | ||
719 | LLFontGL::DROP_SHADOW); | ||
720 | } | ||
721 | mesg = info->mName; | ||
722 | } | ||
687 | else | 723 | else |
688 | { | 724 | { |
689 | mesg = info->mName; | 725 | mesg = info->mName; |
@@ -775,7 +811,7 @@ void LLWorldMapView::draw() | |||
775 | 811 | ||
776 | // Now draw your avatar after all that other stuff. | 812 | // Now draw your avatar after all that other stuff. |
777 | LLVector3d pos_global = gAgent.getPositionGlobal(); | 813 | LLVector3d pos_global = gAgent.getPositionGlobal(); |
778 | drawImage(pos_global, sAvatarLargeImage); | 814 | drawImage(pos_global, sAvatarYouImage); |
779 | 815 | ||
780 | LLVector3 pos_map = globalPosToView(pos_global); | 816 | LLVector3 pos_map = globalPosToView(pos_global); |
781 | if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) | 817 | if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) |
@@ -1149,7 +1185,10 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4& | |||
1149 | text_x = llclamp(text_x, half_text_width + TEXT_PADDING, getRect().getWidth() - half_text_width - TEXT_PADDING); | 1185 | text_x = llclamp(text_x, half_text_width + TEXT_PADDING, getRect().getWidth() - half_text_width - TEXT_PADDING); |
1150 | text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - llround(font->getLineHeight()) - TEXT_PADDING - vert_offset); | 1186 | text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - llround(font->getLineHeight()) - TEXT_PADDING - vert_offset); |
1151 | 1187 | ||
1152 | if (label != "") | 1188 | //if (label != "") |
1189 | // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) | Added: RLVa-1.0.0a | ||
1190 | if ( (label != "") && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ) | ||
1191 | // [/RLVa:KB] | ||
1153 | { | 1192 | { |
1154 | font->renderUTF8( | 1193 | font->renderUTF8( |
1155 | label, 0, | 1194 | label, 0, |
@@ -1209,7 +1248,10 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* stic | |||
1209 | 1248 | ||
1210 | std::string message = | 1249 | std::string message = |
1211 | llformat("%s (%s)", | 1250 | llformat("%s (%s)", |
1212 | info->mName.c_str(), | 1251 | //info->mName.c_str(), |
1252 | // [RLVa:KB] - Alternate: Snowglobe-1.0 | Checked: 2009-07-04 (RLVa-1.0.0a) | ||
1253 | (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? info->mName.c_str() : rlv_handler_t::cstrHidden.c_str(), | ||
1254 | // [/RLVa:KB] | ||
1213 | LLViewerRegion::accessToString(info->mAccess).c_str()); | 1255 | LLViewerRegion::accessToString(info->mAccess).c_str()); |
1214 | 1256 | ||
1215 | if (info->mAccess != SIM_ACCESS_DOWN) | 1257 | if (info->mAccess != SIM_ACCESS_DOWN) |
@@ -1228,11 +1270,11 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* stic | |||
1228 | 1270 | ||
1229 | if (agent_count == 1) | 1271 | if (agent_count == 1) |
1230 | { | 1272 | { |
1231 | message += "person"; | 1273 | message += "avatar"; |
1232 | } | 1274 | } |
1233 | else | 1275 | else |
1234 | { | 1276 | { |
1235 | message += "people"; | 1277 | message += "avatars"; |
1236 | } | 1278 | } |
1237 | } | 1279 | } |
1238 | } | 1280 | } |
@@ -1308,7 +1350,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels, | |||
1308 | F32 dot_radius) | 1350 | F32 dot_radius) |
1309 | { | 1351 | { |
1310 | const F32 HEIGHT_THRESHOLD = 7.f; | 1352 | const F32 HEIGHT_THRESHOLD = 7.f; |
1311 | LLUIImagePtr dot_image = sAvatarSmallImage; | 1353 | LLUIImagePtr dot_image = sAvatarLevelImage; |
1312 | if(relative_z < -HEIGHT_THRESHOLD) | 1354 | if(relative_z < -HEIGHT_THRESHOLD) |
1313 | { | 1355 | { |
1314 | dot_image = sAvatarBelowImage; | 1356 | dot_image = sAvatarBelowImage; |
@@ -1317,9 +1359,13 @@ void LLWorldMapView::drawAvatar(F32 x_pixels, | |||
1317 | { | 1359 | { |
1318 | dot_image = sAvatarAboveImage; | 1360 | dot_image = sAvatarAboveImage; |
1319 | } | 1361 | } |
1362 | |||
1363 | S32 dot_width = llround(dot_radius * 2.f); | ||
1320 | dot_image->draw( | 1364 | dot_image->draw( |
1321 | llround(x_pixels) - dot_image->getWidth()/2, | 1365 | llround(x_pixels - dot_radius), |
1322 | llround(y_pixels) - dot_image->getHeight()/2, | 1366 | llround(y_pixels - dot_radius), |
1367 | dot_width, | ||
1368 | dot_width, | ||
1323 | color); | 1369 | color); |
1324 | } | 1370 | } |
1325 | 1371 | ||
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h index ac3bb3f..3245838 100644 --- a/linden/indra/newview/llworldmapview.h +++ b/linden/indra/newview/llworldmapview.h | |||
@@ -138,11 +138,13 @@ protected: | |||
138 | public: | 138 | public: |
139 | LLColor4 mBackgroundColor; | 139 | LLColor4 mBackgroundColor; |
140 | 140 | ||
141 | static LLUIImagePtr sAvatarYouSmallImage; | ||
142 | static LLUIImagePtr sAvatarSmallImage; | 141 | static LLUIImagePtr sAvatarSmallImage; |
143 | static LLUIImagePtr sAvatarLargeImage; | 142 | static LLUIImagePtr sAvatarYouImage; |
143 | static LLUIImagePtr sAvatarYouLargeImage; | ||
144 | static LLUIImagePtr sAvatarLevelImage; | ||
144 | static LLUIImagePtr sAvatarAboveImage; | 145 | static LLUIImagePtr sAvatarAboveImage; |
145 | static LLUIImagePtr sAvatarBelowImage; | 146 | static LLUIImagePtr sAvatarBelowImage; |
147 | |||
146 | static LLUIImagePtr sTelehubImage; | 148 | static LLUIImagePtr sTelehubImage; |
147 | static LLUIImagePtr sInfohubImage; | 149 | static LLUIImagePtr sInfohubImage; |
148 | static LLUIImagePtr sHomeImage; | 150 | static LLUIImagePtr sHomeImage; |
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp index d6bc6da..6fb2cec 100644 --- a/linden/indra/newview/pipeline.cpp +++ b/linden/indra/newview/pipeline.cpp | |||
@@ -1963,8 +1963,13 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera) | |||
1963 | 1963 | ||
1964 | if (gHideSelectedObjects) | 1964 | if (gHideSelectedObjects) |
1965 | { | 1965 | { |
1966 | if (drawablep->getVObj().notNull() && | 1966 | // if (drawablep->getVObj().notNull() && |
1967 | drawablep->getVObj()->isSelected()) | 1967 | // drawablep->getVObj()->isSelected()) |
1968 | // [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | ||
1969 | LLViewerObject* pObj = drawablep->getVObj(); | ||
1970 | if ( (pObj) && (pObj->isSelected()) && | ||
1971 | ((!rlv_handler_t::isEnabled()) || (!pObj->isHUDAttachment()) || (gRlvHandler.isDetachable(pObj))) ) | ||
1972 | // [/RVLa:KB] | ||
1968 | { | 1973 | { |
1969 | return; | 1974 | return; |
1970 | } | 1975 | } |
@@ -4184,6 +4189,11 @@ void LLPipeline::enableLightsAvatar() | |||
4184 | 4189 | ||
4185 | void LLPipeline::enableLightsAvatarEdit(const LLColor4& color) | 4190 | void LLPipeline::enableLightsAvatarEdit(const LLColor4& color) |
4186 | { | 4191 | { |
4192 | if (mLightingDetail < 1) | ||
4193 | { | ||
4194 | return; | ||
4195 | } | ||
4196 | |||
4187 | U32 mask = 0x2002; // Avatar backlight only, set ambient | 4197 | U32 mask = 0x2002; // Avatar backlight only, set ambient |
4188 | setupAvatarLights(TRUE); | 4198 | setupAvatarLights(TRUE); |
4189 | enableLights(mask); | 4199 | enableLights(mask); |
diff --git a/linden/indra/newview/primbackup.cpp b/linden/indra/newview/primbackup.cpp new file mode 100644 index 0000000..8dbf1df --- /dev/null +++ b/linden/indra/newview/primbackup.cpp | |||
@@ -0,0 +1,1106 @@ | |||
1 | |||
2 | #include "llviewerprecompiledheaders.h" | ||
3 | #include "llviewermenu.h" | ||
4 | |||
5 | |||
6 | // system library includes | ||
7 | #include <iostream> | ||
8 | #include <fstream> | ||
9 | #include <sstream> | ||
10 | |||
11 | // linden library includes | ||
12 | #include "llfilepicker.h" | ||
13 | #include "indra_constants.h" | ||
14 | #include "llsdserialize.h" | ||
15 | #include "llsdutil.h" | ||
16 | |||
17 | #include "llcallbacklist.h" | ||
18 | |||
19 | // newview includes | ||
20 | #include "llagent.h" | ||
21 | #include "llselectmgr.h" | ||
22 | #include "lltoolplacer.h" | ||
23 | |||
24 | #include "lltexturecache.h" | ||
25 | |||
26 | #include "llnotify.h" | ||
27 | |||
28 | #include "llapr.h" | ||
29 | #include "lldir.h" | ||
30 | #include "llimage.h" | ||
31 | #include "lllfsthread.h" | ||
32 | #include "llviewercontrol.h" | ||
33 | #include "llassetuploadresponders.h" | ||
34 | #include "lleconomy.h" | ||
35 | #include "llhttpclient.h" | ||
36 | #include "lluploaddialog.h" | ||
37 | #include "lldir.h" | ||
38 | #include "llinventorymodel.h" // gInventory | ||
39 | #include "llviewercontrol.h" // gSavedSettings | ||
40 | #include "llviewermenu.h" // gMenuHolder | ||
41 | #include "llagent.h" | ||
42 | #include "llfilepicker.h" | ||
43 | #include "llfloateranimpreview.h" | ||
44 | #include "llfloaterbuycurrency.h" | ||
45 | #include "llfloaterimagepreview.h" | ||
46 | #include "llfloaternamedesc.h" | ||
47 | #include "llfloatersnapshot.h" | ||
48 | #include "llinventorymodel.h" // gInventory | ||
49 | #include "llresourcedata.h" | ||
50 | #include "llstatusbar.h" | ||
51 | #include "llviewercontrol.h" // gSavedSettings | ||
52 | #include "llviewerimagelist.h" | ||
53 | #include "lluictrlfactory.h" | ||
54 | #include "llviewermenu.h" // gMenuHolder | ||
55 | #include "llviewerregion.h" | ||
56 | #include "llviewerstats.h" | ||
57 | #include "llviewerwindow.h" | ||
58 | #include "llappviewer.h" | ||
59 | #include "lluploaddialog.h" | ||
60 | // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout | ||
61 | #include "llappviewer.h" | ||
62 | #include "lltransactiontypes.h" | ||
63 | |||
64 | #include "primbackup.h" | ||
65 | |||
66 | #include "llviewerobjectlist.h" | ||
67 | |||
68 | primbackup* primbackup::sInstance = 0; | ||
69 | |||
70 | class importResponder: public LLNewAgentInventoryResponder | ||
71 | { | ||
72 | public: | ||
73 | |||
74 | importResponder(const LLSD& post_data, | ||
75 | const LLUUID& vfile_id, | ||
76 | LLAssetType::EType asset_type) | ||
77 | : LLNewAgentInventoryResponder(post_data, vfile_id, asset_type) | ||
78 | { | ||
79 | } | ||
80 | |||
81 | |||
82 | //virtual | ||
83 | virtual void uploadComplete(const LLSD& content) | ||
84 | { | ||
85 | lldebugs << "LLNewAgentInventoryResponder::result from capabilities" << llendl; | ||
86 | |||
87 | LLAssetType::EType asset_type = LLAssetType::lookup(mPostData["asset_type"].asString()); | ||
88 | LLInventoryType::EType inventory_type = LLInventoryType::lookup(mPostData["inventory_type"].asString()); | ||
89 | |||
90 | // Update L$ and ownership credit information | ||
91 | // since it probably changed on the server | ||
92 | if (asset_type == LLAssetType::AT_TEXTURE || | ||
93 | asset_type == LLAssetType::AT_SOUND || | ||
94 | asset_type == LLAssetType::AT_ANIMATION) | ||
95 | { | ||
96 | gMessageSystem->newMessageFast(_PREHASH_MoneyBalanceRequest); | ||
97 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | ||
98 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
99 | gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
100 | gMessageSystem->nextBlockFast(_PREHASH_MoneyData); | ||
101 | gMessageSystem->addUUIDFast(_PREHASH_TransactionID, LLUUID::null ); | ||
102 | gAgent.sendReliableMessage(); | ||
103 | |||
104 | // LLStringUtil::format_map_t args; | ||
105 | // args["[AMOUNT]"] = llformat("%d",LLGlobalEconomy::Singleton::getInstance()->getPriceUpload()); | ||
106 | // LLNotifyBox::showXml("UploadPayment", args); | ||
107 | } | ||
108 | |||
109 | // Actually add the upload to viewer inventory | ||
110 | llinfos << "Adding " << content["new_inventory_item"].asUUID() << " " | ||
111 | << content["new_asset"].asUUID() << " to inventory." << llendl; | ||
112 | if(mPostData["folder_id"].asUUID().notNull()) | ||
113 | { | ||
114 | LLPermissions perm; | ||
115 | U32 next_owner_perm; | ||
116 | perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, LLUUID::null); | ||
117 | if (mPostData["inventory_type"].asString() == "snapshot") | ||
118 | { | ||
119 | next_owner_perm = PERM_ALL; | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | next_owner_perm = PERM_MOVE | PERM_TRANSFER; | ||
124 | } | ||
125 | perm.initMasks(PERM_ALL, PERM_ALL, PERM_NONE, PERM_NONE, next_owner_perm); | ||
126 | S32 creation_date_now = time_corrected(); | ||
127 | LLPointer<LLViewerInventoryItem> item | ||
128 | = new LLViewerInventoryItem(content["new_inventory_item"].asUUID(), | ||
129 | mPostData["folder_id"].asUUID(), | ||
130 | perm, | ||
131 | content["new_asset"].asUUID(), | ||
132 | asset_type, | ||
133 | inventory_type, | ||
134 | mPostData["name"].asString(), | ||
135 | mPostData["description"].asString(), | ||
136 | LLSaleInfo::DEFAULT, | ||
137 | LLInventoryItem::II_FLAGS_NONE, | ||
138 | creation_date_now); | ||
139 | gInventory.updateItem(item); | ||
140 | gInventory.notifyObservers(); | ||
141 | } | ||
142 | else | ||
143 | { | ||
144 | llwarns << "Can't find a folder to put it in" << llendl; | ||
145 | } | ||
146 | |||
147 | // remove the "Uploading..." message | ||
148 | LLUploadDialog::modalUploadFinished(); | ||
149 | |||
150 | primbackup::getInstance()->update_map(content["new_asset"].asUUID()); | ||
151 | primbackup::getInstance()->upload_next_asset(); | ||
152 | |||
153 | } | ||
154 | |||
155 | }; | ||
156 | |||
157 | |||
158 | |||
159 | class CacheReadResponder : public LLTextureCache::ReadResponder | ||
160 | { | ||
161 | public: | ||
162 | CacheReadResponder(const LLUUID& id, LLImageFormatted* image) | ||
163 | : mFormattedImage(image), mID(id) | ||
164 | { | ||
165 | setImage(image); | ||
166 | } | ||
167 | void setData(U8* data, S32 datasize, S32 imagesize, S32 imageformat, BOOL imagelocal) | ||
168 | { | ||
169 | if(imageformat==IMG_CODEC_TGA && mFormattedImage->getCodec()==IMG_CODEC_J2C) | ||
170 | { | ||
171 | llwarns<<"Bleh its a tga not saving"<<llendl; | ||
172 | mFormattedImage=NULL; | ||
173 | mImageSize=0; | ||
174 | return; | ||
175 | } | ||
176 | |||
177 | if (mFormattedImage.notNull()) | ||
178 | { | ||
179 | llassert_always(mFormattedImage->getCodec() == imageformat); | ||
180 | mFormattedImage->appendData(data, datasize); | ||
181 | } | ||
182 | else | ||
183 | { | ||
184 | mFormattedImage = LLImageFormatted::createFromType(imageformat); | ||
185 | mFormattedImage->setData(data,datasize); | ||
186 | } | ||
187 | mImageSize = imagesize; | ||
188 | mImageLocal = imagelocal; | ||
189 | } | ||
190 | |||
191 | virtual void completed(bool success) | ||
192 | { | ||
193 | if(success && (mFormattedImage.notNull()) && mImageSize>0) | ||
194 | { | ||
195 | |||
196 | llinfos << "SUCCESS getting texture "<<mID<< llendl; | ||
197 | |||
198 | std::string name; | ||
199 | mID.toString(name); | ||
200 | llinfos << "Saving to "<<(primbackup::getInstance()->getfolder()+"//"+name)<<llendl; | ||
201 | if(!mFormattedImage->save(primbackup::getInstance()->getfolder()+"//"+name)) | ||
202 | { | ||
203 | llinfos << "FAIL saving texture "<<mID<< llendl; | ||
204 | } | ||
205 | |||
206 | } | ||
207 | else | ||
208 | { | ||
209 | if(!success) | ||
210 | llwarns << "FAIL NOT SUCCESSFUL getting texture "<<mID<< llendl; | ||
211 | if(mFormattedImage.isNull()) | ||
212 | llwarns << "FAIL image is NULL "<<mID<< llendl; | ||
213 | } | ||
214 | |||
215 | primbackup::getInstance()->m_nexttextureready=true; | ||
216 | //JUST SAY NO TO APR DEADLOCKING | ||
217 | //primbackup::getInstance()->export_next_texture(); | ||
218 | } | ||
219 | private: | ||
220 | LLPointer<LLImageFormatted> mFormattedImage; | ||
221 | LLUUID mID; | ||
222 | }; | ||
223 | |||
224 | |||
225 | |||
226 | primbackup::primbackup() | ||
227 | : LLFloater( std::string("Prim Import Floater") ) | ||
228 | { | ||
229 | LLUICtrlFactory::getInstance()->buildFloater( this, "floater_prim_import.xml" ); | ||
230 | |||
231 | // reposition floater from saved settings | ||
232 | //LLRect rect = gSavedSettings.getRect( "FloaterPrimImport" ); | ||
233 | //reshape( rect.getWidth(), rect.getHeight(), FALSE ); | ||
234 | //setRect( rect ); | ||
235 | |||
236 | running=false; | ||
237 | textures.clear(); | ||
238 | assetmap.clear(); | ||
239 | current_asset=LLUUID::null; | ||
240 | m_retexture=false; | ||
241 | close(); | ||
242 | } | ||
243 | |||
244 | |||
245 | //////////////////////////////////////////////////////////////////////////////// | ||
246 | // | ||
247 | primbackup* primbackup::getInstance() | ||
248 | { | ||
249 | if ( ! sInstance ) | ||
250 | sInstance = new primbackup(); | ||
251 | |||
252 | return sInstance; | ||
253 | } | ||
254 | |||
255 | primbackup::~primbackup() | ||
256 | { | ||
257 | // save position of floater | ||
258 | gSavedSettings.setRect( "FloaterPrimImport", getRect() ); | ||
259 | sInstance = 0; | ||
260 | } | ||
261 | |||
262 | void primbackup::draw() | ||
263 | { | ||
264 | LLFloater::draw(); | ||
265 | } | ||
266 | |||
267 | void primbackup::show() | ||
268 | { | ||
269 | // set the title | ||
270 | setTitle( "stuff" ); | ||
271 | m_curobject=1; | ||
272 | m_curprim=0; | ||
273 | m_objects=0; | ||
274 | m_prims=0; | ||
275 | m_textures=0; | ||
276 | m_curtexture=0; | ||
277 | rezcount=0; | ||
278 | |||
279 | // make floater appear | ||
280 | setVisibleAndFrontmost(); | ||
281 | } | ||
282 | |||
283 | |||
284 | void primbackup::onClose( bool app_quitting ) | ||
285 | { | ||
286 | setVisible( false ); | ||
287 | // HACK for fast XML iteration replace with: | ||
288 | // destroy(); | ||
289 | } | ||
290 | |||
291 | void primbackup::updateexportnumbers() | ||
292 | { | ||
293 | |||
294 | std::stringstream sstr; | ||
295 | LLUICtrl * ctrl=this->getChild<LLUICtrl>("name_label"); | ||
296 | |||
297 | sstr<<"Export Progress \n"; | ||
298 | |||
299 | sstr << "Remaining Textures "<<textures.size()<<"\n"; | ||
300 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
301 | |||
302 | } | ||
303 | |||
304 | |||
305 | void primbackup::updateimportnumbers() | ||
306 | { | ||
307 | std::stringstream sstr; | ||
308 | LLUICtrl * ctrl=this->getChild<LLUICtrl>("name_label"); | ||
309 | |||
310 | if(m_retexture) | ||
311 | { | ||
312 | sstr << " Textures uploads remaining : "<<textures.size()<<"\n"; | ||
313 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | sstr << " Textures uploads N/A \n"; | ||
318 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
319 | } | ||
320 | sstr << " Objects "<<this->m_curobject<<"/"<<this->m_objects<<"\n"; | ||
321 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
322 | |||
323 | sstr << " Rez "<<this->rezcount<<"/"<<this->m_prims; | ||
324 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
325 | |||
326 | sstr << " Build "<<this->m_curprim<<"/"<<this->m_prims; | ||
327 | ctrl->setValue(LLSD("Text")=sstr.str()); | ||
328 | |||
329 | |||
330 | } | ||
331 | |||
332 | void primbackup::pre_export_object() | ||
333 | { | ||
334 | textures.clear(); | ||
335 | llsd.clear(); | ||
336 | this_group.clear(); | ||
337 | |||
338 | // Open the file save dialog | ||
339 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
340 | if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_XML ) ) | ||
341 | { | ||
342 | // User canceled save. | ||
343 | return; | ||
344 | } | ||
345 | |||
346 | file_name = file_picker.getCurFile(); | ||
347 | folder = gDirUtilp->getDirName(file_name); | ||
348 | |||
349 | export_state=EXPORT_INIT; | ||
350 | gIdleCallbacks.addFunction(exportworker, NULL); | ||
351 | } | ||
352 | |||
353 | |||
354 | // static | ||
355 | bool primbackup::check_perms( LLSelectNode* node ) | ||
356 | { | ||
357 | LLPermissions *perms = node->mPermissions; | ||
358 | return (gAgent.getID() == perms->getOwner() && | ||
359 | gAgent.getID() == perms->getCreator() && | ||
360 | (PERM_ITEM_UNRESTRICTED & | ||
361 | perms->getMaskOwner()) == PERM_ITEM_UNRESTRICTED); | ||
362 | } | ||
363 | |||
364 | |||
365 | void primbackup::exportworker(void *userdata) | ||
366 | { | ||
367 | primbackup::getInstance()->updateexportnumbers(); | ||
368 | |||
369 | switch(primbackup::getInstance()->export_state) | ||
370 | { | ||
371 | case EXPORT_INIT: { | ||
372 | primbackup::getInstance()->show(); | ||
373 | LLSelectMgr::getInstance()->getSelection()->ref(); | ||
374 | |||
375 | struct ff : public LLSelectedNodeFunctor | ||
376 | { | ||
377 | virtual bool apply(LLSelectNode* node) | ||
378 | { | ||
379 | return primbackup::check_perms( node ); | ||
380 | } | ||
381 | } func; | ||
382 | |||
383 | if(LLSelectMgr::getInstance()->getSelection()->applyToNodes(&func,false)) | ||
384 | { | ||
385 | primbackup::getInstance()->export_state=EXPORT_STRUCTURE; | ||
386 | } | ||
387 | else | ||
388 | { | ||
389 | llwarns << "Incorrect permission to export" << llendl; | ||
390 | primbackup::getInstance()->export_state=EXPORT_DONE; | ||
391 | primbackup::getInstance()->close(); | ||
392 | gIdleCallbacks.deleteFunction(exportworker); | ||
393 | LLSelectMgr::getInstance()->getSelection()->unref(); | ||
394 | } | ||
395 | break; | ||
396 | } | ||
397 | |||
398 | case EXPORT_STRUCTURE: { | ||
399 | struct ff : public LLSelectedObjectFunctor | ||
400 | { | ||
401 | virtual bool apply(LLViewerObject* object) | ||
402 | { | ||
403 | object->boostTexturePriority(TRUE); | ||
404 | LLViewerObject::child_list_t children = object->getChildren(); | ||
405 | children.push_front(object); //push root onto list | ||
406 | LLSD prim_llsd=primbackup::getInstance()->prims_to_llsd(children); | ||
407 | LLSD stuff; | ||
408 | stuff["root_position"] = object->getPosition().getValue(); | ||
409 | stuff["root_rotation"] = ll_sd_from_quaternion(object->getRotation()); | ||
410 | stuff["group_body"] = prim_llsd; | ||
411 | primbackup::getInstance()->llsd["data"].append(stuff); | ||
412 | return true; | ||
413 | } | ||
414 | } func; | ||
415 | |||
416 | primbackup::getInstance()->export_state=EXPORT_LLSD; | ||
417 | LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func,false); | ||
418 | LLSelectMgr::getInstance()->getSelection()->unref(); | ||
419 | |||
420 | break; | ||
421 | } | ||
422 | |||
423 | case EXPORT_TEXTURES: { | ||
424 | if(primbackup::getInstance()->m_nexttextureready==false) | ||
425 | return; | ||
426 | |||
427 | //Ok we got work to do | ||
428 | primbackup::getInstance()->m_nexttextureready=false; | ||
429 | |||
430 | if(primbackup::getInstance()->textures.empty()) | ||
431 | { | ||
432 | primbackup::getInstance()->export_state=EXPORT_DONE; | ||
433 | return; | ||
434 | } | ||
435 | |||
436 | primbackup::getInstance()->export_next_texture(); | ||
437 | break; | ||
438 | } | ||
439 | |||
440 | case EXPORT_LLSD: { | ||
441 | // Create a file stream and write to it | ||
442 | llofstream export_file(primbackup::getInstance()->file_name); | ||
443 | LLSDSerialize::toPrettyXML(primbackup::getInstance()->llsd, export_file); | ||
444 | export_file.close(); | ||
445 | primbackup::getInstance()->m_nexttextureready=true; | ||
446 | primbackup::getInstance()->export_state=EXPORT_TEXTURES; | ||
447 | break; | ||
448 | } | ||
449 | |||
450 | case EXPORT_DONE: { | ||
451 | llinfos << "Backup complete" << llendl; | ||
452 | gIdleCallbacks.deleteFunction(exportworker); | ||
453 | primbackup::getInstance()->close(); | ||
454 | break; | ||
455 | } | ||
456 | } | ||
457 | } | ||
458 | |||
459 | LLSD primbackup::prims_to_llsd(LLViewerObject::child_list_t child_list) | ||
460 | { | ||
461 | |||
462 | LLViewerObject* object; | ||
463 | LLSD llsd; | ||
464 | |||
465 | char localid[16]; | ||
466 | |||
467 | for (LLViewerObject::child_list_t::iterator i = child_list.begin(); i != child_list.end(); ++i) | ||
468 | { | ||
469 | object=(*i); | ||
470 | LLUUID id = object->getID(); | ||
471 | |||
472 | llinfos << "Exporting prim " << object->getID().asString() << llendl; | ||
473 | |||
474 | // Create an LLSD object that represents this prim. It will be injected in to the overall LLSD | ||
475 | // tree structure | ||
476 | LLSD prim_llsd; | ||
477 | |||
478 | if (!object->isRoot()) | ||
479 | { | ||
480 | |||
481 | // Parent id | ||
482 | snprintf(localid, sizeof(localid), "%u", object->getSubParent()->getLocalID()); | ||
483 | prim_llsd["parent"] = localid; | ||
484 | } | ||
485 | |||
486 | // Transforms | ||
487 | prim_llsd["position"] = object->getPosition().getValue(); | ||
488 | prim_llsd["scale"] = object->getScale().getValue(); | ||
489 | prim_llsd["rotation"] = ll_sd_from_quaternion(object->getRotation()); | ||
490 | |||
491 | // Flags | ||
492 | prim_llsd["shadows"] = object->flagCastShadows(); | ||
493 | prim_llsd["phantom"] = object->flagPhantom(); | ||
494 | prim_llsd["physical"] = (BOOL)(object->mFlags & FLAGS_USE_PHYSICS); | ||
495 | |||
496 | // Volume params | ||
497 | LLVolumeParams params = object->getVolume()->getParams(); | ||
498 | prim_llsd["volume"] = params.asLLSD(); | ||
499 | |||
500 | // Extra paramsb6fab961-af18-77f8-cf08-f021377a7244 | ||
501 | if (object->isFlexible()) | ||
502 | { | ||
503 | // Flexible | ||
504 | LLFlexibleObjectData* flex = (LLFlexibleObjectData*)object->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); | ||
505 | prim_llsd["flexible"] = flex->asLLSD(); | ||
506 | } | ||
507 | if (object->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT)) | ||
508 | { | ||
509 | // Light | ||
510 | LLLightParams* light = (LLLightParams*)object->getParameterEntry(LLNetworkData::PARAMS_LIGHT); | ||
511 | prim_llsd["light"] = light->asLLSD(); | ||
512 | } | ||
513 | if (object->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT)) | ||
514 | { | ||
515 | // Sculpt | ||
516 | LLSculptParams* sculpt = (LLSculptParams*)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT); | ||
517 | prim_llsd["sculpt"] = sculpt->asLLSD(); | ||
518 | |||
519 | LLUUID sculpt_texture=sculpt->getSculptTexture(); | ||
520 | bool alreadyseen=false; | ||
521 | std::list<LLUUID>::iterator iter; | ||
522 | for(iter = textures.begin(); iter != textures.end() ; iter++) | ||
523 | { | ||
524 | if( (*iter)==sculpt_texture) | ||
525 | alreadyseen=true; | ||
526 | } | ||
527 | if(alreadyseen==false) | ||
528 | { | ||
529 | llinfos << "Found a sculpt texture, adding to list "<<sculpt_texture<<llendl; | ||
530 | textures.push_back(sculpt_texture); | ||
531 | } | ||
532 | } | ||
533 | |||
534 | // Textures | ||
535 | LLSD te_llsd; | ||
536 | U8 te_count = object->getNumTEs(); | ||
537 | for (U8 i = 0; i < te_count; i++) | ||
538 | { | ||
539 | bool alreadyseen=false; | ||
540 | te_llsd.append(object->getTE(i)->asLLSD()); | ||
541 | std::list<LLUUID>::iterator iter; | ||
542 | for(iter = textures.begin(); iter != textures.end() ; iter++) | ||
543 | { | ||
544 | if( (*iter)==object->getTE(i)->getID()) | ||
545 | alreadyseen=true; | ||
546 | } | ||
547 | if(alreadyseen==false) | ||
548 | textures.push_back(object->getTE(i)->getID()); | ||
549 | } | ||
550 | prim_llsd["textures"] = te_llsd; | ||
551 | |||
552 | // The keys in the primitive maps do not have to be localids, they can be any | ||
553 | // string. We simply use localids because they are a unique identifier | ||
554 | snprintf(localid, sizeof(localid), "%u", object->getLocalID()); | ||
555 | llsd[(const char*)localid] = prim_llsd; | ||
556 | } | ||
557 | |||
558 | updateexportnumbers(); | ||
559 | |||
560 | return llsd; | ||
561 | } | ||
562 | |||
563 | |||
564 | void primbackup::export_next_texture() | ||
565 | { | ||
566 | if(textures.empty()) | ||
567 | { | ||
568 | llinfos << "Finished exporting textures "<<llendl; | ||
569 | return; | ||
570 | } | ||
571 | |||
572 | std::list<LLUUID>::iterator iter; | ||
573 | iter = textures.begin(); | ||
574 | |||
575 | LLUUID id; | ||
576 | |||
577 | while(1) | ||
578 | { | ||
579 | if(iter==textures.end()) | ||
580 | { | ||
581 | m_nexttextureready=true; | ||
582 | return; | ||
583 | } | ||
584 | |||
585 | id=(*iter); | ||
586 | |||
587 | LLViewerImage * imagep = gImageList.hasImage(id); | ||
588 | if(imagep!=NULL) | ||
589 | { | ||
590 | S32 cur_discard = imagep->getDiscardLevel(); | ||
591 | if(cur_discard>0) | ||
592 | { | ||
593 | if(imagep->getBoostLevel()!=LLViewerImage::BOOST_PREVIEW) | ||
594 | imagep->setBoostLevel(LLViewerImage::BOOST_PREVIEW); //we want to force discard 0 this one does this. | ||
595 | } | ||
596 | else | ||
597 | { | ||
598 | break; | ||
599 | } | ||
600 | } | ||
601 | else | ||
602 | { | ||
603 | llwarns<<" We *DONT* have the texture "<<llendl; | ||
604 | } | ||
605 | iter++; | ||
606 | } | ||
607 | |||
608 | textures.remove(id); | ||
609 | |||
610 | llinfos<<"Requesting texture "<<id<<llendl; | ||
611 | LLImageJ2C * mFormattedImage = new LLImageJ2C; | ||
612 | CacheReadResponder* responder = new CacheReadResponder(id, mFormattedImage); | ||
613 | LLAppViewer::getTextureCache()->readFromCache(id,LLWorkerThread::PRIORITY_HIGH,0,999999,responder); | ||
614 | } | ||
615 | |||
616 | |||
617 | |||
618 | void primbackup::import_object(bool upload) | ||
619 | { | ||
620 | textures.clear(); | ||
621 | assetmap.clear(); | ||
622 | current_asset=LLUUID::null; | ||
623 | |||
624 | this->m_retexture=upload; | ||
625 | |||
626 | // Open the file open dialog | ||
627 | LLFilePicker& file_picker = LLFilePicker::instance(); | ||
628 | if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_XML ) ) | ||
629 | { | ||
630 | // User canceled save. | ||
631 | return; | ||
632 | } | ||
633 | std::string file_name = file_picker.getFirstFile().c_str(); | ||
634 | folder = gDirUtilp->getDirName(file_name); | ||
635 | |||
636 | llifstream import_file(file_name); | ||
637 | LLSDSerialize::fromXML(llsd, import_file); | ||
638 | import_file.close(); | ||
639 | |||
640 | show(); | ||
641 | |||
642 | //Get the texture map | ||
643 | |||
644 | LLSD::map_const_iterator prim_it; | ||
645 | LLSD::array_const_iterator prim_arr_it; | ||
646 | |||
647 | this->m_curobject=1; | ||
648 | this->m_curprim=1; | ||
649 | this->m_objects=llsd["data"].size(); | ||
650 | this->m_prims=0; | ||
651 | rezcount=0; | ||
652 | |||
653 | updateimportnumbers(); | ||
654 | |||
655 | for( prim_arr_it = llsd["data"].beginArray(); prim_arr_it != llsd["data"].endArray(); prim_arr_it++) | ||
656 | { | ||
657 | |||
658 | LLSD llsd2; | ||
659 | llsd2=(*prim_arr_it)["group_body"]; | ||
660 | |||
661 | for( prim_it = llsd2.beginMap(); prim_it != llsd2.endMap(); prim_it++) | ||
662 | { | ||
663 | LLSD prim_llsd; | ||
664 | prim_llsd=llsd2[prim_it->first]; | ||
665 | LLSD::array_iterator text_it; | ||
666 | std::list<LLUUID>::iterator iter; | ||
667 | |||
668 | if(prim_llsd.has("sculpt")) | ||
669 | { | ||
670 | LLSculptParams* sculpt=new LLSculptParams(); | ||
671 | sculpt->fromLLSD(prim_llsd["sculpt"]); | ||
672 | LLUUID orig=sculpt->getSculptTexture(); | ||
673 | bool alreadyseen=false; | ||
674 | for(iter = textures.begin(); iter != textures.end() ; iter++) | ||
675 | { | ||
676 | if( (*iter)==orig) | ||
677 | alreadyseen=true; | ||
678 | } | ||
679 | if(alreadyseen==false) | ||
680 | { | ||
681 | llinfos << "Found a new SCULPT texture to upload "<<orig<<llendl; | ||
682 | textures.push_back(orig); | ||
683 | } | ||
684 | } | ||
685 | |||
686 | |||
687 | LLSD te_llsd; | ||
688 | te_llsd=prim_llsd["textures"]; | ||
689 | |||
690 | |||
691 | for(text_it=te_llsd.beginArray(); text_it !=te_llsd.endArray(); text_it++) | ||
692 | { | ||
693 | LLSD the_te; | ||
694 | the_te=(*text_it); | ||
695 | LLTextureEntry te; | ||
696 | te.fromLLSD(the_te); | ||
697 | |||
698 | te.getID(); | ||
699 | bool alreadyseen=false; | ||
700 | |||
701 | for(iter = textures.begin(); iter != textures.end() ; iter++) | ||
702 | { | ||
703 | if( (*iter)==te.getID()) | ||
704 | alreadyseen=true; | ||
705 | } | ||
706 | if(alreadyseen==false) | ||
707 | { | ||
708 | llinfos << "Found a new texture to upload "<<te.getID()<<llendl; | ||
709 | textures.push_back(te.getID()); | ||
710 | } | ||
711 | } | ||
712 | |||
713 | } | ||
714 | } | ||
715 | |||
716 | if(m_retexture==TRUE) | ||
717 | upload_next_asset(); | ||
718 | else | ||
719 | import_object1a(); | ||
720 | } | ||
721 | |||
722 | LLVector3 primbackup::offset_agent(LLVector3 offset) | ||
723 | { | ||
724 | LLVector3 pos= gAgent.getPositionAgent(); | ||
725 | LLQuaternion agent_rot=LLQuaternion(gAgent.getAtAxis(),gAgent.getLeftAxis(),gAgent.getUpAxis()); | ||
726 | pos=(offset*agent_rot+pos); | ||
727 | return pos; | ||
728 | } | ||
729 | |||
730 | void primbackup::rez_agent_offset(LLVector3 offset) | ||
731 | { | ||
732 | // This will break for a sitting agent | ||
733 | LLToolPlacer* mPlacer = new LLToolPlacer(); | ||
734 | mPlacer->setObjectType(LL_PCODE_CUBE); | ||
735 | //LLVector3 pos=offset_agent(offset); | ||
736 | mPlacer->placeObject((S32)(offset.mV[0]), (S32)(offset.mV[1]), 0); | ||
737 | } | ||
738 | |||
739 | void primbackup::import_object1a() | ||
740 | { | ||
741 | running=true; | ||
742 | |||
743 | show(); | ||
744 | |||
745 | group_prim_import_iter=llsd["data"].beginArray(); | ||
746 | root_root_pos=(*group_prim_import_iter)["root_position"]; | ||
747 | |||
748 | this->m_objects=llsd["data"].size(); | ||
749 | this->m_curobject=1; | ||
750 | import_next_object(); | ||
751 | } | ||
752 | |||
753 | void primbackup::import_next_object() | ||
754 | { | ||
755 | toselect.clear(); | ||
756 | rezcount=0; | ||
757 | |||
758 | this_group=(*group_prim_import_iter)["group_body"]; | ||
759 | prim_import_iter=this_group.beginMap(); | ||
760 | |||
761 | m_curprim=0; | ||
762 | m_prims=this_group.size(); | ||
763 | updateimportnumbers(); | ||
764 | LLVector3 lgpos=(*group_prim_import_iter)["root_position"]; | ||
765 | |||
766 | group_offset=lgpos-root_root_pos; | ||
767 | root_pos=offset_agent(LLVector3(2.0,0,0)); | ||
768 | root_rot=ll_quaternion_from_sd((*group_prim_import_iter)["root_rotation"]); | ||
769 | |||
770 | rez_agent_offset(LLVector3(0.0,2.0,0.0)); | ||
771 | // Now we must wait for the callback when ViewerObjectList gets the new objects and we have the correct number selected | ||
772 | } | ||
773 | |||
774 | // This function takes a pointer to a viewerobject and applys the prim definition that prim_llsd has | ||
775 | void primbackup::xmltoprim(LLSD prim_llsd,LLViewerObject * object) | ||
776 | { | ||
777 | LLUUID id = object->getID(); | ||
778 | expecting_update = object->getID(); | ||
779 | LLSelectMgr::getInstance()->selectObjectAndFamily(object); | ||
780 | |||
781 | if(prim_llsd.has("parent")) | ||
782 | { | ||
783 | //we are not the root node. | ||
784 | LLVector3 pos=prim_llsd["position"]; | ||
785 | LLQuaternion rot=ll_quaternion_from_sd(prim_llsd["rotation"]); | ||
786 | object->setPositionRegion((pos*root_rot)+(root_pos+group_offset)); | ||
787 | object->setRotation(rot*root_rot); | ||
788 | } | ||
789 | else | ||
790 | { | ||
791 | object->setPositionRegion(root_pos+group_offset); | ||
792 | LLQuaternion rot=ll_quaternion_from_sd(prim_llsd["rotation"]); | ||
793 | object->setRotation(rot); | ||
794 | } | ||
795 | |||
796 | object->setScale(prim_llsd["scale"]); | ||
797 | |||
798 | if(prim_llsd.has("shadows")) | ||
799 | if(prim_llsd["shadows"].asInteger()==1) | ||
800 | object->setFlags(FLAGS_CAST_SHADOWS,true); | ||
801 | |||
802 | if(prim_llsd.has("phantom")) | ||
803 | if(prim_llsd["phantom"].asInteger()==1) | ||
804 | object->setFlags(FLAGS_PHANTOM,true); | ||
805 | |||
806 | if(prim_llsd.has("physical")) | ||
807 | if(prim_llsd["physical"].asInteger()==1) | ||
808 | object->setFlags(FLAGS_USE_PHYSICS,true); | ||
809 | |||
810 | // Volume params | ||
811 | LLVolumeParams volume_params = object->getVolume()->getParams(); | ||
812 | volume_params.fromLLSD(prim_llsd["volume"]) ; | ||
813 | object->updateVolume(volume_params); | ||
814 | |||
815 | if(prim_llsd.has("sculpt")) | ||
816 | { | ||
817 | LLSculptParams* sculpt=new LLSculptParams(); | ||
818 | sculpt->fromLLSD(prim_llsd["sculpt"]); | ||
819 | |||
820 | //TODO check if map is valid and only set texture is map is valid and changes | ||
821 | |||
822 | if(assetmap[sculpt->getSculptTexture()].notNull()) | ||
823 | { | ||
824 | LLUUID replacment=assetmap[sculpt->getSculptTexture()]; | ||
825 | sculpt->setSculptTexture(replacment); | ||
826 | } | ||
827 | |||
828 | object->setParameterEntry(LLNetworkData::PARAMS_SCULPT,(LLNetworkData&)(*sculpt),true); | ||
829 | } | ||
830 | |||
831 | if(prim_llsd.has("light")) | ||
832 | { | ||
833 | LLLightParams * light=new LLLightParams(); | ||
834 | light->fromLLSD(prim_llsd["light"]); | ||
835 | object->setParameterEntry(LLNetworkData::PARAMS_LIGHT,(LLNetworkData&)(*light),true); | ||
836 | } | ||
837 | |||
838 | if(prim_llsd.has("flexible")) | ||
839 | { | ||
840 | LLFlexibleObjectData* flex=new LLFlexibleObjectData(); | ||
841 | flex->fromLLSD(prim_llsd["flexible"]); | ||
842 | object->setParameterEntry(LLNetworkData::PARAMS_FLEXIBLE,(LLNetworkData&)(*flex),true); | ||
843 | } | ||
844 | |||
845 | |||
846 | // Textures | ||
847 | LLSD te_llsd; | ||
848 | llinfos << "Processing textures for prim" << llendl; | ||
849 | |||
850 | te_llsd=prim_llsd["textures"]; | ||
851 | |||
852 | LLSD::array_iterator text_it; | ||
853 | U8 i=0; | ||
854 | i=0; | ||
855 | |||
856 | for(text_it=te_llsd.beginArray(); text_it !=te_llsd.endArray(); text_it++) | ||
857 | { | ||
858 | LLSD the_te; | ||
859 | the_te=(*text_it); | ||
860 | LLTextureEntry te; | ||
861 | te.fromLLSD(the_te); | ||
862 | |||
863 | if(assetmap[te.getID()].notNull()) | ||
864 | { | ||
865 | LLUUID replacment=assetmap[te.getID()]; | ||
866 | te.setID(replacment); | ||
867 | } | ||
868 | |||
869 | object->setTE(i,te); // | ||
870 | i++; | ||
871 | } | ||
872 | |||
873 | llinfos << "Textures done!" << llendl; | ||
874 | |||
875 | //bump the iterator now so the callbacks hook together nicely | ||
876 | //if(prim_import_iter!=this_group.endMap()) | ||
877 | // prim_import_iter++; | ||
878 | |||
879 | object->sendRotationUpdate(); | ||
880 | object->sendTEUpdate(); | ||
881 | object->sendShapeUpdate(); | ||
882 | LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_SCALE |UPD_POSITION); | ||
883 | |||
884 | LLSelectMgr::getInstance()->deselectAll(); | ||
885 | } | ||
886 | |||
887 | //This is fired when the update packet is processed so we know the prim settings have stuck | ||
888 | void primbackup::prim_update(LLViewerObject* object) | ||
889 | { | ||
890 | if(!running) | ||
891 | return; | ||
892 | |||
893 | if(object!=NULL) | ||
894 | if(object->mID!=expecting_update) | ||
895 | return; | ||
896 | |||
897 | m_curprim++; | ||
898 | updateimportnumbers(); | ||
899 | |||
900 | prim_import_iter++; | ||
901 | |||
902 | LLUUID x; | ||
903 | expecting_update=x.null; | ||
904 | |||
905 | if(prim_import_iter==this_group.endMap()) | ||
906 | { | ||
907 | llinfos<<"Trying to link"<<llendl; | ||
908 | |||
909 | if(toselect.size()>1) | ||
910 | { | ||
911 | std::reverse(toselect.begin(),toselect.end()); | ||
912 | //Now link | ||
913 | LLSelectMgr::getInstance()->deselectAll(); | ||
914 | LLSelectMgr::getInstance()->selectObjectAndFamily(toselect,true); | ||
915 | LLSelectMgr::getInstance()->sendLink(); | ||
916 | LLViewerObject * root=toselect.back(); | ||
917 | root->setRotation(root_rot); | ||
918 | } | ||
919 | |||
920 | this->m_curobject++; | ||
921 | group_prim_import_iter++; | ||
922 | if(group_prim_import_iter!=llsd["data"].endArray()) | ||
923 | { | ||
924 | import_next_object(); | ||
925 | return; | ||
926 | } | ||
927 | |||
928 | running=false; | ||
929 | this->close(); | ||
930 | return; | ||
931 | } | ||
932 | |||
933 | LLSD prim_llsd; | ||
934 | prim_llsd=this_group[prim_import_iter->first]; | ||
935 | |||
936 | if(toselect.empty()) | ||
937 | { | ||
938 | llwarns << "error: ran out of objects to mod" << llendl; | ||
939 | return; | ||
940 | } | ||
941 | |||
942 | if(prim_import_iter!=this_group.endMap()) | ||
943 | { | ||
944 | //rez_agent_offset(LLVector3(1.0,0,0)); | ||
945 | LLSD prim_llsd=this_group[prim_import_iter->first]; | ||
946 | process_iter++; | ||
947 | xmltoprim(prim_llsd,(*process_iter)); | ||
948 | } | ||
949 | } | ||
950 | |||
951 | // Callback when we rez a new object when the importer is running. | ||
952 | bool primbackup::newprim(LLViewerObject * pobject) | ||
953 | { | ||
954 | if(running) | ||
955 | { | ||
956 | rezcount++; | ||
957 | toselect.push_back(pobject); | ||
958 | updateimportnumbers(); | ||
959 | prim_import_iter++; | ||
960 | |||
961 | if(prim_import_iter!=this_group.endMap()) | ||
962 | { | ||
963 | |||
964 | pobject->setPosition(this->offset_agent(LLVector3(0,1.0,0))); | ||
965 | LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION); | ||
966 | |||
967 | rez_agent_offset(LLVector3(1.0,0,0)); | ||
968 | } | ||
969 | else | ||
970 | { | ||
971 | llinfos << "All prims rezed, moving to build stage" <<llendl; | ||
972 | prim_import_iter=this_group.beginMap(); | ||
973 | LLSD prim_llsd=this_group[prim_import_iter->first]; | ||
974 | process_iter=toselect.begin(); | ||
975 | xmltoprim(prim_llsd,(*process_iter)); | ||
976 | } | ||
977 | } | ||
978 | |||
979 | return true; | ||
980 | } | ||
981 | |||
982 | void primbackup::update_map(LLUUID uploaded_asset) | ||
983 | { | ||
984 | if(current_asset.isNull()) | ||
985 | return; | ||
986 | |||
987 | assetmap.insert(std::pair<LLUUID,LLUUID>(current_asset,uploaded_asset)); | ||
988 | llinfos << "Mapping "<<current_asset<<" to "<<uploaded_asset<<llendl; | ||
989 | |||
990 | } | ||
991 | |||
992 | |||
993 | void myupload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type, | ||
994 | std::string name, | ||
995 | std::string desc, S32 compression_info, | ||
996 | LLAssetType::EType destination_folder_type, | ||
997 | LLInventoryType::EType inv_type, | ||
998 | U32 next_owner_perm, | ||
999 | const std::string& display_name, | ||
1000 | LLAssetStorage::LLStoreAssetCallback callback, | ||
1001 | void *userdata) | ||
1002 | { | ||
1003 | if(gDisconnected) | ||
1004 | { | ||
1005 | return ; | ||
1006 | } | ||
1007 | |||
1008 | LLAssetID uuid = tid.makeAssetID(gAgent.getSecureSessionID()); | ||
1009 | |||
1010 | // At this point, we're ready for the upload. | ||
1011 | std::string upload_message = "Uploading...\n\n"; | ||
1012 | upload_message.append(display_name); | ||
1013 | LLUploadDialog::modalUploadDialog(upload_message); | ||
1014 | |||
1015 | std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory"); | ||
1016 | if (!url.empty()) | ||
1017 | { | ||
1018 | LLSD body; | ||
1019 | body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type); | ||
1020 | body["asset_type"] = LLAssetType::lookup(asset_type); | ||
1021 | body["inventory_type"] = LLInventoryType::lookup(inv_type); | ||
1022 | body["name"] = name; | ||
1023 | body["description"] = desc; | ||
1024 | |||
1025 | std::ostringstream llsdxml; | ||
1026 | LLSDSerialize::toXML(body, llsdxml); | ||
1027 | lldebugs << "posting body to capability: " << llsdxml.str() << llendl; | ||
1028 | //LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type)); | ||
1029 | LLHTTPClient::post(url, body, new importResponder(body, uuid, asset_type)); | ||
1030 | |||
1031 | } | ||
1032 | else | ||
1033 | { | ||
1034 | llinfos << "NewAgentInventory capability not found, FUCK!" << llendl; | ||
1035 | } | ||
1036 | } | ||
1037 | |||
1038 | |||
1039 | |||
1040 | void primbackup::upload_next_asset() | ||
1041 | { | ||
1042 | if(textures.empty()) | ||
1043 | { | ||
1044 | llinfos<<" Texture list is empty, moving to rez statge"<< llendl; | ||
1045 | current_asset=LLUUID::null; | ||
1046 | import_object1a(); | ||
1047 | return; | ||
1048 | } | ||
1049 | |||
1050 | this->updateimportnumbers(); | ||
1051 | |||
1052 | std::list<LLUUID>::iterator iter; | ||
1053 | iter=textures.begin(); | ||
1054 | LLUUID id=(*iter); | ||
1055 | textures.pop_front(); | ||
1056 | |||
1057 | llinfos<<"Got texture ID "<<id<< "trying to upload"<<llendl; | ||
1058 | |||
1059 | current_asset=id; | ||
1060 | std::string struid; | ||
1061 | id.toString(struid); | ||
1062 | std::string filename=folder+"//"+struid; | ||
1063 | |||
1064 | |||
1065 | LLAssetID uuid; | ||
1066 | LLTransactionID tid; | ||
1067 | |||
1068 | // gen a new transaction ID for this asset | ||
1069 | tid.generate(); | ||
1070 | uuid = tid.makeAssetID(gAgent.getSecureSessionID()); | ||
1071 | |||
1072 | S32 file_size; | ||
1073 | apr_file_t* fp = ll_apr_file_open(filename, LL_APR_RB, &file_size); | ||
1074 | if (fp) | ||
1075 | { | ||
1076 | const S32 buf_size = 65536; | ||
1077 | U8 copy_buf[buf_size]; | ||
1078 | LLVFile file(gVFS, uuid, LLAssetType::AT_TEXTURE, LLVFile::WRITE); | ||
1079 | file.setMaxSize(file_size); | ||
1080 | |||
1081 | while ((file_size = ll_apr_file_read(fp, copy_buf, buf_size))) | ||
1082 | { | ||
1083 | file.write(copy_buf, file_size); | ||
1084 | } | ||
1085 | apr_file_close(fp); | ||
1086 | } | ||
1087 | else | ||
1088 | { | ||
1089 | llwarns<<"Unable to access output file "<<filename<<llendl; | ||
1090 | upload_next_asset(); | ||
1091 | return; | ||
1092 | } | ||
1093 | |||
1094 | myupload_new_resource( | ||
1095 | tid, LLAssetType::AT_TEXTURE, struid, | ||
1096 | struid, 0, | ||
1097 | LLAssetType::AT_TEXTURE, | ||
1098 | LLInventoryType::defaultForAssetType(LLAssetType::AT_TEXTURE), | ||
1099 | 0x0, | ||
1100 | "Uploaded texture", | ||
1101 | NULL, | ||
1102 | NULL); | ||
1103 | |||
1104 | |||
1105 | } | ||
1106 | |||
diff --git a/linden/indra/newview/primbackup.h b/linden/indra/newview/primbackup.h new file mode 100644 index 0000000..cbd757a --- /dev/null +++ b/linden/indra/newview/primbackup.h | |||
@@ -0,0 +1,134 @@ | |||
1 | |||
2 | #include "llviewerinventory.h" | ||
3 | |||
4 | #define LL_GRID_PERMISSIONS 1 | ||
5 | |||
6 | enum export_states {EXPORT_INIT,EXPORT_STRUCTURE,EXPORT_TEXTURES,EXPORT_LLSD,EXPORT_DONE}; | ||
7 | |||
8 | class primbackup : public LLFloater | ||
9 | |||
10 | { | ||
11 | public: | ||
12 | //Export state machine | ||
13 | enum export_states export_state; | ||
14 | |||
15 | //Export idle callback | ||
16 | static void exportworker(void *userdata); | ||
17 | |||
18 | //Static accessor | ||
19 | static primbackup* getInstance(); | ||
20 | |||
21 | static bool check_perms( LLSelectNode* node ); | ||
22 | |||
23 | virtual ~primbackup(); | ||
24 | |||
25 | //Floater stuff | ||
26 | virtual void show(); | ||
27 | virtual void draw(); | ||
28 | virtual void onClose( bool app_quitting ); | ||
29 | |||
30 | //Import entry point | ||
31 | void import_object(bool upload=FALSE); | ||
32 | |||
33 | //Export entry point | ||
34 | void pre_export_object(); | ||
35 | |||
36 | //Update map from texture worker | ||
37 | void update_map(LLUUID uploaded_asset); | ||
38 | |||
39 | //Move to next texture upload | ||
40 | void upload_next_asset(); | ||
41 | |||
42 | // is ready for next texture? | ||
43 | bool m_nexttextureready; | ||
44 | |||
45 | //Folder public geter | ||
46 | std::string getfolder() {return folder;}; | ||
47 | |||
48 | //Prim updated callback | ||
49 | void prim_update(LLViewerObject* object); | ||
50 | |||
51 | //New prim call back | ||
52 | bool newprim(LLViewerObject * pobject); | ||
53 | |||
54 | private: | ||
55 | |||
56 | //Static singleton stuff | ||
57 | primbackup(); | ||
58 | static primbackup* sInstance; | ||
59 | |||
60 | // are we active flag | ||
61 | bool running; | ||
62 | |||
63 | //file and folder name control | ||
64 | std::string file_name; | ||
65 | std::string folder; | ||
66 | |||
67 | // True if we need to rebase the assets | ||
68 | bool m_retexture; | ||
69 | |||
70 | //Counts of import and export objects and textures and prims | ||
71 | int m_objects,m_curobject; | ||
72 | int m_prims,m_curprim; | ||
73 | int m_textures,m_curtexture; | ||
74 | |||
75 | // No prims rezed | ||
76 | int rezcount; | ||
77 | |||
78 | // Update the floater with status numbers | ||
79 | void updateimportnumbers(); | ||
80 | void updateexportnumbers(); | ||
81 | |||
82 | //Convert a selection list of objects to LLSD | ||
83 | LLSD prims_to_llsd(LLViewerObject::child_list_t child_list); | ||
84 | |||
85 | // Start the import process | ||
86 | void import_object1a(); | ||
87 | |||
88 | //Export the next texture in list | ||
89 | void export_next_texture(); | ||
90 | |||
91 | //apply LLSD to object | ||
92 | void xmltoprim(LLSD prim_llsd,LLViewerObject * pobject); | ||
93 | |||
94 | |||
95 | //rez a prim at a given position (note not agent offset X/Y screen for raycast) | ||
96 | void rez_agent_offset(LLVector3 offset); | ||
97 | |||
98 | //Move to the next import group | ||
99 | void import_next_object(); | ||
100 | |||
101 | //Get an offset from the agent based on rotation and current pos | ||
102 | LLVector3 offset_agent(LLVector3 offset); | ||
103 | |||
104 | // Rebase map | ||
105 | std::map<LLUUID,LLUUID> assetmap; | ||
106 | |||
107 | //Export texture list | ||
108 | std::list<LLUUID> textures; | ||
109 | |||
110 | //Import object tracking | ||
111 | std::vector<LLViewerObject *> toselect; | ||
112 | std::vector<LLViewerObject *>::iterator process_iter; | ||
113 | |||
114 | //Working LLSD holders | ||
115 | LLUUID current_asset; | ||
116 | LLSD llsd; | ||
117 | LLSD this_group; | ||
118 | LLUUID expecting_update; | ||
119 | |||
120 | //working llsd itterators for objects and linksets | ||
121 | LLSD::map_const_iterator prim_import_iter; | ||
122 | LLSD::array_const_iterator group_prim_import_iter; | ||
123 | |||
124 | // Root pos and central root pos for link set | ||
125 | LLVector3 root_pos; | ||
126 | LLVector3 root_root_pos; | ||
127 | LLVector3 group_offset; | ||
128 | |||
129 | //Agent inital pos and rot when starting import | ||
130 | LLQuaternion root_rot; | ||
131 | LLQuaternion agent_rot; | ||
132 | |||
133 | }; | ||
134 | |||
diff --git a/linden/indra/newview/res/viewerRes.rc b/linden/indra/newview/res/viewerRes.rc index d5392c9..5e57841 100644 --- a/linden/indra/newview/res/viewerRes.rc +++ b/linden/indra/newview/res/viewerRes.rc | |||
@@ -138,8 +138,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" | |||
138 | // | 138 | // |
139 | 139 | ||
140 | VS_VERSION_INFO VERSIONINFO | 140 | VS_VERSION_INFO VERSIONINFO |
141 | FILEVERSION 1,23,4,123523 | 141 | FILEVERSION 1,3,0 |
142 | PRODUCTVERSION 1,23,4,123523 | 142 | PRODUCTVERSION 1,3,0 |
143 | FILEFLAGSMASK 0x3fL | 143 | FILEFLAGSMASK 0x3fL |
144 | #ifdef _DEBUG | 144 | #ifdef _DEBUG |
145 | FILEFLAGS 0x1L | 145 | FILEFLAGS 0x1L |
@@ -156,12 +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.0.0" | 159 | VALUE "FileVersion", "1.3.0" |
160 | VALUE "InternalName", "Imprudence" | 160 | VALUE "InternalName", "Imprudence" |
161 | VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc." | ||
162 | VALUE "OriginalFilename", "Imprudence.exe" | 161 | VALUE "OriginalFilename", "Imprudence.exe" |
163 | VALUE "ProductName", "Imprudence" | 162 | VALUE "ProductName", "Imprudence" |
164 | VALUE "ProductVersion", "1.0.0" | 163 | VALUE "ProductVersion", "1.3.0" |
165 | END | 164 | END |
166 | END | 165 | END |
167 | BLOCK "VarFileInfo" | 166 | BLOCK "VarFileInfo" |
diff --git a/linden/indra/newview/rlvdefines.h b/linden/indra/newview/rlvdefines.h new file mode 100644 index 0000000..118ba31 --- /dev/null +++ b/linden/indra/newview/rlvdefines.h | |||
@@ -0,0 +1,212 @@ | |||
1 | #ifndef RLV_DEFINES_H | ||
2 | #define RLV_DEFINES_H | ||
3 | |||
4 | // ============================================================================ | ||
5 | // Extensions | ||
6 | // | ||
7 | |||
8 | // Comment out if you don't want the Advanced / RLVa menu (may prevent enabling some extensions or experimental features - see below) | ||
9 | #define RLV_ADVANCED_MENU | ||
10 | // Comment out if you provide your own way to enable/disable RLVa | ||
11 | #define RLV_ADVANCED_TOGGLE_RLVA | ||
12 | |||
13 | // Provides access to "advanced" feature through the RLVa debug menu | ||
14 | #define RLV_EXTENSION_ENABLE_WEAR // "Enable Wear" | ||
15 | #define RLV_EXTENSION_FLOATER_RESTRICTIONS // Enables the Advanced / RLVa / Restrictions... floater | ||
16 | #define RLV_EXTENSION_HIDELOCKED // "Hide locked layers", "Hide locked attachments" and "Hide locked inventory" | ||
17 | |||
18 | // Extensions | ||
19 | #define RLV_EXTENSION_CMD_GETSETDEBUG_EX // Extends the debug variables accessible through @getdebug_xxx/@setdebug_xxx | ||
20 | #define RLV_EXTENSION_CMD_FINDFOLDERS // @findfolders:<option>=<channel> - @findfolder with multiple results | ||
21 | #define RLV_EXTENSION_FLAG_NOSTRIP // Layers and attachments marked as "nostrip" are exempt from @detach/@remoutfit | ||
22 | #define RLV_EXTENSION_STARTLOCATION // Reenables "Start Location" at login if not @tploc=n or @unsit=n restricted at last logoff | ||
23 | #define RLV_EXPERIMENTAL // Enables/disables experimental features en masse | ||
24 | |||
25 | // Experimental features | ||
26 | #ifdef RLV_EXPERIMENTAL | ||
27 | // Stable (will mature to RLV_EXTENSION_XXX in next release if no bugs are found) | ||
28 | #define RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK // Enables "cleaner" UI responses when fartouch blocks something | ||
29 | |||
30 | // Under testing (stable, but requires further testing - safe for public release but may be quirky) | ||
31 | #define RLV_EXPERIMENTAL_FIRSTUSE // Enables a number of "first use" popups | ||
32 | |||
33 | // Under development (don't include in public release) | ||
34 | #if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
35 | #endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
36 | #endif // RLV_EXPERIMENTAL | ||
37 | |||
38 | // ============================================================================ | ||
39 | // Defines | ||
40 | // | ||
41 | |||
42 | // Version of the specifcation we support | ||
43 | const S32 RLV_VERSION_MAJOR = 1; | ||
44 | const S32 RLV_VERSION_MINOR = 21; | ||
45 | const S32 RLV_VERSION_PATCH = 0; | ||
46 | const S32 RLV_VERSION_BUILD = 0; | ||
47 | |||
48 | // Implementation version | ||
49 | const S32 RLVa_VERSION_MAJOR = 1; | ||
50 | const S32 RLVa_VERSION_MINOR = 0; | ||
51 | const S32 RLVa_VERSION_PATCH = 4; | ||
52 | const S32 RLVa_VERSION_BUILD = 4; | ||
53 | |||
54 | // The official viewer version we're patching against | ||
55 | #define RLV_MAKE_TARGET(x, y, z) ((x << 16) | (y << 8) | z) | ||
56 | #define RLV_TARGET RLV_MAKE_TARGET(1, 22, 11) | ||
57 | |||
58 | // Defining these makes it easier if we ever need to change our tag | ||
59 | #define RLV_WARNS LL_WARNS("RLV") | ||
60 | #define RLV_INFOS LL_INFOS("RLV") | ||
61 | #define RLV_DEBUGS LL_DEBUGS("RLV") | ||
62 | |||
63 | #if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
64 | // Turn on extended debugging information | ||
65 | #define RLV_DEBUG | ||
66 | // Make sure we halt execution on errors | ||
67 | #define RLV_ERRS LL_ERRS("RLV") | ||
68 | // Uncomment to enable the Advanced / RLVa / Unit Tests menu (non-public) | ||
69 | //#define RLV_DEBUG_TESTS | ||
70 | #else | ||
71 | // Uncomment if you want extended debugging information on release builds | ||
72 | //#define RLV_DEBUG | ||
73 | // Don't halt execution on errors in release | ||
74 | #define RLV_ERRS LL_WARNS("RLV") | ||
75 | #endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
76 | |||
77 | #define RLV_ROOT_FOLDER "#RLV" | ||
78 | #define RLV_CMD_PREFIX '@' | ||
79 | #define RLV_PUTINV_PREFIX "#RLV/~" | ||
80 | #define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90° with the rest of SL | ||
81 | |||
82 | #define RLV_FOLDER_FLAG_NOSTRIP "nostrip" | ||
83 | #define RLV_FOLDER_PREFIX_HIDDEN '.' | ||
84 | #define RLV_FOLDER_PREFIX_PUTINV '~' | ||
85 | |||
86 | // ============================================================================ | ||
87 | // Enumeration declarations | ||
88 | // | ||
89 | |||
90 | // NOTE: any changes to this enumeration should be reflected in initLookupTable() | ||
91 | enum ERlvBehaviour { | ||
92 | RLV_BHVR_VERSION = 0, // "version" | ||
93 | RLV_BHVR_DETACH, // "detach" | ||
94 | RLV_BHVR_SENDCHAT, // "sendchat" | ||
95 | RLV_BHVR_EMOTE, // "emote" | ||
96 | RLV_BHVR_CHATSHOUT, // "chatshout" | ||
97 | RLV_BHVR_CHATNORMAL, // "chatnormal" | ||
98 | RLV_BHVR_CHATWHISPER, // "chatwhisper" | ||
99 | RLV_BHVR_REDIRCHAT, // "redirchat" | ||
100 | RLV_BHVR_REDIREMOTE, // "rediremote" | ||
101 | RLV_BHVR_SENDIM, // "sendim" | ||
102 | RLV_BHVR_RECVCHAT, // "recvchat" | ||
103 | RLV_BHVR_RECVEMOTE, // "recvemote" | ||
104 | RLV_BHVR_RECVIM, // "recvim" | ||
105 | RLV_BHVR_TPLM, // "tplm" | ||
106 | RLV_BHVR_TPLOC, // "tploc" | ||
107 | RLV_BHVR_TPLURE, // "tplure" | ||
108 | RLV_BHVR_SITTP, // "sittp" | ||
109 | RLV_BHVR_EDIT, // "edit" | ||
110 | RLV_BHVR_REZ, // "rez" | ||
111 | RLV_BHVR_ADDOUTFIT, // "addoutfit" | ||
112 | RLV_BHVR_REMOUTFIT, // "remoutfit" | ||
113 | RLV_BHVR_GETOUTFIT, // "getoutfit" | ||
114 | RLV_BHVR_GETATTACH, // "getattach" | ||
115 | RLV_BHVR_SHOWINV, // "showinv" | ||
116 | RLV_BHVR_VIEWNOTE, // "viewnote" | ||
117 | RLV_BHVR_UNSIT, // "unsit" | ||
118 | RLV_BHVR_SIT, // "sit" | ||
119 | RLV_BHVR_SENDCHANNEL, // "sendchannel" | ||
120 | RLV_BHVR_GETSTATUS, // "getstatus" | ||
121 | RLV_BHVR_GETSTATUSALL, // "getstatusall" | ||
122 | RLV_BHVR_GETINV, // "getinv" | ||
123 | RLV_BHVR_GETINVWORN, // "getinvworn" | ||
124 | RLV_BHVR_FINDFOLDER, // "findfolder" | ||
125 | RLV_BHVR_FINDFOLDERS, // "findfolders" | ||
126 | RLV_BHVR_ATTACH, // "attach" | ||
127 | RLV_BHVR_ATTACHALL, // "attachall" | ||
128 | RLV_BHVR_DETACHALL, // "detachall" | ||
129 | RLV_BHVR_GETPATH, // "getpath" | ||
130 | RLV_BHVR_ATTACHTHIS, // "attachthis" | ||
131 | RLV_BHVR_ATTACHALLTHIS, // "attachallthis" | ||
132 | RLV_BHVR_DETACHTHIS, // "detachthis" | ||
133 | RLV_BHVR_DETACHALLTHIS, // "detachallthis" | ||
134 | RLV_BHVR_FARTOUCH, // "fartouch" | ||
135 | RLV_BHVR_SHOWWORLDMAP, // "showworldmap" | ||
136 | RLV_BHVR_SHOWMINIMAP, // "showminimap" | ||
137 | RLV_BHVR_SHOWLOC, // "showloc" | ||
138 | RLV_BHVR_TPTO, // "tpto" | ||
139 | RLV_BHVR_ACCEPTTP, // "accepttp" | ||
140 | RLV_BHVR_ACCEPTPERMISSION, // "acceptpermission" | ||
141 | RLV_BHVR_SHOWNAMES, // "shownames" | ||
142 | RLV_BHVR_FLY, // "fly" | ||
143 | RLV_BHVR_GETSITID, // "getsitid" | ||
144 | RLV_BHVR_SETDEBUG, // "setdebug" | ||
145 | RLV_BHVR_SETENV, // "setenv" | ||
146 | RLV_BHVR_DETACHME, // "detachme" | ||
147 | RLV_BHVR_SHOWHOVERTEXTALL, // "showhovertextall" | ||
148 | RLV_BHVR_SHOWHOVERTEXTWORLD, // "showhovertextworld" | ||
149 | RLV_BHVR_SHOWHOVERTEXTHUD, // "showhovertexthud" | ||
150 | RLV_BHVR_SHOWHOVERTEXT, // "showhovertext" | ||
151 | RLV_BHVR_NOTIFY, // "notify" | ||
152 | RLV_BHVR_DEFAULTWEAR, // "defaultwear" | ||
153 | RLV_BHVR_VERSIONNUM, // "versionnum" | ||
154 | RLV_BHVR_PERMISSIVE, // "permissive" | ||
155 | |||
156 | RLV_BHVR_COUNT, | ||
157 | RLV_BHVR_UNKNOWN | ||
158 | }; | ||
159 | |||
160 | enum ERlvParamType { | ||
161 | RLV_TYPE_UNKNOWN, | ||
162 | RLV_TYPE_ADD, // <param> == "n"|"add" | ||
163 | RLV_TYPE_REMOVE, // <param> == "y"|"rem" | ||
164 | RLV_TYPE_FORCE, // <param> == "force" | ||
165 | RLV_TYPE_REPLY, // <param> == <number> | ||
166 | RLV_TYPE_CLEAR | ||
167 | }; | ||
168 | |||
169 | enum ERlvCmdRet { | ||
170 | RLV_RET_NOERROR, // Command executed succesfully | ||
171 | RLV_RET_RETAINED, // Command was retained | ||
172 | RLV_RET_DISABLED, // Command is disabled (by user) | ||
173 | RLV_RET_FAILED, // Command failed (general failure) | ||
174 | RLV_RET_FAILED_SYNTAX, // Command failed (syntax error) | ||
175 | RLV_RET_FAILED_UNSET, // Command failed (unset restriction) | ||
176 | RLV_RET_FAILED_DUPLICATE, // Command failed (duplicate) | ||
177 | RLV_RET_FAILED_OPTION, // Command failed (invalid option) | ||
178 | RLV_RET_FAILED_PARAM, // Command failed (invalid param) | ||
179 | RLV_RET_UNKNOWN // Command unkown | ||
180 | }; | ||
181 | |||
182 | enum ERlvExceptionCheck { | ||
183 | RLV_CHECK_PERMISSIVE, // Exception can be set by any object | ||
184 | RLV_CHECK_STRICT, // Exception must be set by all objects holding the restriction | ||
185 | RLV_CHECK_DEFAULT // Permissive or strict will be determined by currently enforced restrictions | ||
186 | }; | ||
187 | |||
188 | // ============================================================================ | ||
189 | // Settings | ||
190 | |||
191 | #define RLV_SETTING_MAIN "RestrainedLife" | ||
192 | #define RLV_SETTING_DEBUG "RestrainedLifeDebug" | ||
193 | #define RLV_SETTING_NOSETENV "RestrainedLifeNoSetEnv" | ||
194 | #define RLV_SETTING_FORBIDGIVETORLV "RestrainedLifeForbidGiveToRLV" | ||
195 | |||
196 | #define RLV_SETTING_ENABLEWEAR "RLVaEnableWear" | ||
197 | #define RLV_SETTING_ENABLELEGACYNAMING "RLVaEnableLegacyNaming" | ||
198 | #define RLV_SETTING_HIDELOCKEDLAYER "RLVaHideLockedLayers" | ||
199 | #define RLV_SETTING_HIDELOCKEDATTACH "RLVaHideLockedAttachments" | ||
200 | #define RLV_SETTING_HIDELOCKEDINVENTORY "RLVaHideLockedInventory" | ||
201 | #define RLV_SETTING_LOGINLASTLOCATION "RLVaLoginLastLocation" | ||
202 | #define RLV_SETTING_SHOWNAMETAGS "RLVaShowNameTags" | ||
203 | |||
204 | #define RLV_SETTING_FIRSTUSE_PREFIX "FirstRLV" | ||
205 | #define RLV_SETTING_FIRSTUSE_DETACH RLV_SETTING_FIRSTUSE_PREFIX"Detach" | ||
206 | #define RLV_SETTING_FIRSTUSE_ENABLEWEAR RLV_SETTING_FIRSTUSE_PREFIX"EnableWear" | ||
207 | #define RLV_SETTING_FIRSTUSE_FARTOUCH RLV_SETTING_FIRSTUSE_PREFIX"Fartouch" | ||
208 | #define RLV_SETTING_FIRSTUSE_GIVETORLV RLV_SETTING_FIRSTUSE_PREFIX"GiveToRLV" | ||
209 | |||
210 | // ============================================================================ | ||
211 | |||
212 | #endif // RLV_DEFINES_H | ||
diff --git a/linden/indra/newview/rlvevent.h b/linden/indra/newview/rlvevent.h new file mode 100644 index 0000000..a98996f --- /dev/null +++ b/linden/indra/newview/rlvevent.h | |||
@@ -0,0 +1,227 @@ | |||
1 | #ifndef RLV_EVENTEMITTER_H | ||
2 | #define RLV_EVENTEMITTER_H | ||
3 | |||
4 | #include <algorithm> | ||
5 | #include <typeinfo> | ||
6 | #include <list> | ||
7 | |||
8 | #include "lluuid.h" | ||
9 | |||
10 | #include "rlvhelper.h" | ||
11 | |||
12 | // ============================================================================ | ||
13 | // RlvEvent - Passed to observer event handlers (contains the same paramaters as RlvHandler::processXXXCommand) | ||
14 | // | ||
15 | |||
16 | class RlvEvent | ||
17 | { | ||
18 | public: | ||
19 | RlvEvent(const LLUUID& uuid, const RlvCommand& rlvCmd) : m_UUID(uuid), m_rlvCmd(rlvCmd) {} | ||
20 | virtual ~RlvEvent() {} | ||
21 | |||
22 | const LLUUID& getSenderID() const { return m_UUID; }; | ||
23 | const RlvCommand& getCommand() const { return m_rlvCmd; }; | ||
24 | |||
25 | protected: | ||
26 | LLUUID m_UUID; | ||
27 | RlvCommand m_rlvCmd; | ||
28 | }; | ||
29 | |||
30 | // ============================================================================ | ||
31 | /* | ||
32 | * RlvObserver | ||
33 | * =========== | ||
34 | * Provides a way to extend the existing command set without changing the main RlvHandler class | ||
35 | * | ||
36 | * Steps: | ||
37 | * - derive your class from RlvObserver | ||
38 | * - override any of the event functions you need | ||
39 | * - add it as an observer: gRlvHandler.addObserver(new RlbObserverDerivedClass()); | ||
40 | * - done | ||
41 | * | ||
42 | * Notes: | ||
43 | * - as long as you don't call gRlvHandler.remObserver() your class will be cleaned up from | ||
44 | * RlvEventEmitter destructor (see below) | ||
45 | * - event handlers are called only if RlvHandler didn't handle it so while you can | ||
46 | * add a new command @foobar=n, you won't get called for @detach=n | ||
47 | * - event handlers are called *after* the command is added so a call to | ||
48 | * RlvHandler::hasBehaviour("foobar") would return TRUE | ||
49 | * - return TRUE if you handled the command (won't get passed on to the next observer) | ||
50 | * return FALSE if you didn't handle the command (gets passed on to the next observer) | ||
51 | * | ||
52 | */ | ||
53 | |||
54 | class RlvObserver | ||
55 | { | ||
56 | public: | ||
57 | virtual ~RlvObserver() {} | ||
58 | |||
59 | typedef RlvEvent EventType; | ||
60 | |||
61 | virtual BOOL onAddCommand(const EventType& rlvEvent) { return FALSE; } | ||
62 | virtual BOOL onRemoveCommand(const EventType& rlvEvent) { return FALSE; } | ||
63 | virtual BOOL onClearCommand(const EventType& rlvEvent) { return FALSE; } | ||
64 | virtual BOOL onReplyCommand(const EventType& rlvEvent) { return FALSE; } | ||
65 | virtual BOOL onForceCommand(const EventType& rlvEvent) { return FALSE; } | ||
66 | }; | ||
67 | |||
68 | // ============================================================================ | ||
69 | /* | ||
70 | * RlvEventEmitter | ||
71 | * =============== | ||
72 | * Essentially a slightly modified eventEmitter (see lleventemitter.h) | ||
73 | * | ||
74 | * Changes: | ||
75 | * - if an event handler returns TRUE then no further observers are notified | ||
76 | * - cleans up the (remaining) observers in the destructor | ||
77 | */ | ||
78 | |||
79 | template < class T > | ||
80 | class RlvEventEmitter | ||
81 | { | ||
82 | public: | ||
83 | typedef typename T::EventType EventType; | ||
84 | typedef std::list< T* > ObserverContainer; | ||
85 | typedef BOOL ( T::*observerMethod )( const EventType& ); | ||
86 | |||
87 | protected: | ||
88 | ObserverContainer observers; | ||
89 | |||
90 | public: | ||
91 | RlvEventEmitter() { }; | ||
92 | |||
93 | ~RlvEventEmitter() | ||
94 | { | ||
95 | clearObservers(); | ||
96 | } | ||
97 | |||
98 | BOOL addObserver ( T* observerIn ) | ||
99 | { | ||
100 | if ( ! observerIn ) | ||
101 | return FALSE; | ||
102 | |||
103 | // check if observer already exists | ||
104 | if ( std::find ( observers.begin (), observers.end (), observerIn ) != observers.end () ) | ||
105 | return FALSE; | ||
106 | |||
107 | // save it | ||
108 | observers.push_back ( observerIn ); | ||
109 | |||
110 | return true; | ||
111 | } | ||
112 | |||
113 | BOOL remObserver ( T* observerIn ) | ||
114 | { | ||
115 | if ( ! observerIn ) | ||
116 | return FALSE; | ||
117 | |||
118 | observers.remove ( observerIn ); | ||
119 | |||
120 | return TRUE; | ||
121 | } | ||
122 | |||
123 | void clearObservers() | ||
124 | { | ||
125 | typename std::list< T* >::iterator iter = observers.begin (); | ||
126 | |||
127 | while (iter != observers.end ()) | ||
128 | { | ||
129 | delete *iter; | ||
130 | ++iter; | ||
131 | }; | ||
132 | |||
133 | observers.clear(); | ||
134 | } | ||
135 | |||
136 | BOOL update ( observerMethod method, const EventType& msgIn ) | ||
137 | { | ||
138 | typename std::list< T* >::iterator iter = observers.begin (); | ||
139 | |||
140 | BOOL fContinue = TRUE; | ||
141 | while ( (iter != observers.end ()) && (fContinue) ) | ||
142 | { | ||
143 | fContinue = !( ( ( *iter )->*method ) ( msgIn ) ); | ||
144 | ++iter; | ||
145 | }; | ||
146 | |||
147 | return !fContinue; | ||
148 | } | ||
149 | }; | ||
150 | |||
151 | // ============================================================================ | ||
152 | |||
153 | class RlvBehaviourObserver | ||
154 | { | ||
155 | public: | ||
156 | virtual ~RlvBehaviourObserver() {} | ||
157 | virtual void changed(const RlvCommand& rlvCmd, bool fInternal) = 0; | ||
158 | }; | ||
159 | |||
160 | // ============================================================================ | ||
161 | |||
162 | class RlvBehaviourNotifyObserver : public RlvBehaviourObserver | ||
163 | { | ||
164 | public: | ||
165 | virtual ~RlvBehaviourNotifyObserver() { } | ||
166 | |||
167 | void changed(const RlvCommand& rlvCmd, bool fInternal) | ||
168 | { | ||
169 | if (fInternal) | ||
170 | return; | ||
171 | |||
172 | std::string strCmd = rlvCmd.asString(), strNotify; ERlvParamType eCmdType = rlvCmd.getParamType(); | ||
173 | if ( (RLV_TYPE_ADD == eCmdType) || (RLV_TYPE_REMOVE == eCmdType) ) | ||
174 | strNotify = llformat("/%s=%s", strCmd.c_str(), rlvCmd.getParam().c_str()); | ||
175 | else if (RLV_TYPE_CLEAR == eCmdType) | ||
176 | strNotify = llformat("/%s", strCmd.c_str()); | ||
177 | else | ||
178 | return; | ||
179 | |||
180 | for (std::multimap<LLUUID, notifyData>::const_iterator itNotify = m_Notifications.begin(); | ||
181 | itNotify != m_Notifications.end(); ++itNotify) | ||
182 | { | ||
183 | if ( (itNotify->second.strFilter.empty()) || (std::string::npos != strCmd.find(itNotify->second.strFilter)) ) | ||
184 | rlvSendChatReply(itNotify->second.nChannel, strNotify); | ||
185 | } | ||
186 | } | ||
187 | |||
188 | void addNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter) | ||
189 | { | ||
190 | m_Notifications.insert(std::pair<LLUUID, notifyData>(idObj, notifyData(nChannel, strFilter))); | ||
191 | } | ||
192 | |||
193 | void clearNotify(const LLUUID& idObj) | ||
194 | { | ||
195 | m_Notifications.erase(idObj); | ||
196 | } | ||
197 | |||
198 | bool hasNotify() | ||
199 | { | ||
200 | return (m_Notifications.size() != 0); | ||
201 | } | ||
202 | |||
203 | void removeNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter) | ||
204 | { | ||
205 | for (std::multimap<LLUUID, notifyData>::iterator itNotify = m_Notifications.lower_bound(idObj), | ||
206 | endNotify = m_Notifications.upper_bound(idObj); itNotify != endNotify; ++itNotify) | ||
207 | { | ||
208 | if ( (itNotify->second.nChannel == nChannel) && (itNotify->second.strFilter == strFilter) ) | ||
209 | { | ||
210 | m_Notifications.erase(itNotify); | ||
211 | break; | ||
212 | } | ||
213 | } | ||
214 | } | ||
215 | protected: | ||
216 | struct notifyData | ||
217 | { | ||
218 | S32 nChannel; | ||
219 | std::string strFilter; | ||
220 | notifyData(S32 channel, const std::string& filter) : nChannel(channel), strFilter(filter) {} | ||
221 | }; | ||
222 | std::multimap<LLUUID, notifyData> m_Notifications; | ||
223 | }; | ||
224 | |||
225 | // ============================================================================ | ||
226 | |||
227 | #endif // RLV_EVENTEMITTER_H | ||
diff --git a/linden/indra/newview/rlvextensions.cpp b/linden/indra/newview/rlvextensions.cpp new file mode 100644 index 0000000..f31c62e --- /dev/null +++ b/linden/indra/newview/rlvextensions.cpp | |||
@@ -0,0 +1,497 @@ | |||
1 | #include "llviewerprecompiledheaders.h" | ||
2 | #include "llagent.h" | ||
3 | #include "llfloaterwindlight.h" | ||
4 | #include "llviewercontrol.h" | ||
5 | #include "llviewerwindow.h" | ||
6 | #include "llvoavatar.h" | ||
7 | #include "llwlparammanager.h" | ||
8 | |||
9 | #include "rlvextensions.h" | ||
10 | #include "rlvhandler.h" | ||
11 | |||
12 | // ============================================================================ | ||
13 | |||
14 | std::map<std::string, S16> RlvExtGetSet::m_DbgAllowed; | ||
15 | std::map<std::string, std::string> RlvExtGetSet::m_PseudoDebug; | ||
16 | |||
17 | // Checked: 2009-06-03 (RLVa-0.2.0h) | Modified: RLVa-0.2.0h | ||
18 | RlvExtGetSet::RlvExtGetSet() | ||
19 | { | ||
20 | if (!m_DbgAllowed.size()) // m_DbgAllowed is static and should only be initialized once | ||
21 | { | ||
22 | m_DbgAllowed.insert(std::pair<std::string, S16>("AvatarSex", DBG_READ | DBG_WRITE | DBG_PSEUDO)); | ||
23 | m_DbgAllowed.insert(std::pair<std::string, S16>("RenderResolutionDivisor", DBG_READ | DBG_WRITE)); | ||
24 | #ifdef RLV_EXTENSION_CMD_GETSETDEBUG_EX | ||
25 | m_DbgAllowed.insert(std::pair<std::string, S16>(RLV_SETTING_FORBIDGIVETORLV, DBG_READ)); | ||
26 | m_DbgAllowed.insert(std::pair<std::string, S16>(RLV_SETTING_NOSETENV, DBG_READ)); | ||
27 | m_DbgAllowed.insert(std::pair<std::string, S16>("WindLightUseAtmosShaders", DBG_READ)); | ||
28 | #endif // RLV_EXTENSION_CMD_GETSETDEBUG_EX | ||
29 | |||
30 | // Cache persistance of every setting | ||
31 | LLControlVariable* pSetting; | ||
32 | for (std::map<std::string, S16>::iterator itDbg = m_DbgAllowed.begin(); itDbg != m_DbgAllowed.end(); ++itDbg) | ||
33 | { | ||
34 | if ( ((pSetting = gSavedSettings.getControl(itDbg->first)) != NULL) && (pSetting->isPersisted()) ) | ||
35 | itDbg->second |= DBG_PERSIST; | ||
36 | } | ||
37 | } | ||
38 | } | ||
39 | |||
40 | // Checked: 2009-05-17 (RLVa-0.2.0a) | ||
41 | BOOL RlvExtGetSet::onForceCommand(const RlvEvent& rlvEvent) | ||
42 | { | ||
43 | return processCommand(rlvEvent.getSenderID(), rlvEvent.getCommand()); | ||
44 | } | ||
45 | |||
46 | // Checked: 2009-05-17 (RLVa-0.2.0a) | ||
47 | BOOL RlvExtGetSet::onReplyCommand(const EventType& rlvEvent) | ||
48 | { | ||
49 | return processCommand(rlvEvent.getSenderID(), rlvEvent.getCommand()); | ||
50 | } | ||
51 | |||
52 | // Checked: 2009-06-18 (RLVa-0.2.1d) | Modified: RLVa-0.2.1d | ||
53 | BOOL RlvExtGetSet::processCommand(const LLUUID& idObj, const RlvCommand& rlvCmd) | ||
54 | { | ||
55 | std::string strBehaviour = rlvCmd.getBehaviour(), strGetSet, strSetting; | ||
56 | int idxSetting = strBehaviour.find('_'); | ||
57 | if ( (strBehaviour.length() >= 6) && (-1 != idxSetting) && ((int)strBehaviour.length() > idxSetting + 1) ) | ||
58 | { | ||
59 | strSetting = strBehaviour.substr(idxSetting + 1); | ||
60 | strBehaviour.erase(idxSetting); // Get rid of "_<setting>" | ||
61 | |||
62 | strGetSet = strBehaviour.substr(0, 3); | ||
63 | strBehaviour.erase(0, 3); // Get rid of get/set | ||
64 | |||
65 | if ("debug" == strBehaviour) | ||
66 | { | ||
67 | if ( ("get" == strGetSet) && (RLV_TYPE_REPLY == rlvCmd.getParamType()) ) | ||
68 | { | ||
69 | rlvSendChatReply(rlvCmd.getParam(), onGetDebug(strSetting)); | ||
70 | return TRUE; | ||
71 | } | ||
72 | else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) | ||
73 | { | ||
74 | if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETDEBUG, idObj)) | ||
75 | onSetDebug(strSetting, rlvCmd.getOption()); | ||
76 | return TRUE; | ||
77 | } | ||
78 | } | ||
79 | else if ("env" == strBehaviour) | ||
80 | { | ||
81 | if ( ("get" == strGetSet) && (RLV_TYPE_REPLY == rlvCmd.getParamType()) ) | ||
82 | { | ||
83 | rlvSendChatReply(rlvCmd.getParam(), onGetEnv(strSetting)); | ||
84 | return TRUE; | ||
85 | } | ||
86 | else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) | ||
87 | { | ||
88 | if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, idObj)) | ||
89 | onSetEnv(strSetting, rlvCmd.getOption()); | ||
90 | return TRUE; | ||
91 | } | ||
92 | } | ||
93 | } | ||
94 | else if ("setrot" == rlvCmd.getBehaviour()) | ||
95 | { | ||
96 | // NOTE: if <option> is invalid (or missing) altogether then RLV-1.17 will rotate to 0.0 (which is actually PI / 4) | ||
97 | F32 nAngle = 0.0f; | ||
98 | if (LLStringUtil::convertToF32(rlvCmd.getOption(), nAngle)) | ||
99 | { | ||
100 | nAngle += RLV_SETROT_OFFSET; | ||
101 | |||
102 | gAgent.startCameraAnimation(); | ||
103 | |||
104 | LLVector3 at(LLVector3::x_axis); | ||
105 | at.rotVec(nAngle, LLVector3::z_axis); | ||
106 | at.normalize(); | ||
107 | gAgent.resetAxes(at); | ||
108 | |||
109 | return TRUE; | ||
110 | } | ||
111 | } | ||
112 | return FALSE; | ||
113 | } | ||
114 | |||
115 | // Checked: 2009-06-03 (RLVa-0.2.0h) | Modified: RLVa-0.2.0h | ||
116 | bool RlvExtGetSet::findDebugSetting(std::string& strSetting, S16& flags) | ||
117 | { | ||
118 | LLStringUtil::toLower(strSetting); // Convenience for non-RLV calls | ||
119 | |||
120 | std::string strTemp; | ||
121 | for (std::map<std::string, S16>::const_iterator itSetting = m_DbgAllowed.begin(); itSetting != m_DbgAllowed.end(); ++itSetting) | ||
122 | { | ||
123 | strTemp = itSetting->first; | ||
124 | LLStringUtil::toLower(strTemp); | ||
125 | |||
126 | if (strSetting == strTemp) | ||
127 | { | ||
128 | strSetting = itSetting->first; | ||
129 | flags = itSetting->second; | ||
130 | return true; | ||
131 | } | ||
132 | } | ||
133 | return false; | ||
134 | } | ||
135 | |||
136 | // Checked: 2009-06-03 (RLVa-0.2.0h) | Added: RLVa-0.2.0h | ||
137 | S16 RlvExtGetSet::getDebugSettingFlags(const std::string& strSetting) | ||
138 | { | ||
139 | std::map<std::string, S16>::const_iterator itSetting = m_DbgAllowed.find(strSetting); | ||
140 | return (itSetting != m_DbgAllowed.end()) ? itSetting->second : 0; | ||
141 | } | ||
142 | |||
143 | // Checked: 2009-06-03 (RLVa-0.2.0h) | Modified: RLVa-0.2.0h | ||
144 | std::string RlvExtGetSet::onGetDebug(std::string strSetting) | ||
145 | { | ||
146 | S16 dbgFlags; | ||
147 | if ( (findDebugSetting(strSetting, dbgFlags)) && ((dbgFlags & DBG_READ) == DBG_READ) ) | ||
148 | { | ||
149 | if ((dbgFlags & DBG_PSEUDO) == 0) | ||
150 | { | ||
151 | LLControlVariable* pSetting = gSavedSettings.getControl(strSetting); | ||
152 | if (pSetting) | ||
153 | { | ||
154 | switch (pSetting->type()) | ||
155 | { | ||
156 | case TYPE_U32: | ||
157 | return llformat("%u", gSavedSettings.getU32(strSetting)); | ||
158 | case TYPE_S32: | ||
159 | return llformat("%d", gSavedSettings.getS32(strSetting)); | ||
160 | case TYPE_BOOLEAN: | ||
161 | return llformat("%d", gSavedSettings.getBOOL(strSetting)); | ||
162 | default: | ||
163 | RLV_ERRS << "Unexpected debug setting type" << LL_ENDL; | ||
164 | break; | ||
165 | } | ||
166 | } | ||
167 | } | ||
168 | else | ||
169 | { | ||
170 | return onGetPseudoDebug(strSetting); | ||
171 | } | ||
172 | } | ||
173 | return std::string(); | ||
174 | } | ||
175 | |||
176 | // Checked: 2009-10-03 (RLVa-1.0.4e) | Added: RLVa-1.0.4e | ||
177 | std::string RlvExtGetSet::onGetPseudoDebug(const std::string& strSetting) | ||
178 | { | ||
179 | // Skip sanity checking because it's all done in RlvExtGetSet::onGetDebug() already | ||
180 | if ("AvatarSex" == strSetting) | ||
181 | { | ||
182 | std::map<std::string, std::string>::const_iterator itPseudo = m_PseudoDebug.find(strSetting); | ||
183 | if (itPseudo != m_PseudoDebug.end()) | ||
184 | { | ||
185 | return itPseudo->second; | ||
186 | } | ||
187 | else | ||
188 | { | ||
189 | if (gAgent.getAvatarObject()) | ||
190 | return llformat("%d", (gAgent.getAvatarObject()->getSex() == SEX_MALE)); // [See LLFloaterCustomize::LLFloaterCustomize()] | ||
191 | } | ||
192 | } | ||
193 | return std::string(); | ||
194 | } | ||
195 | |||
196 | // Checked: 2009-10-10 (RLVa-1.0.4e) | Modified: RLVa-1.0.4e | ||
197 | void RlvExtGetSet::onSetDebug(std::string strSetting, const std::string& strValue) | ||
198 | { | ||
199 | S16 dbgFlags; | ||
200 | if ( (findDebugSetting(strSetting, dbgFlags)) && ((dbgFlags & DBG_WRITE) == DBG_WRITE) ) | ||
201 | { | ||
202 | if ((dbgFlags & DBG_PSEUDO) == 0) | ||
203 | { | ||
204 | LLControlVariable* pSetting = gSavedSettings.getControl(strSetting); | ||
205 | if (pSetting) | ||
206 | { | ||
207 | U32 u32Value; S32 s32Value; BOOL fValue; | ||
208 | switch (pSetting->type()) | ||
209 | { | ||
210 | case TYPE_U32: | ||
211 | if (LLStringUtil::convertToU32(strValue, u32Value)) | ||
212 | gSavedSettings.setU32(strSetting, u32Value); | ||
213 | break; | ||
214 | case TYPE_S32: | ||
215 | if (LLStringUtil::convertToS32(strValue, s32Value)) | ||
216 | gSavedSettings.setS32(strSetting, s32Value); | ||
217 | break; | ||
218 | case TYPE_BOOLEAN: | ||
219 | if (LLStringUtil::convertToBOOL(strValue, fValue)) | ||
220 | gSavedSettings.setBOOL(strSetting, fValue); | ||
221 | break; | ||
222 | default: | ||
223 | RLV_ERRS << "Unexpected debug setting type" << LL_ENDL; | ||
224 | break; | ||
225 | } | ||
226 | |||
227 | // Default settings should persist if they were marked that way, but non-default settings should never persist | ||
228 | pSetting->setPersist( (pSetting->isDefault()) ? ((dbgFlags & DBG_PERSIST) == DBG_PERSIST) : false ); | ||
229 | } | ||
230 | } | ||
231 | else | ||
232 | { | ||
233 | onSetPseudoDebug(strSetting, strValue); | ||
234 | } | ||
235 | } | ||
236 | } | ||
237 | |||
238 | // Checked: 2009-10-10 (RLVa-1.0.4e) | Modified: RLVa-1.0.4e | ||
239 | void RlvExtGetSet::onSetPseudoDebug(const std::string& strSetting, const std::string& strValue) | ||
240 | { | ||
241 | if ("AvatarSex" == strSetting) | ||
242 | { | ||
243 | BOOL fValue; | ||
244 | if (LLStringUtil::convertToBOOL(strValue, fValue)) | ||
245 | m_PseudoDebug[strSetting] = strValue; | ||
246 | } | ||
247 | } | ||
248 | |||
249 | // Checked: 2009-09-16 (RLVa-1.0.3c) | Modified: RLVa-1.0.3c | ||
250 | std::string RlvExtGetSet::onGetEnv(std::string strSetting) | ||
251 | { | ||
252 | // HACK: - create a LLFloaterWindLight instance if there isn't one already | ||
253 | // - isOpen() is actually instanceExists() | ||
254 | // - creating an instance results in showing the floater which is why we need to ->close() it | ||
255 | if (!LLFloaterWindLight::isOpen()) | ||
256 | { | ||
257 | LLFloaterWindLight::instance()->close(); | ||
258 | LLFloaterWindLight::instance()->syncMenu(); | ||
259 | } | ||
260 | |||
261 | LLWLParamManager* pWLParams = LLWLParamManager::instance(); | ||
262 | |||
263 | F32 nValue = 0.0f; | ||
264 | if ("daytime" == strSetting) | ||
265 | { | ||
266 | nValue = (pWLParams->mAnimator.mIsRunning && pWLParams->mAnimator.mUseLindenTime) ? -1.0f : pWLParams->mAnimator.getDayTime(); | ||
267 | } | ||
268 | else if ("preset" == strSetting) | ||
269 | { | ||
270 | return (pWLParams->mAnimator.mIsRunning && pWLParams->mAnimator.mUseLindenTime) ? std::string() : pWLParams->mCurParams.mName; | ||
271 | } | ||
272 | else if ("cloudcoverage" == strSetting) nValue = pWLParams->mCloudCoverage; | ||
273 | else if ("cloudscale" == strSetting) nValue = pWLParams->mCloudScale; | ||
274 | else if ("cloudscrollx" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollX() - 10.0f; | ||
275 | else if ("cloudscrolly" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollY() - 10.0f; | ||
276 | else if ("densitymultiplier" == strSetting) nValue = pWLParams->mDensityMult.x * pWLParams->mDensityMult.mult; | ||
277 | else if ("distancemultiplier" == strSetting) nValue = pWLParams->mDistanceMult; | ||
278 | else if ("eastangle" == strSetting) nValue = pWLParams->mCurParams.getEastAngle() / F_TWO_PI; | ||
279 | else if ("hazedensity" == strSetting) nValue = pWLParams->mHazeDensity.r; | ||
280 | else if ("hazehorizon" == strSetting) nValue = pWLParams->mHazeHorizon.r; | ||
281 | else if ("maxaltitude" == strSetting) nValue = pWLParams->mMaxAlt; | ||
282 | else if ("scenegamma" == strSetting) nValue = pWLParams->mWLGamma; | ||
283 | else if ("starbrightness" == strSetting) nValue = pWLParams->mCurParams.getStarBrightness(); | ||
284 | else if ("sunglowfocus" == strSetting) nValue = -pWLParams->mGlow.b / 5.0f; | ||
285 | else if ("sunglowsize" == strSetting) nValue = 2 - pWLParams->mGlow.r / 20.0f; | ||
286 | else if ("sunmoonposition" == strSetting) nValue = pWLParams->mCurParams.getSunAngle() / F_TWO_PI; | ||
287 | else | ||
288 | { | ||
289 | char ch = strSetting[strSetting.length() - 1]; | ||
290 | // HACK-RLVa: not entirely proper (creates new synonyms) | ||
291 | if ('x' == ch) ch = 'r'; | ||
292 | else if ('y' == ch) ch = 'g'; | ||
293 | else if ('d' == ch) ch = 'b'; | ||
294 | |||
295 | if ( ('r' == ch) || ('g' == ch) || ('b' == ch) || ('i' == ch) ) | ||
296 | { | ||
297 | WLColorControl* pColour = NULL; | ||
298 | strSetting.erase(strSetting.length() - 1, 1); | ||
299 | |||
300 | if ("ambient" == strSetting) pColour = &pWLParams->mAmbient; | ||
301 | else if ("bluedensity" == strSetting) pColour = &pWLParams->mBlueDensity; | ||
302 | else if ("bluehorizon" == strSetting) pColour = &pWLParams->mBlueHorizon; | ||
303 | else if ("sunmooncolor" == strSetting) pColour = &pWLParams->mSunlight; | ||
304 | else if ("cloudcolor" == strSetting) pColour = &pWLParams->mCloudColor; | ||
305 | else if ("cloud" == strSetting) pColour = &pWLParams->mCloudMain; | ||
306 | else if ("clouddetail" == strSetting) pColour = &pWLParams->mCloudDetail; | ||
307 | |||
308 | if (pColour) | ||
309 | { | ||
310 | if ('r' == ch) nValue = pColour->r; | ||
311 | else if ('g' == ch) nValue = pColour->g; | ||
312 | else if ('b' == ch) nValue = pColour->b; | ||
313 | else if (('i' == ch) && (pColour->hasSliderName)) nValue = llmax(pColour->r, pColour->g, pColour->b); | ||
314 | |||
315 | if (pColour->isBlueHorizonOrDensity) nValue /= 2.0f; | ||
316 | else if (pColour->isSunOrAmbientColor) nValue /= 3.0f; | ||
317 | } | ||
318 | } | ||
319 | } | ||
320 | |||
321 | return llformat("%f", nValue); | ||
322 | } | ||
323 | |||
324 | // Checked: 2009-09-16 (RLVa-1.0.3c) | Modified: RLVa-1.0.3c | ||
325 | void RlvExtGetSet::onSetEnv(std::string strSetting, const std::string& strValue) | ||
326 | { | ||
327 | // HACK: see RlvExtGetSet::onGetEnv | ||
328 | if (!LLFloaterWindLight::isOpen()) | ||
329 | { | ||
330 | LLFloaterWindLight::instance()->close(); | ||
331 | LLFloaterWindLight::instance()->syncMenu(); | ||
332 | } | ||
333 | |||
334 | LLWLParamManager* pWLParams = LLWLParamManager::instance(); | ||
335 | WLFloatControl* pFloat = NULL; | ||
336 | WLColorControl* pColour = NULL; | ||
337 | |||
338 | F32 nValue = 0.0f; | ||
339 | // Sanity check - make sure strValue specifies a number for all settings except "preset" | ||
340 | if ( (rlv_handler_t::fNoSetEnv) || ( (!LLStringUtil::convertToF32(strValue, nValue)) && ("preset" != strSetting) )) | ||
341 | return; | ||
342 | |||
343 | // Not quite correct, but RLV-1.16.0 will halt the default daytime cycle on invalid commands so we need to as well | ||
344 | pWLParams->mAnimator.mIsRunning = false; | ||
345 | pWLParams->mAnimator.mUseLindenTime = false; | ||
346 | |||
347 | // See LLWorldEnvSettings::handleEvent() | ||
348 | if ("daytime" == strSetting) | ||
349 | { | ||
350 | if (0.0f <= nValue) | ||
351 | { | ||
352 | pWLParams->mAnimator.setDayTime(llmin(nValue, 1.0f)); | ||
353 | pWLParams->mAnimator.update(pWLParams->mCurParams); | ||
354 | } | ||
355 | else | ||
356 | { | ||
357 | pWLParams->mAnimator.mIsRunning = true; | ||
358 | pWLParams->mAnimator.mUseLindenTime = true; | ||
359 | } | ||
360 | return; | ||
361 | } | ||
362 | // See LLFloaterWindLight::onChangePresetName() | ||
363 | else if ("preset" == strSetting) | ||
364 | { | ||
365 | pWLParams->loadPreset(strValue, true); | ||
366 | return; | ||
367 | } | ||
368 | // See LLFloaterWindLight::onStarAlphaMoved | ||
369 | else if ("starbrightness" == strSetting) | ||
370 | { | ||
371 | pWLParams->mCurParams.setStarBrightness(nValue); | ||
372 | return; | ||
373 | } | ||
374 | // See LLFloaterWindLight::onGlowRMoved() / LLFloaterWindLight::onGlowBMoved() | ||
375 | else if ( ("sunglowfocus" == strSetting) || ("sunglowsize" == strSetting) ) | ||
376 | { | ||
377 | WLColorControl *pColour = &pWLParams->mGlow; | ||
378 | if ("sunglowfocus" == strSetting) | ||
379 | pColour->b = -nValue * 5; | ||
380 | else | ||
381 | pColour->r = (2 - nValue) * 20; | ||
382 | |||
383 | pColour->update(pWLParams->mCurParams); | ||
384 | pWLParams->propagateParameters(); | ||
385 | return; | ||
386 | } | ||
387 | // See LLFloaterWindLight::onSunMoved() | ||
388 | else if ( ("eastangle" == strSetting) || ("sunmoonposition" == strSetting) ) | ||
389 | { | ||
390 | if ("eastangle" == strSetting) | ||
391 | pWLParams->mCurParams.setEastAngle(F_TWO_PI * nValue); | ||
392 | else | ||
393 | pWLParams->mCurParams.setSunAngle(F_TWO_PI * nValue); | ||
394 | |||
395 | // TODO-RLVa: it looks like propagateParameters() will actually take care of this for us, making this redundant? | ||
396 | WLColorControl* pColour = &pWLParams->mLightnorm; | ||
397 | pColour->r = -sin(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); | ||
398 | pColour->g = sin(pWLParams->mCurParams.getSunAngle()); | ||
399 | pColour->b = cos(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); | ||
400 | pColour->i = 1.f; | ||
401 | |||
402 | pColour->update(pWLParams->mCurParams); | ||
403 | pWLParams->propagateParameters(); | ||
404 | return; | ||
405 | } | ||
406 | // See LLFloaterWindLight::onCloudScrollXMoved() / LLFloaterWindLight::onCloudScrollYMoved() | ||
407 | else if ("cloudscrollx" == strSetting) | ||
408 | { | ||
409 | pWLParams->mCurParams.setCloudScrollX(nValue + 10.0f); | ||
410 | return; | ||
411 | } | ||
412 | else if ("cloudscrolly" == strSetting) | ||
413 | { | ||
414 | pWLParams->mCurParams.setCloudScrollY(nValue + 10.0f); | ||
415 | return; | ||
416 | } | ||
417 | // See LLFloaterWindLight::onFloatControlMoved() | ||
418 | else if ("cloudcoverage" == strSetting) pFloat = &pWLParams->mCloudCoverage; | ||
419 | else if ("cloudscale" == strSetting) pFloat = &pWLParams->mCloudScale; | ||
420 | else if ("densitymultiplier" == strSetting) pFloat = &pWLParams->mDensityMult; | ||
421 | else if ("distancemultiplier" == strSetting) pFloat = &pWLParams->mDistanceMult; | ||
422 | else if ("maxaltitude" == strSetting) pFloat = &pWLParams->mMaxAlt; | ||
423 | else if ("scenegamma" == strSetting) pFloat = &pWLParams->mWLGamma; | ||
424 | // See LLFloaterWindLight::onColorControlRMoved() | ||
425 | else if ("hazedensity" == strSetting) pColour = &pWLParams->mHazeDensity; | ||
426 | else if ("hazehorizon" == strSetting) pColour = &pWLParams->mHazeHorizon; | ||
427 | |||
428 | if (pFloat) | ||
429 | { | ||
430 | pFloat->x = nValue / pFloat->mult; | ||
431 | pFloat->update(pWLParams->mCurParams); | ||
432 | pWLParams->propagateParameters(); | ||
433 | return; | ||
434 | } | ||
435 | else if (pColour) | ||
436 | { | ||
437 | pColour->r = nValue; | ||
438 | pColour->update(pWLParams->mCurParams); | ||
439 | pWLParams->propagateParameters(); | ||
440 | return; | ||
441 | } | ||
442 | |||
443 | // RGBI settings | ||
444 | char ch = strSetting[strSetting.length() - 1]; | ||
445 | if ('x' == ch) ch = 'r'; | ||
446 | else if ('y' == ch) ch = 'g'; | ||
447 | else if ('d' == ch) ch = 'b'; | ||
448 | |||
449 | if ( ('r' == ch) || ('g' == ch) || ('b' == ch) || ('i' == ch) ) | ||
450 | { | ||
451 | strSetting.erase(strSetting.length() - 1, 1); | ||
452 | |||
453 | if ("ambient" == strSetting) pColour = &pWLParams->mAmbient; | ||
454 | else if ("bluedensity" == strSetting) pColour = &pWLParams->mBlueDensity; | ||
455 | else if ("bluehorizon" == strSetting) pColour = &pWLParams->mBlueHorizon; | ||
456 | else if ("sunmooncolor" == strSetting) pColour = &pWLParams->mSunlight; | ||
457 | else if ("cloudcolor" == strSetting) pColour = &pWLParams->mCloudColor; | ||
458 | else if ("cloud" == strSetting) pColour = &pWLParams->mCloudMain; | ||
459 | else if ("clouddetail" == strSetting) pColour = &pWLParams->mCloudDetail; | ||
460 | |||
461 | if (pColour) | ||
462 | { | ||
463 | if (pColour->isBlueHorizonOrDensity) nValue *= 2.0f; | ||
464 | else if (pColour->isSunOrAmbientColor) nValue *= 3.0f; | ||
465 | |||
466 | if ('i' == ch) // (See: LLFloaterWindLight::onColorControlIMoved) | ||
467 | { | ||
468 | if (!pColour->hasSliderName) | ||
469 | return; | ||
470 | |||
471 | F32 curMax = llmax(pColour->r, pColour->g, pColour->b); | ||
472 | if ( (0.0f == nValue) || (0.0f == curMax) ) | ||
473 | pColour->r = pColour->g = pColour->b = pColour->i = nValue; | ||
474 | else | ||
475 | { | ||
476 | F32 nDelta = (nValue - curMax) / curMax; | ||
477 | pColour->r *= (1.0f + nDelta); | ||
478 | pColour->g *= (1.0f + nDelta); | ||
479 | pColour->b *= (1.0f + nDelta); | ||
480 | pColour->i = nValue; | ||
481 | } | ||
482 | } | ||
483 | else // (See: LLFloaterWindLight::onColorControlRMoved) | ||
484 | { | ||
485 | F32* pnValue = ('r' == ch) ? &pColour->r : ('g' == ch) ? &pColour->g : ('b' == ch) ? &pColour->b : NULL; | ||
486 | if (pnValue) | ||
487 | *pnValue = nValue; | ||
488 | pColour->i = llmax(pColour->r, pColour->g, pColour->b); | ||
489 | } | ||
490 | |||
491 | pColour->update(pWLParams->mCurParams); | ||
492 | pWLParams->propagateParameters(); | ||
493 | } | ||
494 | } | ||
495 | } | ||
496 | |||
497 | // ============================================================================ | ||
diff --git a/linden/indra/newview/rlvextensions.h b/linden/indra/newview/rlvextensions.h new file mode 100644 index 0000000..5720ba0 --- /dev/null +++ b/linden/indra/newview/rlvextensions.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef RLV_EXTENSIONS_H | ||
2 | #define RLV_EXTENSIONS_H | ||
3 | |||
4 | #include "rlvhelper.h" | ||
5 | #include "rlvevent.h" | ||
6 | |||
7 | // ============================================================================ | ||
8 | /* | ||
9 | * RlvExtGetSet | ||
10 | * ============ | ||
11 | * Implements @get_XXX:<option>=<channel> and @set_XXX:<option>=force | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | class RlvExtGetSet : public RlvObserver | ||
16 | { | ||
17 | public: | ||
18 | RlvExtGetSet(); | ||
19 | virtual ~RlvExtGetSet() {} | ||
20 | |||
21 | virtual BOOL onForceCommand(const RlvEvent& rlvEvent); | ||
22 | virtual BOOL onReplyCommand(const RlvEvent& rlvEvent); | ||
23 | protected: | ||
24 | std::string onGetDebug(std::string strSetting); | ||
25 | std::string onGetPseudoDebug(const std::string& strSetting); | ||
26 | void onSetDebug(std::string strSetting, const std::string& strValue); | ||
27 | void onSetPseudoDebug(const std::string& strSetting, const std::string& strValue); | ||
28 | |||
29 | std::string onGetEnv(std::string strSetting); | ||
30 | void onSetEnv(std::string strSetting, const std::string& strValue); | ||
31 | |||
32 | BOOL processCommand(const LLUUID& idObj, const RlvCommand& rlvCmd); | ||
33 | |||
34 | public: | ||
35 | enum { DBG_READ = 0x01, DBG_WRITE = 0x02, DBG_PERSIST = 0x04, DBG_PSEUDO = 0x08 }; | ||
36 | static std::map<std::string, S16> m_DbgAllowed; | ||
37 | static std::map<std::string, std::string> m_PseudoDebug; | ||
38 | |||
39 | static bool findDebugSetting(/*[in,out]*/ std::string& strSetting, /*[out]*/ S16& flags); | ||
40 | static S16 getDebugSettingFlags(const std::string& strSetting); | ||
41 | }; | ||
42 | |||
43 | // ============================================================================ | ||
44 | |||
45 | #endif // RLV_EXTENSIONS_H | ||
diff --git a/linden/indra/newview/rlvfloaterbehaviour.cpp b/linden/indra/newview/rlvfloaterbehaviour.cpp new file mode 100644 index 0000000..39fcf12 --- /dev/null +++ b/linden/indra/newview/rlvfloaterbehaviour.cpp | |||
@@ -0,0 +1,152 @@ | |||
1 | #include "llviewerprecompiledheaders.h" | ||
2 | |||
3 | #include "llagent.h" | ||
4 | #include "llcachename.h" | ||
5 | #include "llscrolllistctrl.h" | ||
6 | #include "lluictrlfactory.h" | ||
7 | #include "llviewerinventory.h" | ||
8 | #include "llviewerobjectlist.h" | ||
9 | #include "llvoavatar.h" | ||
10 | |||
11 | #include "rlvfloaterbehaviour.h" | ||
12 | |||
13 | // ============================================================================ | ||
14 | |||
15 | RlvFloaterBehaviour::RlvFloaterBehaviour(const LLSD& key) | ||
16 | : LLFloater(std::string("rlvBehaviours")) | ||
17 | { | ||
18 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_rlv_behaviour.xml"); | ||
19 | } | ||
20 | |||
21 | |||
22 | void RlvFloaterBehaviour::show(void*) | ||
23 | { | ||
24 | RlvFloaterBehaviour::showInstance(); | ||
25 | } | ||
26 | |||
27 | void RlvFloaterBehaviour::refreshAll() | ||
28 | { | ||
29 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
30 | LLCtrlListInterface* pList = childGetListInterface("behaviour_list"); | ||
31 | const rlv_object_map_t* pRlvObjects = gRlvHandler.getObjectMap(); | ||
32 | if ( (!pAvatar) || (!pList) || (!pRlvObjects) ) | ||
33 | return; | ||
34 | |||
35 | pList->operateOnAll(LLCtrlListInterface::OP_DELETE); | ||
36 | |||
37 | for (rlv_object_map_t::const_iterator itObj = pRlvObjects->begin(), endObj = pRlvObjects->end(); itObj != endObj; ++itObj) | ||
38 | { | ||
39 | std::string strName = itObj->first.asString(); | ||
40 | |||
41 | LLViewerInventoryItem* pItem = NULL; | ||
42 | LLViewerObject* pObj = gObjectList.findObject(itObj->first); | ||
43 | if (pObj) | ||
44 | { | ||
45 | LLViewerJointAttachment* pAttachPt = | ||
46 | get_if_there(pAvatar->mAttachmentPoints, gRlvHandler.getAttachPointIndex(pObj), (LLViewerJointAttachment*)NULL); | ||
47 | if (pAttachPt) | ||
48 | { | ||
49 | pItem = gInventory.getItem(pAttachPt->getItemID()); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | if (pItem) | ||
54 | strName = pItem->getName(); | ||
55 | |||
56 | const rlv_command_list_t* pCommands = itObj->second.getCommandList(); | ||
57 | for (rlv_command_list_t::const_iterator itCmd = pCommands->begin(), endCmd = pCommands->end(); itCmd != endCmd; ++itCmd) | ||
58 | { | ||
59 | std::string strBhvr = itCmd->asString(); LLUUID uuid(itCmd->getOption()); | ||
60 | if (uuid.notNull()) | ||
61 | { | ||
62 | std::string strLookup; | ||
63 | if ( (gCacheName->getFullName(uuid, strLookup)) || (gCacheName->getGroupName(uuid, strLookup)) ) | ||
64 | { | ||
65 | if (strLookup.find("???") == std::string::npos) | ||
66 | strBhvr.assign(itCmd->getBehaviour()).append(":").append(strLookup); | ||
67 | } | ||
68 | else if (m_PendingLookup.end() == std::find(m_PendingLookup.begin(), m_PendingLookup.end(), uuid)) | ||
69 | { | ||
70 | gCacheName->get(uuid, FALSE, onAvatarNameLookup, this); | ||
71 | m_PendingLookup.push_back(uuid); | ||
72 | } | ||
73 | } | ||
74 | |||
75 | LLSD element; | ||
76 | |||
77 | // Restriction column | ||
78 | element["columns"][0]["column"] = "behaviour"; | ||
79 | element["columns"][0]["value"] = strBhvr; | ||
80 | element["columns"][0]["font"] = "SANSSERIF"; | ||
81 | element["columns"][0]["font-style"] = "NORMAL"; | ||
82 | |||
83 | // Object Name column | ||
84 | element["columns"][1]["column"] = "name"; | ||
85 | element["columns"][1]["value"] = strName; | ||
86 | element["columns"][1]["font"] = "SANSSERIF"; | ||
87 | element["columns"][1]["font-style"] = "NORMAL"; | ||
88 | |||
89 | pList->addElement(element, ADD_BOTTOM); | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | |||
94 | // ============================================================================ | ||
95 | /* | ||
96 | * LLFloater overrides | ||
97 | */ | ||
98 | |||
99 | BOOL RlvFloaterBehaviour::canClose() | ||
100 | { | ||
101 | return !LLApp::isExiting(); | ||
102 | } | ||
103 | |||
104 | void RlvFloaterBehaviour::onOpen() | ||
105 | { | ||
106 | gRlvHandler.addBehaviourObserver(this); | ||
107 | |||
108 | refreshAll(); | ||
109 | } | ||
110 | |||
111 | void RlvFloaterBehaviour::onClose(bool fQuitting) | ||
112 | { | ||
113 | LLFloater::setVisible(FALSE); | ||
114 | |||
115 | gRlvHandler.removeBehaviourObserver(this); | ||
116 | |||
117 | for (std::list<LLUUID>::const_iterator itLookup = m_PendingLookup.begin(); itLookup != m_PendingLookup.end(); ++itLookup) | ||
118 | { | ||
119 | gCacheName->cancelCallback(*itLookup, onAvatarNameLookup, this); | ||
120 | } | ||
121 | m_PendingLookup.clear(); | ||
122 | } | ||
123 | |||
124 | BOOL RlvFloaterBehaviour::postBuild() | ||
125 | { | ||
126 | return TRUE; | ||
127 | } | ||
128 | |||
129 | // ============================================================================ | ||
130 | /* | ||
131 | * RlvBehaviourObserver overrides | ||
132 | */ | ||
133 | |||
134 | void RlvFloaterBehaviour::changed(const RlvCommand& /*rlvCmd*/, bool /*fInternal*/) | ||
135 | { | ||
136 | refreshAll(); | ||
137 | } | ||
138 | |||
139 | // ============================================================================ | ||
140 | |||
141 | void RlvFloaterBehaviour::onAvatarNameLookup(const LLUUID& uuid, const std::string& strFirst, const std::string& strLast, BOOL fGroup, void* pParam) | ||
142 | { | ||
143 | RlvFloaterBehaviour* pSelf = (RlvFloaterBehaviour*)pParam; | ||
144 | |||
145 | std::list<LLUUID>::iterator itLookup = std::find(pSelf->m_PendingLookup.begin(), pSelf->m_PendingLookup.end(), uuid); | ||
146 | if (itLookup != pSelf->m_PendingLookup.end()) | ||
147 | pSelf->m_PendingLookup.erase(itLookup); | ||
148 | |||
149 | pSelf->refreshAll(); | ||
150 | } | ||
151 | |||
152 | // ============================================================================ | ||
diff --git a/linden/indra/newview/rlvfloaterbehaviour.h b/linden/indra/newview/rlvfloaterbehaviour.h new file mode 100644 index 0000000..1410dd5 --- /dev/null +++ b/linden/indra/newview/rlvfloaterbehaviour.h | |||
@@ -0,0 +1,49 @@ | |||
1 | #ifndef RLV_FLOATER_BEHAVIOUR | ||
2 | #define RLV_FLOATER_BEHAVIOUR | ||
3 | |||
4 | #include "llfloater.h" | ||
5 | #include "rlvevent.h" | ||
6 | |||
7 | // ============================================================================ | ||
8 | |||
9 | class RlvFloaterBehaviour : | ||
10 | public LLFloater, | ||
11 | public LLFloaterSingleton<RlvFloaterBehaviour>, | ||
12 | public RlvBehaviourObserver | ||
13 | { | ||
14 | friend class LLUISingleton<RlvFloaterBehaviour, VisibilityPolicy<LLFloater> >; | ||
15 | public: | ||
16 | virtual ~RlvFloaterBehaviour() {} | ||
17 | |||
18 | /* | ||
19 | * LLFloater overrides | ||
20 | */ | ||
21 | public: | ||
22 | /*virtual*/ BOOL canClose(); | ||
23 | /*virtual*/ void onOpen(); | ||
24 | /*virtual*/ void onClose(bool app_quitting); | ||
25 | /*virtual*/ BOOL postBuild(); | ||
26 | |||
27 | /* | ||
28 | * RlvBehaviourObserver overrides | ||
29 | */ | ||
30 | public: | ||
31 | /*virtual*/ void changed(const RlvCommand& rlvCmd, bool fInternal); | ||
32 | |||
33 | /* | ||
34 | * Member functions | ||
35 | */ | ||
36 | public: | ||
37 | static void show(void*); | ||
38 | static void onAvatarNameLookup(const LLUUID& uuid, const std::string& strFirst, const std::string& strLast, BOOL fGroup, void* pParam); | ||
39 | protected: | ||
40 | void refreshAll(); | ||
41 | private: | ||
42 | RlvFloaterBehaviour(const LLSD& key = LLSD()); | ||
43 | |||
44 | std::list<LLUUID> m_PendingLookup; | ||
45 | }; | ||
46 | |||
47 | // ============================================================================ | ||
48 | |||
49 | #endif // RLV_FLOATER_BEHAVIOUR | ||
diff --git a/linden/indra/newview/rlvhandler.cpp b/linden/indra/newview/rlvhandler.cpp new file mode 100644 index 0000000..69e2e2f --- /dev/null +++ b/linden/indra/newview/rlvhandler.cpp | |||
@@ -0,0 +1,2592 @@ | |||
1 | #include "llviewerprecompiledheaders.h" | ||
2 | #include "llagent.h" | ||
3 | #include "lldrawpoolalpha.h" | ||
4 | #include "llfirstuse.h" | ||
5 | #include "llfloaterbeacons.h" | ||
6 | #include "llfloaterchat.h" | ||
7 | #include "llfloaterdaycycle.h" | ||
8 | #include "llfloaterenvsettings.h" | ||
9 | #include "llfloatergodtools.h" | ||
10 | #include "llfloaterland.h" | ||
11 | #include "llfloatermap.h" | ||
12 | #include "llfloaterregioninfo.h" | ||
13 | #include "llfloatertools.h" | ||
14 | #include "llfloaterwater.h" | ||
15 | #include "llfloaterwindlight.h" | ||
16 | #include "llfloaterworldmap.h" | ||
17 | #include "llgesturemgr.h" | ||
18 | #include "llinventoryview.h" | ||
19 | #include "llstartup.h" | ||
20 | #include "llviewermenu.h" | ||
21 | #include "llviewermessage.h" | ||
22 | #include "llviewerparcelmgr.h" | ||
23 | #include "llviewerregion.h" | ||
24 | #include "llviewerwindow.h" | ||
25 | #include "llvoavatar.h" | ||
26 | #include "llworld.h" | ||
27 | #include "pipeline.h" | ||
28 | |||
29 | #include "rlvhelper.h" | ||
30 | #include "rlvevent.h" | ||
31 | #include "rlvextensions.h" | ||
32 | #include "rlvhandler.h" | ||
33 | |||
34 | // Only defined in llinventorybridge.cpp | ||
35 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
36 | #include "llinventorybridge.h" | ||
37 | void confirm_replace_attachment_rez(S32 option, void* user_data); | ||
38 | #endif | ||
39 | // Only defined in llinventorymodel.cpp | ||
40 | extern const char* NEW_CATEGORY_NAME; | ||
41 | |||
42 | // ============================================================================ | ||
43 | // Static variable initialization | ||
44 | // | ||
45 | |||
46 | BOOL RlvHandler::m_fEnabled = FALSE; | ||
47 | BOOL RlvHandler::fNoSetEnv = FALSE; | ||
48 | BOOL RlvHandler::fLegacyNaming = FALSE; | ||
49 | BOOL RlvHandler::m_fFetchStarted = FALSE; | ||
50 | BOOL RlvHandler::m_fFetchComplete = FALSE; | ||
51 | RlvMultiStringSearch RlvHandler::m_AttachLookup; | ||
52 | |||
53 | const std::string RlvHandler::cstrSharedRoot = RLV_ROOT_FOLDER; | ||
54 | |||
55 | // Keep these consistent with regular RLV | ||
56 | const std::string RlvHandler::cstrBlockedRecvIM = "*** IM blocked by your viewer"; | ||
57 | const std::string RlvHandler::cstrBlockedSendIM = "*** IM blocked by sender's viewer"; | ||
58 | const std::string RlvHandler::cstrHidden = "(Hidden)"; | ||
59 | const std::string RlvHandler::cstrHiddenParcel = "(Hidden parcel)"; | ||
60 | const std::string RlvHandler::cstrHiddenRegion = "(Hidden region)"; | ||
61 | const std::string RlvHandler::cstrMsgRecvIM = | ||
62 | "The Resident you messaged is prevented from reading your instant messages at the moment, please try again later."; | ||
63 | const std::string RlvHandler::cstrMsgTpLure = | ||
64 | "The Resident you invited is prevented from accepting teleport offers. Please try again later."; | ||
65 | |||
66 | const std::string RlvHandler::cstrAnonyms[] = | ||
67 | { | ||
68 | "A resident", "This resident", "That resident", "An individual", "This individual", "That individual", "A person", | ||
69 | "This person", "That person", "A stranger", "This stranger", "That stranger", "A human being", "This human being", | ||
70 | "That human being", "An agent", "This agent", "That agent", "A soul", "This soul", "That soul", "Somebody", | ||
71 | "Some people", "Someone", "Mysterious one", "An unknown being", "Unidentified one", "An unknown person" | ||
72 | }; | ||
73 | |||
74 | rlv_handler_t gRlvHandler; | ||
75 | |||
76 | // ============================================================================ | ||
77 | // Helper functions | ||
78 | // | ||
79 | |||
80 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Added: RLVa-0.2.0e | ||
81 | inline bool rlvIsWearingItem(const LLInventoryItem* pItem) | ||
82 | { | ||
83 | return | ||
84 | ((LLAssetType::AT_OBJECT == pItem->getType()) && (gAgent.getAvatarObject()->isWearingAttachment(pItem->getUUID()))) || | ||
85 | ((LLAssetType::AT_GESTURE == pItem->getType()) && (gGestureManager.isGestureActive(pItem->getUUID()))) || | ||
86 | (gAgent.isWearingItem(pItem->getUUID())); | ||
87 | } | ||
88 | |||
89 | // ============================================================================ | ||
90 | // Command specific helper functions | ||
91 | // | ||
92 | |||
93 | // Checked: 2009-08-04 (RLVa-1.0.1d) | Added: RLVa-1.0.1d | ||
94 | static bool rlvParseNotifyOption(const std::string& strOption, S32& nChannel, std::string& strFilter) | ||
95 | { | ||
96 | boost_tokenizer tokens(strOption, boost::char_separator<char>(";", "", boost::keep_empty_tokens)); | ||
97 | boost_tokenizer::const_iterator itTok = tokens.begin(); | ||
98 | |||
99 | // Extract and sanity check the first token (required) which is the channel | ||
100 | if ( (itTok == tokens.end()) || (!LLStringUtil::convertToS32(*itTok, nChannel)) || (!rlvIsValidReplyChannel(nChannel)) ) | ||
101 | return false; | ||
102 | |||
103 | // Second token (optional) is the filter | ||
104 | strFilter.clear(); | ||
105 | if (++itTok != tokens.end()) | ||
106 | { | ||
107 | strFilter = *itTok; | ||
108 | ++itTok; | ||
109 | } | ||
110 | |||
111 | return (itTok == tokens.end()); | ||
112 | } | ||
113 | |||
114 | // ============================================================================ | ||
115 | // Constructor/destructor | ||
116 | // | ||
117 | |||
118 | // Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
119 | RlvHandler::RlvHandler() | ||
120 | : m_fCanCancelTp(false), m_idCurObject(LLUUID::null), m_pCurCommand(NULL), m_pGCTimer(NULL), m_pWLSnapshot(NULL), m_pBhvrNotify(NULL) | ||
121 | { | ||
122 | // Array auto-initialization to 0 is non-standard? (Compiler warning in VC-8.0) | ||
123 | memset(m_LayersAdd, 0, sizeof(S16) * WT_COUNT); | ||
124 | memset(m_LayersRem, 0, sizeof(S16) * WT_COUNT); | ||
125 | memset(m_Behaviours, 0, sizeof(S16) * RLV_BHVR_COUNT); | ||
126 | } | ||
127 | |||
128 | // Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
129 | RlvHandler::~RlvHandler() | ||
130 | { | ||
131 | //delete m_pGCTimer; // <- deletes itself | ||
132 | delete m_pWLSnapshot; // <- delete on NULL is harmless | ||
133 | delete m_pBhvrNotify; | ||
134 | } | ||
135 | |||
136 | // ============================================================================ | ||
137 | // Attachment related functions | ||
138 | // | ||
139 | |||
140 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0d | ||
141 | inline LLViewerJointAttachment* RlvHandler::getAttachPoint(const std::string& strText, bool fExact) const | ||
142 | { | ||
143 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
144 | return (pAvatar) ? get_if_there(pAvatar->mAttachmentPoints, getAttachPointIndex(strText, fExact), (LLViewerJointAttachment*)NULL) | ||
145 | : NULL; | ||
146 | } | ||
147 | |||
148 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Modified: RLVa-1.0.1b | ||
149 | LLViewerJointAttachment* RlvHandler::getAttachPoint(const LLInventoryCategory* pFolder, bool /*fStrict*/) const | ||
150 | { | ||
151 | if (!pFolder) | ||
152 | return NULL; | ||
153 | |||
154 | // RLVa-1.0.1 added support for legacy matching (See http://rlva.catznip.com/blog/2009/07/attachment-point-naming-convention/) | ||
155 | if (fLegacyNaming) | ||
156 | return getAttachPointLegacy(pFolder); | ||
157 | |||
158 | // Otherwise the only valid way to specify an attachment point in a folder name is: ^\.\(\s+attachpt\s+\) | ||
159 | std::string::size_type idxMatch; | ||
160 | std::string strAttachPt = rlvGetFirstParenthesisedText(pFolder->getName(), &idxMatch); | ||
161 | LLStringUtil::trim(strAttachPt); | ||
162 | |||
163 | return ( (1 == idxMatch) && (RLV_FOLDER_PREFIX_HIDDEN == pFolder->getName().at(0)) ) ? getAttachPoint(strAttachPt, true) : NULL; | ||
164 | } | ||
165 | |||
166 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Modified: RLVa-1.0.1b | ||
167 | LLViewerJointAttachment* RlvHandler::getAttachPoint(const LLInventoryItem* pItem, bool fStrict) const | ||
168 | { | ||
169 | // Sanity check - if it's not an object then it can't have an attachment point | ||
170 | if ( (!pItem) || (LLAssetType::AT_OBJECT != pItem->getType()) ) | ||
171 | return NULL; | ||
172 | |||
173 | // The attachment point should be placed at the end of the item's name, surrounded by parenthesis | ||
174 | // (if there is no such text then strAttachPt will be an empty string which is fine since it means we'll look at the item's parent) | ||
175 | std::string strAttachPt = rlvGetLastParenthesisedText(pItem->getName()); | ||
176 | LLStringUtil::trim(strAttachPt); | ||
177 | |||
178 | // If the item is modify : we look at the item's name first and only then at the containing folder | ||
179 | // If the item is no modify: we look at the containing folder's name first and only then at the item itself | ||
180 | LLViewerJointAttachment* pAttachPt; | ||
181 | if (pItem->getPermissions().allowModifyBy(gAgent.getID())) | ||
182 | { | ||
183 | pAttachPt = (!strAttachPt.empty()) ? getAttachPoint(strAttachPt, true) : NULL; | ||
184 | if (!pAttachPt) | ||
185 | pAttachPt = getAttachPoint(gInventory.getCategory(pItem->getParentUUID()), fStrict); | ||
186 | } | ||
187 | else | ||
188 | { | ||
189 | pAttachPt = getAttachPoint(gInventory.getCategory(pItem->getParentUUID()), fStrict); | ||
190 | if ( (!pAttachPt) && (!strAttachPt.empty()) ) | ||
191 | pAttachPt = getAttachPoint(strAttachPt, true); | ||
192 | } | ||
193 | return pAttachPt; | ||
194 | } | ||
195 | |||
196 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Added: RLVa-0.2.2a | ||
197 | S32 RlvHandler::getAttachPointIndex(const LLViewerJointAttachment* pAttachPt) const | ||
198 | { | ||
199 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
200 | if (pAvatar) | ||
201 | { | ||
202 | for (LLVOAvatar::attachment_map_t::const_iterator itAttach = pAvatar->mAttachmentPoints.begin(); | ||
203 | itAttach != pAvatar->mAttachmentPoints.end(); ++itAttach) | ||
204 | { | ||
205 | if (itAttach->second == pAttachPt) | ||
206 | return itAttach->first; | ||
207 | } | ||
208 | } | ||
209 | return 0; | ||
210 | } | ||
211 | |||
212 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Added: RLVa-1.0.1b | ||
213 | LLViewerJointAttachment* RlvHandler::getAttachPointLegacy(const LLInventoryCategory* pFolder) const | ||
214 | { | ||
215 | // Hopefully some day this can just be deprecated (see http://rlva.catznip.com/blog/2009/07/attachment-point-naming-convention/) | ||
216 | if ( (!pFolder) || (pFolder->getName().empty()) ) | ||
217 | return NULL; | ||
218 | |||
219 | // Check for a (...) block *somewhere* in the name | ||
220 | std::string::size_type idxMatch; | ||
221 | std::string strAttachPt = rlvGetFirstParenthesisedText(pFolder->getName(), &idxMatch); | ||
222 | if (!strAttachPt.empty()) | ||
223 | { | ||
224 | // Could be "(attachpt)", ".(attachpt)" or "Folder name (attachpt)" | ||
225 | if ( (0 != idxMatch) && ((1 != idxMatch) || (RLV_FOLDER_PREFIX_HIDDEN == pFolder->getName().at(0)) ) && // No '(' or '.(' start | ||
226 | (idxMatch + strAttachPt.length() + 1 != pFolder->getName().length()) ) // or there's extra text | ||
227 | { | ||
228 | // It's definitely not one of the first two so assume it's the last form (in which case we need the last paranthesised block) | ||
229 | strAttachPt = rlvGetLastParenthesisedText(pFolder->getName()); | ||
230 | } | ||
231 | } | ||
232 | else | ||
233 | { | ||
234 | // There's no paranthesised block, but it could still be "attachpt" or ".attachpt" (just strip away the '.' from the last one) | ||
235 | strAttachPt = pFolder->getName(); | ||
236 | if (RLV_FOLDER_PREFIX_HIDDEN == strAttachPt[0]) | ||
237 | strAttachPt.erase(0, 1); | ||
238 | } | ||
239 | return getAttachPoint(strAttachPt, true); | ||
240 | } | ||
241 | |||
242 | bool RlvHandler::hasLockedHUD() const | ||
243 | { | ||
244 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
245 | if (!pAvatar) | ||
246 | return false; | ||
247 | |||
248 | LLViewerJointAttachment* pAttachPt; | ||
249 | for (rlv_detach_map_t::const_iterator itAttachPt = m_Attachments.begin(); itAttachPt != m_Attachments.end(); ++itAttachPt) | ||
250 | { | ||
251 | pAttachPt = get_if_there(pAvatar->mAttachmentPoints, (S32)itAttachPt->first, (LLViewerJointAttachment*)NULL); | ||
252 | if ( (pAttachPt) && (pAttachPt->getIsHUDAttachment()) ) | ||
253 | return true; // At least one of our locked attachments is a HUD | ||
254 | } | ||
255 | return false; // None of our locked attachments is a HUD | ||
256 | } | ||
257 | |||
258 | bool RlvHandler::isDetachable(const LLInventoryItem* pItem) const | ||
259 | { | ||
260 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
261 | return ( (pItem) && (pAvatar) ) ? isDetachable(pAvatar->getWornAttachment(pItem->getUUID())) : true; | ||
262 | } | ||
263 | |||
264 | // Checked: 2009-08-11 (RLVa-1.0.1h) | Added: RLVa-1.0.1h | ||
265 | bool RlvHandler::isDetachableExcept(S32 idxAttachPt, LLViewerObject *pObj) const | ||
266 | { | ||
267 | // Loop over every object that marked the specific attachment point undetachable (but ignore pObj and any of its children) | ||
268 | for (rlv_detach_map_t::const_iterator itAttach = m_Attachments.lower_bound(idxAttachPt), | ||
269 | endAttach = m_Attachments.upper_bound(idxAttachPt); itAttach != endAttach; ++itAttach) | ||
270 | { | ||
271 | LLViewerObject* pTempObj = gObjectList.findObject(itAttach->second); | ||
272 | if ( (!pTempObj) || (pTempObj->getRootEdit()->getID() != pObj->getID()) ) | ||
273 | return false; | ||
274 | } | ||
275 | return true; | ||
276 | } | ||
277 | |||
278 | // Checked: 2009-09-06 (RLVa-1.0.2b) | Modified: RLVa-1.0.2b | ||
279 | bool RlvHandler::setDetachable(S32 idxAttachPt, const LLUUID& idRlvObj, bool fDetachable) | ||
280 | { | ||
281 | // Sanity check - make sure it's an object we know about | ||
282 | rlv_object_map_t::const_iterator itObj = m_Objects.find(idRlvObj); | ||
283 | if ( (itObj == m_Objects.end()) || (!idxAttachPt) ) | ||
284 | return false; // If (idxAttachPt) == 0 then: (pObj == NULL) || (pObj->isAttachment() == FALSE) | ||
285 | |||
286 | if (!fDetachable) | ||
287 | { | ||
288 | #ifdef RLV_EXPERIMENTAL_FIRSTUSE | ||
289 | //LLFirstUse::useRlvDetach(); | ||
290 | #endif // RLV_EXPERIMENTAL_FIRSTUSE | ||
291 | |||
292 | // NOTE: m_Attachments can contain duplicate <idxAttachPt, idRlvObj> pairs (ie @detach:spine=n,detach=n from an attachment on spine) | ||
293 | m_Attachments.insert(std::pair<S32, LLUUID>(idxAttachPt, itObj->second.m_UUID)); | ||
294 | return true; | ||
295 | } | ||
296 | else | ||
297 | { | ||
298 | for (rlv_detach_map_t::iterator itAttach = m_Attachments.lower_bound(idxAttachPt), | ||
299 | endAttach = m_Attachments.upper_bound(idxAttachPt); itAttach != endAttach; ++itAttach) | ||
300 | { | ||
301 | if (itObj->second.m_UUID == itAttach->second) | ||
302 | { | ||
303 | m_Attachments.erase(itAttach); | ||
304 | return true; | ||
305 | } | ||
306 | } | ||
307 | } | ||
308 | return false; // Fall-through for (fDetachable == TRUE) - if the object wasn't undetachable then we consider it a failure | ||
309 | } | ||
310 | |||
311 | |||
312 | |||
313 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
314 | // Checked: 2009-05-26 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
315 | bool RlvHandler::isStrippable(const LLUUID& idItem) const | ||
316 | { | ||
317 | // An item is exempt from @detach or @remoutfit if: | ||
318 | // - its name contains "nostrip" (anywhere in the name) | ||
319 | // - its parent folder contains "nostrip" (anywhere in the name) | ||
320 | if (idItem.notNull()) | ||
321 | { | ||
322 | LLViewerInventoryItem* pItem = gInventory.getItem(idItem); | ||
323 | if (pItem) | ||
324 | { | ||
325 | if (std::string::npos != pItem->getName().find(RLV_FOLDER_FLAG_NOSTRIP)) | ||
326 | return false; | ||
327 | |||
328 | LLViewerInventoryCategory* pFolder = gInventory.getCategory(pItem->getParentUUID()); | ||
329 | if ( (pFolder) && (std::string::npos != pFolder->getName().find(RLV_FOLDER_FLAG_NOSTRIP)) ) | ||
330 | return false; | ||
331 | } | ||
332 | } | ||
333 | return true; | ||
334 | } | ||
335 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
336 | |||
337 | // ============================================================================ | ||
338 | // Behaviour related functions | ||
339 | // | ||
340 | |||
341 | bool RlvHandler::hasBehaviourExcept(ERlvBehaviour eBehaviour, const std::string& strOption, const LLUUID& idObj) const | ||
342 | { | ||
343 | for (rlv_object_map_t::const_iterator itObj = m_Objects.begin(); itObj != m_Objects.end(); ++itObj) | ||
344 | if ( (idObj != itObj->second.m_UUID) && (itObj->second.hasBehaviour(eBehaviour, strOption, false)) ) | ||
345 | return true; | ||
346 | return false; | ||
347 | } | ||
348 | |||
349 | // Checked: 2009-10-04 (RLVa-1.0.4c) | Modified: RLVa-1.0.4c | ||
350 | bool RlvHandler::isException(ERlvBehaviour eBhvr, const RlvExceptionOption& varOption, ERlvExceptionCheck typeCheck) const | ||
351 | { | ||
352 | // We need to "strict check" exceptions only if: the restriction is actually in place *and* (isPermissive(eBhvr) == FALSE) | ||
353 | if (RLV_CHECK_DEFAULT == typeCheck) | ||
354 | typeCheck = ( (hasBehaviour(eBhvr)) && (!isPermissive(eBhvr)) ) ? RLV_CHECK_STRICT : RLV_CHECK_PERMISSIVE; | ||
355 | |||
356 | std::list<LLUUID> objList; | ||
357 | if (RLV_CHECK_STRICT == typeCheck) | ||
358 | { | ||
359 | // If we're "strict checking" then we need the UUID of every object that currently has 'eBhvr' restricted | ||
360 | for (rlv_object_map_t::const_iterator itObj = m_Objects.begin(); itObj != m_Objects.end(); ++itObj) | ||
361 | if (itObj->second.hasBehaviour(eBhvr, !hasBehaviour(RLV_BHVR_PERMISSIVE))) | ||
362 | objList.push_back(itObj->first); | ||
363 | } | ||
364 | |||
365 | for (rlv_exception_map_t::const_iterator itException = m_Exceptions.lower_bound(eBhvr), | ||
366 | endException = m_Exceptions.upper_bound(eBhvr); itException != endException; ++itException) | ||
367 | { | ||
368 | if (itException->second.varOption == varOption) | ||
369 | { | ||
370 | // For permissive checks we just return on the very first match | ||
371 | if (RLV_CHECK_PERMISSIVE == typeCheck) | ||
372 | return true; | ||
373 | |||
374 | // For strict checks we don't return until the list is empty (every object with 'eBhvr' restricted also contains the exception) | ||
375 | std::list<LLUUID>::iterator itList = std::find(objList.begin(), objList.end(), itException->second.idObject); | ||
376 | if (itList != objList.end()) | ||
377 | objList.erase(itList); | ||
378 | if (objList.empty()) | ||
379 | return true; | ||
380 | } | ||
381 | } | ||
382 | return false; | ||
383 | } | ||
384 | |||
385 | // ============================================================================ | ||
386 | // Command processing functions | ||
387 | // | ||
388 | |||
389 | // Checked: 2009-06-03 (RLVa-0.2.0h) | ||
390 | void RlvHandler::addBehaviourObserver(RlvBehaviourObserver* pBhvrObserver) | ||
391 | { | ||
392 | std::list<RlvBehaviourObserver*>::iterator itBhvrObserver = std::find(m_BhvrObservers.begin(), m_BhvrObservers.end(), pBhvrObserver); | ||
393 | if (itBhvrObserver == m_BhvrObservers.end()) | ||
394 | m_BhvrObservers.push_back(pBhvrObserver); | ||
395 | } | ||
396 | |||
397 | // Checked: 2009-06-03 (RLVa-0.2.0h) | ||
398 | void RlvHandler::removeBehaviourObserver(RlvBehaviourObserver* pBhvrObserver) | ||
399 | { | ||
400 | std::list<RlvBehaviourObserver*>::iterator itBhvrObserver = std::find(m_BhvrObservers.begin(), m_BhvrObservers.end(), pBhvrObserver); | ||
401 | if (itBhvrObserver != m_BhvrObservers.end()) | ||
402 | m_BhvrObservers.erase(itBhvrObserver); | ||
403 | } | ||
404 | |||
405 | // Checked: 2009-06-03 (RLVa-0.2.0h) | ||
406 | void RlvHandler::notifyBehaviourObservers(const RlvCommand& rlvCmd, bool fInternal) | ||
407 | { | ||
408 | for (std::list<RlvBehaviourObserver*>::const_iterator itBhvrObserver = m_BhvrObservers.begin(); | ||
409 | itBhvrObserver != m_BhvrObservers.end(); ++itBhvrObserver) | ||
410 | { | ||
411 | (*itBhvrObserver)->changed(rlvCmd, fInternal); | ||
412 | } | ||
413 | } | ||
414 | |||
415 | // Checked: | ||
416 | BOOL RlvHandler::processCommand(const LLUUID& uuid, const std::string& strCmd, bool fFromObj) | ||
417 | { | ||
418 | #ifdef RLV_DEBUG | ||
419 | RLV_INFOS << "[" << uuid << "]: " << strCmd << LL_ENDL; | ||
420 | #endif // RLV_DEBUG | ||
421 | |||
422 | RlvCommand rlvCmd(strCmd); | ||
423 | if (!rlvCmd.isValid()) | ||
424 | { | ||
425 | #ifdef RLV_DEBUG | ||
426 | RLV_INFOS << "\t-> invalid command: " << strCmd << LL_ENDL; | ||
427 | #endif // RLV_DEBUG | ||
428 | return FALSE; | ||
429 | } | ||
430 | m_pCurCommand = &rlvCmd; m_idCurObject = uuid; | ||
431 | |||
432 | BOOL fRet = FALSE; | ||
433 | switch (rlvCmd.getParamType()) | ||
434 | { | ||
435 | case RLV_TYPE_ADD: // Checked: 2009-06-03 (RLVa-0.2.0h) | Modified: RLVa-0.2.0h | ||
436 | { | ||
437 | if ( (m_Behaviours[rlvCmd.getBehaviourType()]) && | ||
438 | ( (RLV_BHVR_SETDEBUG == rlvCmd.getBehaviourType()) || (RLV_BHVR_SETENV == rlvCmd.getBehaviourType()) ) ) | ||
439 | { | ||
440 | // Some restrictions can only be held by one single object to avoid deadlocks | ||
441 | #ifdef RLV_DEBUG | ||
442 | RLV_INFOS << "\t- " << rlvCmd.getBehaviour() << " is already set by another object => discarding" << LL_ENDL; | ||
443 | #endif // RLV_DEBUG | ||
444 | break; | ||
445 | } | ||
446 | |||
447 | rlv_object_map_t::iterator itObj = m_Objects.find(uuid); | ||
448 | if (itObj != m_Objects.end()) | ||
449 | { | ||
450 | RlvObject& rlvObj = itObj->second; | ||
451 | fRet = rlvObj.addCommand(rlvCmd); | ||
452 | } | ||
453 | else | ||
454 | { | ||
455 | RlvObject rlvObj(uuid); | ||
456 | fRet = rlvObj.addCommand(rlvCmd); | ||
457 | m_Objects.insert(std::pair<LLUUID, RlvObject>(uuid, rlvObj)); | ||
458 | } | ||
459 | |||
460 | #ifdef RLV_DEBUG | ||
461 | RLV_INFOS << "\t- " << ( (fRet) ? "adding behaviour" : "skipping duplicate") << LL_ENDL; | ||
462 | #endif // RLV_DEBUG | ||
463 | |||
464 | if (fRet) { // If FALSE then this was a duplicate, there's no need to handle those | ||
465 | if (!m_pGCTimer) | ||
466 | m_pGCTimer = new RlvGCTimer(); | ||
467 | processAddCommand(uuid, rlvCmd); | ||
468 | notifyBehaviourObservers(rlvCmd, !fFromObj); | ||
469 | } | ||
470 | } | ||
471 | break; | ||
472 | case RLV_TYPE_REMOVE: // Checked: | ||
473 | { | ||
474 | rlv_object_map_t::iterator itObj = m_Objects.find(uuid); | ||
475 | if (itObj != m_Objects.end()) | ||
476 | fRet = itObj->second.removeCommand(rlvCmd); | ||
477 | |||
478 | #ifdef RLV_DEBUG | ||
479 | RLV_INFOS << "\t- " << ( (fRet) ? "removing behaviour" | ||
480 | : "skipping remove (unset behaviour or unknown object)") << LL_ENDL; | ||
481 | #endif // RLV_DEBUG | ||
482 | |||
483 | if (fRet) { // Don't handle non-sensical removes | ||
484 | processRemoveCommand(uuid, rlvCmd); | ||
485 | notifyBehaviourObservers(rlvCmd, !fFromObj); | ||
486 | |||
487 | if (0 == itObj->second.m_Commands.size()) | ||
488 | { | ||
489 | #ifdef RLV_DEBUG | ||
490 | RLV_INFOS << "\t- command list empty => removing " << uuid << LL_ENDL; | ||
491 | #endif // RLV_DEBUG | ||
492 | m_Objects.erase(itObj); | ||
493 | } | ||
494 | } | ||
495 | } | ||
496 | break; | ||
497 | case RLV_TYPE_CLEAR: | ||
498 | fRet = processClearCommand(uuid, rlvCmd); | ||
499 | notifyBehaviourObservers(rlvCmd, !fFromObj); | ||
500 | break; | ||
501 | case RLV_TYPE_FORCE: // Checked: | ||
502 | fRet = processForceCommand(uuid, rlvCmd); | ||
503 | break; | ||
504 | case RLV_TYPE_REPLY: // Checked: | ||
505 | fRet = processReplyCommand(uuid, rlvCmd); | ||
506 | break; | ||
507 | case RLV_TYPE_UNKNOWN: // Checked: | ||
508 | break; | ||
509 | #ifdef LL_GNUC | ||
510 | default: | ||
511 | break; | ||
512 | #endif // LL_GNUC | ||
513 | } | ||
514 | |||
515 | #ifdef RLV_DEBUG | ||
516 | RLV_INFOS << "\t--> command " << ((fRet) ? "succeeded" : "failed") << LL_ENDL; | ||
517 | #endif // RLV_DEBUG | ||
518 | |||
519 | m_pCurCommand = NULL; m_idCurObject.setNull(); | ||
520 | return fRet; | ||
521 | } | ||
522 | |||
523 | BOOL RlvHandler::processAddCommand(const LLUUID& uuid, const RlvCommand& rlvCmd) | ||
524 | { | ||
525 | // NOTE: - at this point the command has already been added to the corresponding RlvObject instance | ||
526 | // - the object's UUID may or may not exist in gObjectList (see handling of @detach=n) | ||
527 | |||
528 | ERlvBehaviour eBehaviour = rlvCmd.getBehaviourType(); | ||
529 | const std::string& strOption = rlvCmd.getOption(); | ||
530 | |||
531 | if ( (RLV_BHVR_UNKNOWN != eBehaviour) && (strOption.empty()) ) | ||
532 | { | ||
533 | if (rlvCmd.isStrict()) | ||
534 | addException(uuid, RLV_BHVR_PERMISSIVE, eBehaviour); | ||
535 | m_Behaviours[eBehaviour]++; | ||
536 | } | ||
537 | |||
538 | switch (eBehaviour) | ||
539 | { | ||
540 | case RLV_BHVR_DETACH: // @detach[:<option>]=n - Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
541 | { | ||
542 | LLViewerObject* pObj = NULL; S32 idxAttachPt = 0; | ||
543 | if (strOption.empty()) // @detach=n | ||
544 | { | ||
545 | // If the object rezzed before we received @detach=n from it then we can just do our thing here | ||
546 | // If the object hasn't rezzed yet then we need to wait until RlvHandler::onAttach() | ||
547 | // If @detach=n were possible for non-attachments another copy/paste would be needed in RlvHandler::onGC() | ||
548 | if ((pObj = gObjectList.findObject(uuid)) != NULL) | ||
549 | setDetachable(pObj, uuid, false); | ||
550 | } | ||
551 | else if ((idxAttachPt = getAttachPointIndex(strOption, true)) != 0) // @detach:<attachpt>=n | ||
552 | { | ||
553 | setDetachable(idxAttachPt, uuid, false); | ||
554 | |||
555 | // (See below) | ||
556 | LLViewerJointAttachment* pAttachPt = getAttachPoint(strOption, true); | ||
557 | if (pAttachPt) | ||
558 | pObj = pAttachPt->getObject(); | ||
559 | } | ||
560 | |||
561 | // When at least one HUD attachment is locked we want to make sure they're all visible (ie prevent hiding a blindfold HUD) | ||
562 | // However, since @detach:<attachpt>=n might lock a HUD attachment point that doesn't currently have an object we | ||
563 | // have to do this here *and* in RlvHandler::onAttach() | ||
564 | if ( (pObj) && (pObj->isHUDAttachment()) ) | ||
565 | LLPipeline::sShowHUDAttachments = TRUE; | ||
566 | } | ||
567 | break; | ||
568 | case RLV_BHVR_REDIRCHAT: // @redirchat:<option>=n - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
569 | case RLV_BHVR_REDIREMOTE: // @rediremote:<option>=n - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.2a | ||
570 | { | ||
571 | if (!strOption.empty()) | ||
572 | m_Behaviours[eBehaviour]++; // @redirchat and @rediremote don't have an optionless version so keep track of it here | ||
573 | else | ||
574 | m_Behaviours[eBehaviour]--; // @redirchat=n and @rediremote=n are undefined, don't keep track of them | ||
575 | } | ||
576 | break; | ||
577 | case RLV_BHVR_SHOWWORLDMAP: // @showworldmap=n - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
578 | { | ||
579 | // Simulate clicking the Map button [see LLToolBar::onClickMap()] | ||
580 | if (gFloaterWorldMap->getVisible()) | ||
581 | LLFloaterWorldMap::toggle(NULL); | ||
582 | } | ||
583 | break; | ||
584 | case RLV_BHVR_SHOWMINIMAP: // @showminimap=n - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
585 | { | ||
586 | // Simulate clicking the Minimap button [see LLToolBar::onClickRadar()] | ||
587 | if (LLFloaterMap::instanceVisible()) | ||
588 | LLFloaterMap::hideInstance(); | ||
589 | } | ||
590 | break; | ||
591 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
592 | case RLV_BHVR_TPLOC: // @tploc=n - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
593 | case RLV_BHVR_UNSIT: // @unsit=n - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
594 | { | ||
595 | if (strOption.empty()) | ||
596 | RlvSettings::updateLoginLastLocation(); | ||
597 | } | ||
598 | break; | ||
599 | #endif // RLV_EXTENSION_STARTLOCATION | ||
600 | case RLV_BHVR_EDIT: // @edit=n - Checked: 2009-07-04 (RLVa-1.0.0b) | ||
601 | { | ||
602 | // Turn off "View / Highlight Transparent" | ||
603 | LLDrawPoolAlpha::sShowDebugAlpha = FALSE; | ||
604 | |||
605 | // Close the Beacons floater if it's open | ||
606 | if (LLFloaterBeacons::instanceVisible()) | ||
607 | LLFloaterBeacons::toggleInstance(); | ||
608 | |||
609 | // Get rid of the build floater if it's open [copy/paste from toggle_build_mode()] | ||
610 | if (gFloaterTools->getVisible()) | ||
611 | { | ||
612 | gAgent.resetView(FALSE); | ||
613 | gFloaterTools->close(); | ||
614 | gViewerWindow->showCursor(); | ||
615 | } | ||
616 | } | ||
617 | break; | ||
618 | case RLV_BHVR_ADDOUTFIT: // @addoutfit[:<layer>]=n - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
619 | case RLV_BHVR_REMOUTFIT: // @remoutfit[:<layer>]=n - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
620 | { | ||
621 | S16* pLayers = (eBehaviour == RLV_BHVR_ADDOUTFIT) ? m_LayersAdd : m_LayersRem; | ||
622 | |||
623 | if (strOption.empty()) | ||
624 | { | ||
625 | for (int idx = 0; idx < WT_COUNT; idx++) | ||
626 | pLayers[idx]++; | ||
627 | } | ||
628 | else | ||
629 | { | ||
630 | EWearableType type = LLWearable::typeNameToType(strOption); | ||
631 | if (WT_INVALID != type) | ||
632 | { | ||
633 | pLayers[type]++; | ||
634 | m_Behaviours[eBehaviour]++; | ||
635 | } | ||
636 | } | ||
637 | } | ||
638 | break; | ||
639 | case RLV_BHVR_SHOWINV: // @showinv=n - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-1.0.0g | ||
640 | { | ||
641 | // Close all open inventory windows | ||
642 | LLInventoryView::closeAll(); | ||
643 | } | ||
644 | break; | ||
645 | case RLV_BHVR_SHOWLOC: // @showloc=n - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
646 | { | ||
647 | // If we're the first @showloc=n restriction refresh all object text so we can filter it if necessary | ||
648 | if (1 == m_Behaviours[RLV_BHVR_SHOWLOC]) | ||
649 | LLHUDText::refreshAllObjectText(); | ||
650 | |||
651 | // Close the "About Land" floater if it's currently visible | ||
652 | if (LLFloaterLand::instanceVisible()) | ||
653 | LLFloaterLand::hideInstance(); | ||
654 | |||
655 | // Close the "Estate Tools" floater is it's currently visible | ||
656 | if (LLFloaterRegionInfo::instanceVisible()) | ||
657 | LLFloaterRegionInfo::hideInstance(); | ||
658 | |||
659 | // NOTE: we should close the "God Tools" floater as well, but since calling LLFloaterGodTools::instance() always | ||
660 | // creates a new instance of the floater and since it's very unlikely to be open it's just better not to | ||
661 | } | ||
662 | break; | ||
663 | case RLV_BHVR_SHOWNAMES: // @shownames=n - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
664 | { | ||
665 | // If we're the first @shownames=n restriction refresh all object text so we can filter it if necessary | ||
666 | if (1 == m_Behaviours[RLV_BHVR_SHOWNAMES]) | ||
667 | LLHUDText::refreshAllObjectText(); | ||
668 | |||
669 | // Close the "Active Speakers" panel if it's currently visible | ||
670 | LLFloaterChat::getInstance()->childSetVisible("active_speakers_panel", false); | ||
671 | } | ||
672 | break; | ||
673 | case RLV_BHVR_FARTOUCH: | ||
674 | { | ||
675 | #ifdef RLV_EXPERIMENTAL_FIRSTUSE | ||
676 | //LLFirstUse::useRlvFartouch(); | ||
677 | #endif // RLV_EXPERIMENTAL_FIRSTUSE | ||
678 | } | ||
679 | break; | ||
680 | case RLV_BHVR_FLY: // @fly=n - Checked: 2009-07-05 (RLVa-1.0.0c) | ||
681 | { | ||
682 | // If currently flying, simulate clicking the Fly button [see LLToolBar::onClickFly()] | ||
683 | if (gAgent.getFlying()) | ||
684 | gAgent.toggleFlying(); | ||
685 | } | ||
686 | break; | ||
687 | case RLV_BHVR_SETENV: // @setenv=n - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a | ||
688 | { | ||
689 | if (!fNoSetEnv) | ||
690 | { | ||
691 | // Only close the floaters if their instance exists and they're actually visible | ||
692 | if ( (LLFloaterEnvSettings::isOpen()) && (LLFloaterEnvSettings::instance()->getVisible()) ) | ||
693 | LLFloaterEnvSettings::instance()->close(); | ||
694 | if ( (LLFloaterWindLight::isOpen()) && (LLFloaterWindLight::instance()->getVisible()) ) | ||
695 | LLFloaterWindLight::instance()->close(); | ||
696 | if ( (LLFloaterWater::isOpen()) && (LLFloaterWater::instance()->getVisible()) ) | ||
697 | LLFloaterWater::instance()->close(); | ||
698 | if ( (LLFloaterDayCycle::isOpen()) && (LLFloaterDayCycle::instance()->getVisible()) ) | ||
699 | LLFloaterDayCycle::instance()->close(); | ||
700 | |||
701 | // Save the current WindLight params so we can restore them on @setenv=y | ||
702 | if (m_pWLSnapshot) | ||
703 | { | ||
704 | RLV_ERRS << "m_pWLSnapshot != NULL" << LL_ENDL; // Safety net in case we set @setenv=n for more than 1 object | ||
705 | delete m_pWLSnapshot; | ||
706 | } | ||
707 | m_pWLSnapshot = RlvWLSnapshot::takeSnapshot(); | ||
708 | } | ||
709 | } | ||
710 | break; | ||
711 | case RLV_BHVR_SHOWHOVERTEXTALL: // @showhovertextal=n - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
712 | case RLV_BHVR_SHOWHOVERTEXTWORLD: // @showhovertextworld=n - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
713 | case RLV_BHVR_SHOWHOVERTEXTHUD: // @showhovertexthud=n - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
714 | { | ||
715 | // Refresh all hover text (LLHUDText::setStringUTF8() will decide what needs clearing and what doesn't) | ||
716 | LLHUDText::refreshAllObjectText(); | ||
717 | } | ||
718 | break; | ||
719 | case RLV_BHVR_SHOWHOVERTEXT: // @showhovertext:<uuid>=n - Checked: 2009-07-09 (RLVa-0.2.2a) | Modified: RLVa-1.0.0f | ||
720 | { | ||
721 | LLUUID idException(strOption); | ||
722 | if (idException.notNull()) // If there's an option it should be a valid UUID | ||
723 | { | ||
724 | addException(uuid, eBehaviour, idException); | ||
725 | |||
726 | // Clear the object's hover text | ||
727 | LLViewerObject* pObj = gObjectList.findObject(idException); | ||
728 | if ( (pObj) && (pObj->mText.notNull()) && (!pObj->mText->getObjectText().empty()) ) | ||
729 | pObj->mText->setStringUTF8(""); | ||
730 | } | ||
731 | } | ||
732 | break; | ||
733 | case RLV_BHVR_NOTIFY: // @notify:<option>=add - Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
734 | { | ||
735 | S32 nChannel; std::string strFilter; | ||
736 | if ( (!strOption.empty()) && (rlvParseNotifyOption(strOption, nChannel, strFilter)) ) | ||
737 | { | ||
738 | if (!m_pBhvrNotify) | ||
739 | addBehaviourObserver(m_pBhvrNotify = new RlvBehaviourNotifyObserver()); | ||
740 | m_pBhvrNotify->addNotify(uuid, nChannel, strFilter); | ||
741 | } | ||
742 | } | ||
743 | break; | ||
744 | case RLV_BHVR_SENDCHANNEL: // @sendchannel:<uuid>=add - Checked: 2009-10-05 (RLVa-1.0.4a) | Modified: RLVa-1.0.4a | ||
745 | { | ||
746 | S32 nChannel; // If there's an option it should be a valid (=positive and non-zero) chat channel | ||
747 | if ( (!strOption.empty()) && (LLStringUtil::convertToS32(strOption, nChannel)) && (nChannel > 0) ) | ||
748 | addException(uuid, eBehaviour, nChannel); | ||
749 | } | ||
750 | break; | ||
751 | case RLV_BHVR_RECVCHAT: // @recvchat:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
752 | case RLV_BHVR_RECVEMOTE: // @recvemote:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
753 | case RLV_BHVR_RECVIM: // @recvim:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
754 | case RLV_BHVR_SENDIM: // @sendim:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
755 | case RLV_BHVR_TPLURE: // @tplure:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
756 | case RLV_BHVR_ACCEPTTP: // @accepttp:<uuid>=add - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
757 | { | ||
758 | LLUUID idException(strOption); | ||
759 | if (idException.notNull()) // If there's an option it should be a valid UUID | ||
760 | addException(uuid, eBehaviour, LLUUID(strOption)); | ||
761 | } | ||
762 | break; | ||
763 | case RLV_BHVR_UNKNOWN: | ||
764 | { | ||
765 | // Give our observers a chance to handle any command we don't | ||
766 | RlvEvent rlvEvent(uuid, rlvCmd); | ||
767 | m_Emitter.update(&RlvObserver::onAddCommand, rlvEvent); | ||
768 | } | ||
769 | break; | ||
770 | default: | ||
771 | break; | ||
772 | } | ||
773 | return TRUE; // Add command success/failure is decided by RlvObject::addCommand() | ||
774 | } | ||
775 | |||
776 | // Checked: 2009-08-05 (RLVa-1.0.1e) | Added: RLVa-1.0.1e | ||
777 | void RlvHandler::processRetainedCommands() | ||
778 | { | ||
779 | for (rlv_retained_list_t::const_iterator itCmd = m_Retained.begin(); itCmd != m_Retained.end(); ++itCmd) | ||
780 | { | ||
781 | const RlvRetainedCommand& cmd = *itCmd; | ||
782 | processCommand(cmd.idObject, cmd.strCmd, true); | ||
783 | } | ||
784 | m_Retained.clear(); | ||
785 | } | ||
786 | |||
787 | BOOL RlvHandler::processRemoveCommand(const LLUUID& uuid, const RlvCommand& rlvCmd) | ||
788 | { | ||
789 | // NOTE: - the RlvObject instance still exists at this point, but the viewer might already have removed it from its object list | ||
790 | ERlvBehaviour eBehaviour = rlvCmd.getBehaviourType(); | ||
791 | const std::string& strOption = rlvCmd.getOption(); | ||
792 | |||
793 | if ( (RLV_BHVR_UNKNOWN != eBehaviour) && (strOption.empty()) ) | ||
794 | { | ||
795 | if (rlvCmd.isStrict()) | ||
796 | removeException(uuid, RLV_BHVR_PERMISSIVE, eBehaviour); | ||
797 | m_Behaviours[eBehaviour]--; | ||
798 | } | ||
799 | |||
800 | switch (eBehaviour) | ||
801 | { | ||
802 | case RLV_BHVR_DETACH: // @detach[:<option>]=y - Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
803 | { | ||
804 | S32 idxAttachPt = 0; | ||
805 | if (strOption.empty()) // @detach=y | ||
806 | { | ||
807 | // The object may or may not (if it got detached) still exist | ||
808 | rlv_object_map_t::const_iterator itObj = m_Objects.find(uuid); | ||
809 | if (itObj != m_Objects.end()) | ||
810 | idxAttachPt = itObj->second.m_idxAttachPt; | ||
811 | if (idxAttachPt) | ||
812 | setDetachable(idxAttachPt, uuid, true); | ||
813 | } | ||
814 | else if ((idxAttachPt = getAttachPointIndex(strOption, true))) // @detach:<attachpt>=y | ||
815 | { | ||
816 | setDetachable(idxAttachPt, uuid, true); | ||
817 | } | ||
818 | } | ||
819 | break; | ||
820 | case RLV_BHVR_REDIRCHAT: // @redirchat:<option>=y - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
821 | case RLV_BHVR_REDIREMOTE: // @rediremote:<option>=y - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.2a | ||
822 | { | ||
823 | if (!strOption.empty()) | ||
824 | m_Behaviours[eBehaviour]--; // @redirchat and @rediremote don't have an optionless version so keep track of it here | ||
825 | else | ||
826 | m_Behaviours[eBehaviour]++; // @redirchat=n and @rediremote=n are undefined, don't keep track of them | ||
827 | } | ||
828 | break; | ||
829 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
830 | case RLV_BHVR_TPLOC: // @tploc=y - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
831 | case RLV_BHVR_UNSIT: // @unsit=y - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.1d | ||
832 | { | ||
833 | if (strOption.empty()) | ||
834 | RlvSettings::updateLoginLastLocation(); | ||
835 | } | ||
836 | break; | ||
837 | #endif // RLV_EXTENSION_STARTLOCATION | ||
838 | case RLV_BHVR_ADDOUTFIT: // @addoutfit[:<layer>]=y - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
839 | case RLV_BHVR_REMOUTFIT: // @remoutfit[:<layer>]=y - Checked: 2009-07-07 (RLVa-1.0.0d) | ||
840 | { | ||
841 | S16* pLayers = (eBehaviour == RLV_BHVR_ADDOUTFIT) ? m_LayersAdd : m_LayersRem; | ||
842 | |||
843 | if (strOption.empty()) | ||
844 | { | ||
845 | for (int idx = 0; idx < WT_COUNT; idx++) | ||
846 | pLayers[idx]--; | ||
847 | } | ||
848 | else | ||
849 | { | ||
850 | EWearableType type = LLWearable::typeNameToType(strOption); | ||
851 | if (WT_INVALID != type) | ||
852 | { | ||
853 | pLayers[type]--; | ||
854 | m_Behaviours[eBehaviour]--; | ||
855 | } | ||
856 | } | ||
857 | } | ||
858 | break; | ||
859 | case RLV_BHVR_SETENV: // @setenv=y - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-0.2.0h | ||
860 | { | ||
861 | if (!fNoSetEnv) | ||
862 | { | ||
863 | // Restore WindLight parameters to what they were before @setenv=n was issued | ||
864 | RlvWLSnapshot::restoreSnapshot(m_pWLSnapshot); | ||
865 | delete m_pWLSnapshot; | ||
866 | m_pWLSnapshot = NULL; | ||
867 | } | ||
868 | } | ||
869 | break; | ||
870 | case RLV_BHVR_SHOWLOC: // @showloc=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
871 | case RLV_BHVR_SHOWNAMES: // @shownames=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
872 | case RLV_BHVR_SHOWHOVERTEXTALL: // @showhovertextal=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
873 | case RLV_BHVR_SHOWHOVERTEXTWORLD: // @showhovertextworld=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
874 | case RLV_BHVR_SHOWHOVERTEXTHUD: // @showhovertexthud=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Added: RLVa-1.0.0f | ||
875 | { | ||
876 | // If this was the last of any of the five restrictions we should refresh all hover text in case anything needs restoring | ||
877 | if (!m_Behaviours[eBehaviour]) | ||
878 | LLHUDText::refreshAllObjectText(); | ||
879 | } | ||
880 | break; | ||
881 | case RLV_BHVR_SHOWHOVERTEXT: // @showhovertext:<uuid>=y - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
882 | { | ||
883 | LLUUID idException(strOption); | ||
884 | if (idException.notNull()) // If there's an option it should be a valid UUID | ||
885 | { | ||
886 | removeException(uuid, eBehaviour, idException); | ||
887 | |||
888 | // Restore the object's hover text | ||
889 | LLViewerObject* pObj = gObjectList.findObject(idException); | ||
890 | if ( (pObj) && (pObj->mText.notNull()) && (!pObj->mText->getObjectText().empty()) ) | ||
891 | pObj->mText->setStringUTF8(pObj->mText->getObjectText()); | ||
892 | } | ||
893 | } | ||
894 | break; | ||
895 | case RLV_BHVR_NOTIFY: // @notify:<option>=rem - Checked: 2009-08-04 (RLVa-1.0.1d) | Modified: RLVa-1.0.1d | ||
896 | { | ||
897 | S32 nChannel; std::string strFilter; | ||
898 | if ( (m_pBhvrNotify) && (!strOption.empty()) && (rlvParseNotifyOption(strOption, nChannel, strFilter)) ) | ||
899 | { | ||
900 | m_pBhvrNotify->removeNotify(uuid, nChannel, strFilter); | ||
901 | |||
902 | if (!m_pBhvrNotify->hasNotify()) | ||
903 | { | ||
904 | removeBehaviourObserver(m_pBhvrNotify); | ||
905 | delete m_pBhvrNotify; | ||
906 | m_pBhvrNotify = NULL; | ||
907 | } | ||
908 | } | ||
909 | } | ||
910 | break; | ||
911 | case RLV_BHVR_SENDCHANNEL: // @sendchannel:<uuid>=rem - Checked: 2009-10-05 (RLVa-1.0.4a) | Modified: RLVa-1.0.4a | ||
912 | { | ||
913 | S32 nChannel; // If there's an option it should be a valid (=positive and non-zero) chat channel | ||
914 | if ( (!strOption.empty()) && (LLStringUtil::convertToS32(strOption, nChannel)) && (nChannel > 0) ) | ||
915 | removeException(uuid, eBehaviour, nChannel); | ||
916 | } | ||
917 | break; | ||
918 | case RLV_BHVR_RECVCHAT: // @recvchat:<uuid>=rem - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
919 | case RLV_BHVR_RECVEMOTE: // @recvemote:<uui>=red - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
920 | case RLV_BHVR_RECVIM: // @recvim:<uuid>=rem - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
921 | case RLV_BHVR_SENDIM: // @sendim:<uuid>=rem - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
922 | case RLV_BHVR_TPLURE: // @recvim:<uuid>=rem - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
923 | case RLV_BHVR_ACCEPTTP: // @accepttp:<uuid>=rem - Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
924 | { | ||
925 | LLUUID idException(strOption); | ||
926 | if (idException.notNull()) // If there's an option it should be a valid UUID | ||
927 | removeException(uuid, eBehaviour, LLUUID(strOption)); | ||
928 | } | ||
929 | break; | ||
930 | case RLV_BHVR_UNKNOWN: | ||
931 | { | ||
932 | // Give our observers a chance to handle any command we don't | ||
933 | RlvEvent rlvEvent(uuid, rlvCmd); | ||
934 | m_Emitter.update(&RlvObserver::onRemoveCommand, rlvEvent); | ||
935 | } | ||
936 | break; | ||
937 | default: | ||
938 | break; | ||
939 | } | ||
940 | return TRUE; // Remove commands don't fail, doesn't matter what we return here | ||
941 | } | ||
942 | |||
943 | BOOL RlvHandler::processClearCommand(const LLUUID& idObj, const RlvCommand& rlvCmd) | ||
944 | { | ||
945 | const std::string& strFilter = rlvCmd.getParam(); std::string strCmdRem; | ||
946 | |||
947 | rlv_object_map_t::const_iterator itObj = m_Objects.find(idObj); | ||
948 | if (itObj != m_Objects.end()) // No sense in clearing if we don't have any commands for this object | ||
949 | { | ||
950 | const RlvObject& rlvObj = itObj->second; bool fContinue = true; | ||
951 | for (rlv_command_list_t::const_iterator itCmd = rlvObj.m_Commands.begin(), itCurCmd; | ||
952 | ((fContinue) && (itCmd != rlvObj.m_Commands.end())); ) | ||
953 | { | ||
954 | itCurCmd = itCmd++; // Point itCmd ahead so it won't get invalidated if/when we erase a command | ||
955 | |||
956 | const RlvCommand& rlvCmdRem = *itCurCmd; strCmdRem = rlvCmdRem.asString(); | ||
957 | if ( (strFilter.empty()) || (std::string::npos != strCmdRem.find(strFilter)) ) | ||
958 | { | ||
959 | fContinue = (rlvObj.m_Commands.size() > 1); // rlvObj will become invalid once we remove the last command | ||
960 | processCommand(idObj, strCmdRem.append("=y"), false); | ||
961 | } | ||
962 | } | ||
963 | } | ||
964 | |||
965 | // Let our observers know about clear commands | ||
966 | RlvEvent rlvEvent(idObj, rlvCmd); | ||
967 | m_Emitter.update(&RlvObserver::onClearCommand, rlvEvent); | ||
968 | |||
969 | return TRUE; // Don't fail clear commands even if the object didn't exist since it confuses people | ||
970 | } | ||
971 | |||
972 | BOOL RlvHandler::processForceCommand(const LLUUID& idObj, const RlvCommand& rlvCmd) const | ||
973 | { | ||
974 | const std::string& strOption = rlvCmd.getOption(); | ||
975 | BOOL fHandled = TRUE; | ||
976 | |||
977 | switch (rlvCmd.getBehaviourType()) | ||
978 | { | ||
979 | case RLV_BHVR_DETACH: // @detach[:<option>]=force - Checked: | ||
980 | onForceDetach(idObj, strOption); | ||
981 | break; | ||
982 | case RLV_BHVR_REMOUTFIT: // @remoutfit:<option>=force - Checked: | ||
983 | onForceRemOutfit(idObj, strOption); | ||
984 | break; | ||
985 | case RLV_BHVR_UNSIT: // @unsit=force - Checked: 2009-06-02 (RLVa-0.2.0g) | ||
986 | { | ||
987 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
988 | if ( (pAvatar) && (pAvatar->mIsSitting) && (!hasBehaviourExcept(RLV_BHVR_UNSIT, idObj)) ) | ||
989 | { | ||
990 | // See behaviour notes on why we have to force an agent update here | ||
991 | gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); | ||
992 | send_agent_update(TRUE, TRUE); | ||
993 | } | ||
994 | } | ||
995 | break; | ||
996 | case RLV_BHVR_TPTO: // @tpto:<option>=force - Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-1.0.0h | ||
997 | { | ||
998 | fHandled = FALSE; | ||
999 | if ( (!strOption.empty()) && (-1 == strOption.find_first_not_of("0123456789/.")) ) | ||
1000 | { | ||
1001 | LLVector3d posGlobal; | ||
1002 | |||
1003 | boost_tokenizer tokens(strOption, boost::char_separator<char>("/", "", boost::keep_empty_tokens)); int idx = 0; | ||
1004 | for (boost_tokenizer::const_iterator itToken = tokens.begin(); itToken != tokens.end(); ++itToken) | ||
1005 | { | ||
1006 | if (idx < 3) | ||
1007 | LLStringUtil::convertToF64(*itToken, posGlobal[idx++]); | ||
1008 | } | ||
1009 | |||
1010 | if (idx == 3) | ||
1011 | { | ||
1012 | gAgent.teleportViaLocation(posGlobal); | ||
1013 | fHandled = TRUE; | ||
1014 | } | ||
1015 | } | ||
1016 | } | ||
1017 | break; | ||
1018 | case RLV_BHVR_SIT: // @sit:<option>=force - Checked: 2009-06-02 (RLVa-0.2.0g) | ||
1019 | fHandled = onForceSit(idObj, rlvCmd.getOption()); | ||
1020 | break; | ||
1021 | case RLV_BHVR_ADDOUTFIT: // @addoutfit:<option>=force <- synonym of @attach:<option>=force | ||
1022 | case RLV_BHVR_ATTACH: // @attach:<option>=force - Checked: | ||
1023 | onForceWear(rlvCmd.getOption(), true, false); // Force attach single folder | ||
1024 | break; | ||
1025 | case RLV_BHVR_ATTACHALL: // @attachall:<option>=force - Checked: | ||
1026 | onForceWear(rlvCmd.getOption(), true, true); // Force attach nested folders | ||
1027 | break; | ||
1028 | case RLV_BHVR_DETACHALL: // @detachall:<option>=force - Checked: | ||
1029 | onForceWear(rlvCmd.getOption(), false, true); // Force detach nested folders | ||
1030 | break; | ||
1031 | case RLV_BHVR_ATTACHTHIS: | ||
1032 | case RLV_BHVR_ATTACHALLTHIS: | ||
1033 | case RLV_BHVR_DETACHTHIS: | ||
1034 | case RLV_BHVR_DETACHALLTHIS: | ||
1035 | { | ||
1036 | ERlvBehaviour eBehaviour = rlvCmd.getBehaviourType(); | ||
1037 | std::string strReply; | ||
1038 | if (onGetPath(idObj, strOption, strReply)) | ||
1039 | { | ||
1040 | LLStringUtil::toLower(strReply); | ||
1041 | onForceWear(strReply, | ||
1042 | (RLV_BHVR_ATTACHTHIS == eBehaviour) || (RLV_BHVR_ATTACHALLTHIS == eBehaviour), | ||
1043 | (RLV_BHVR_ATTACHALLTHIS == eBehaviour) || (RLV_BHVR_DETACHALLTHIS == eBehaviour)); | ||
1044 | } | ||
1045 | } | ||
1046 | break; | ||
1047 | case RLV_BHVR_DETACHME: // @detachme=force - Checked: 2009-06-07 (RLVa-0.2.1c) | ||
1048 | { | ||
1049 | // NOTE: @detachme=force could be seen as a @detach:<attachpt>=force but RLV implements it as a "detach by UUID" | ||
1050 | LLViewerObject* pObj; LLVOAvatar* pAvatar; LLViewerJointAttachment* pAttachPt; | ||
1051 | if ( ((pObj = gObjectList.findObject(idObj)) != NULL) && (pObj->isAttachment()) && | ||
1052 | ((pAvatar = gAgent.getAvatarObject()) != NULL) && | ||
1053 | ((pAttachPt = pAvatar->getTargetAttachmentPoint(pObj->getRootEdit())) != NULL) ) | ||
1054 | { | ||
1055 | handle_detach_from_avatar(pAttachPt); | ||
1056 | } | ||
1057 | } | ||
1058 | break; | ||
1059 | case RLV_BHVR_UNKNOWN: | ||
1060 | { | ||
1061 | // Give our observers a chance to handle any command we don't | ||
1062 | RlvEvent rlvEvent(idObj, rlvCmd); | ||
1063 | fHandled = m_Emitter.update(&RlvObserver::onForceCommand, rlvEvent); | ||
1064 | } | ||
1065 | break; | ||
1066 | default: | ||
1067 | break; | ||
1068 | } | ||
1069 | return fHandled; // If we handled it then it'll still be TRUE; if an observer doesn't handle it'll be FALSE | ||
1070 | } | ||
1071 | |||
1072 | // Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1073 | BOOL RlvHandler::processReplyCommand(const LLUUID& uuid, const RlvCommand& rlvCmd) const | ||
1074 | { | ||
1075 | const std::string& strOption = rlvCmd.getOption(); | ||
1076 | const std::string& strChannel = rlvCmd.getParam(); | ||
1077 | std::string strReply; | ||
1078 | |||
1079 | BOOL fHandled = TRUE; | ||
1080 | switch (rlvCmd.getBehaviourType()) | ||
1081 | { | ||
1082 | case RLV_BHVR_VERSION: // @version=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1083 | strReply = getVersionString(); | ||
1084 | break; | ||
1085 | case RLV_BHVR_VERSIONNUM: // @versionnum=<channel> - Checked: 2009-10-04 (RLVa-1.0.4b) | Added: RLVa-1.0.4b | ||
1086 | strReply = getVersionNumString(); | ||
1087 | break; | ||
1088 | case RLV_BHVR_GETOUTFIT: // @getoufit[:<layer>]=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0d | ||
1089 | { | ||
1090 | // (Quirk: RLV 1.16.1 will execute @getoutfit=<channel> if <layer> is invalid, so we need to as well) | ||
1091 | EWearableType layerType = LLWearable::typeNameToType(strOption); | ||
1092 | |||
1093 | const EWearableType layerTypes[] = | ||
1094 | { | ||
1095 | WT_GLOVES, WT_JACKET, WT_PANTS, WT_SHIRT, WT_SHOES, WT_SKIRT, WT_SOCKS, | ||
1096 | WT_UNDERPANTS, WT_UNDERSHIRT, WT_SKIN, WT_EYES, WT_HAIR, WT_SHAPE | ||
1097 | }; | ||
1098 | |||
1099 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_FOLDING | ||
1100 | for (int idx = 0, cnt = sizeof(layerTypes) / sizeof(EWearableType); idx < cnt; idx++) | ||
1101 | { | ||
1102 | if ( (WT_INVALID == layerType) || (layerTypes[idx] == layerType) ) | ||
1103 | { | ||
1104 | // TODO-RLVa: add support for 'fHideLockedLayers' | ||
1105 | bool fWorn = (gAgent.getWearable(layerTypes[idx])) && | ||
1106 | (!isHiddenCompositeItem(gAgent.getWearableItem(layerTypes[idx]), | ||
1107 | LLWearable::typeToTypeName(layerTypes[idx]))); | ||
1108 | strReply.push_back( (fWorn) ? '1' : '0' ); | ||
1109 | } | ||
1110 | } | ||
1111 | #else | ||
1112 | for (int idx = 0, cnt = sizeof(layerTypes) / sizeof(EWearableType); idx < cnt; idx++) | ||
1113 | if ( (WT_INVALID == layerType) || (layerTypes[idx] == layerType) ) | ||
1114 | { | ||
1115 | // We never hide body parts, even if they're "locked" and we're hiding locked layers | ||
1116 | // (nor do we hide a layer if the issuing object is the only one that has this layer locked) | ||
1117 | bool fWorn = (gAgent.getWearable(layerTypes[idx])) && | ||
1118 | ( (!RlvSettings::getHideLockedLayers()) || | ||
1119 | (LLAssetType::AT_BODYPART == LLWearable::typeToAssetType(layerTypes[idx])) || | ||
1120 | ( (isRemovableExcept(layerTypes[idx], uuid)) && | ||
1121 | (isStrippable(gAgent.getWearableItem(layerTypes[idx]))) ) ); | ||
1122 | strReply.push_back( (fWorn) ? '1' : '0' ); | ||
1123 | //strReply.push_back( (gAgent.getWearable(layerTypes[idx])) ? '1' : '0' ); | ||
1124 | } | ||
1125 | #endif // RLV_EXPERIMENTAL_COMPOSITE_FOLDING | ||
1126 | } | ||
1127 | break; | ||
1128 | case RLV_BHVR_GETATTACH: // @getattach[:<layer>]=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0d | ||
1129 | { | ||
1130 | // If we're fetching all worn attachments then the reply should start with 0 | ||
1131 | if (strOption.empty()) | ||
1132 | strReply.push_back('0'); | ||
1133 | |||
1134 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); std::string strAttachName; | ||
1135 | for (LLVOAvatar::attachment_map_t::const_iterator itAttach = pAvatar->mAttachmentPoints.begin(); | ||
1136 | itAttach != pAvatar->mAttachmentPoints.end(); ++itAttach) | ||
1137 | { | ||
1138 | LLViewerJointAttachment* pAttachment = itAttach->second; | ||
1139 | if (!pAttachment) | ||
1140 | continue; | ||
1141 | |||
1142 | strAttachName = pAttachment->getName(); // Capitalized (see avatar_lad.xml) | ||
1143 | LLStringUtil::toLower(strAttachName); | ||
1144 | |||
1145 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_FOLDING | ||
1146 | if ( (strOption.empty()) || (strOption == strAttachName) ) | ||
1147 | { | ||
1148 | // TODO-RLVa: add support for 'fHideLockedAttach' | ||
1149 | bool fWorn = (pAttachment->getItemID().notNull()) && | ||
1150 | (!isHiddenCompositeItem(pAttachment->getItemID(), strAttachName)); | ||
1151 | strReply.push_back( (fWorn) ? '1' : '0' ); | ||
1152 | } | ||
1153 | #else | ||
1154 | if ( (strOption.empty()) || (strOption == strAttachName) ) | ||
1155 | { | ||
1156 | bool fWorn = (pAttachment->getItemID().notNull()) && | ||
1157 | ( (!RlvSettings::getHideLockedAttach()) || | ||
1158 | ( (isDetachable(itAttach->first)) && (isStrippable(pAttachment->getItemID())) ) ); | ||
1159 | strReply.push_back( (fWorn) ? '1' : '0' ); | ||
1160 | //strReply.push_back( (pAttachment->getItemID().notNull()) ? '1' : '0' ); | ||
1161 | } | ||
1162 | #endif // RLV_EXPERIMENTAL_COMPOSITE_FOLDING | ||
1163 | } | ||
1164 | } | ||
1165 | break; | ||
1166 | case RLV_BHVR_GETSTATUS: // @getstatus[:<option>]=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1167 | { | ||
1168 | // NOTE: specification says response should start with '/' but RLV-1.16.1 returns an empty string when no rules are set | ||
1169 | rlv_object_map_t::const_iterator itObj = m_Objects.find(uuid); | ||
1170 | if (itObj != m_Objects.end()) | ||
1171 | { | ||
1172 | std::string strObjStatus = itObj->second.getStatusString(strOption); | ||
1173 | if (!strObjStatus.empty()) | ||
1174 | { | ||
1175 | strReply.push_back('/'); | ||
1176 | strReply += strObjStatus; | ||
1177 | } | ||
1178 | } | ||
1179 | } | ||
1180 | break; | ||
1181 | case RLV_BHVR_GETSTATUSALL: // @getstatusall[:<option>]=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1182 | { | ||
1183 | // NOTE: specification says response should start with '/' but RLV-1.16.1 returns an empty string when no rules are set | ||
1184 | std::string strObjStatus; | ||
1185 | for (rlv_object_map_t::const_iterator itObj = m_Objects.begin(); itObj != m_Objects.end(); ++itObj) | ||
1186 | { | ||
1187 | strObjStatus = itObj->second.getStatusString(strOption); | ||
1188 | if (!strObjStatus.empty()) | ||
1189 | { | ||
1190 | strReply.push_back('/'); | ||
1191 | strReply += strObjStatus; | ||
1192 | } | ||
1193 | } | ||
1194 | } | ||
1195 | break; | ||
1196 | case RLV_BHVR_GETINV: // @getinv[:<path>]=<channel> - Checked: 2009-07-28 (RLVa-1.0.1b) | Modified: RLVa-1.0.1b | ||
1197 | { | ||
1198 | LLViewerInventoryCategory* pFolder = getSharedFolder(strOption); | ||
1199 | if (pFolder) | ||
1200 | { | ||
1201 | LLInventoryModel::cat_array_t* pFolders; | ||
1202 | LLInventoryModel::item_array_t* pItems; | ||
1203 | gInventory.getDirectDescendentsOf(pFolder->getUUID(), pFolders, pItems); | ||
1204 | |||
1205 | if (pFolders) | ||
1206 | { | ||
1207 | for (S32 idxFolder = 0, cntFolder = pFolders->count(); idxFolder < cntFolder; idxFolder++) | ||
1208 | { | ||
1209 | const std::string& strFolder = pFolders->get(idxFolder)->getName(); | ||
1210 | if ( (!strFolder.empty()) && (RLV_FOLDER_PREFIX_HIDDEN != strFolder[0]) && | ||
1211 | (!isFoldedFolder(pFolders->get(idxFolder).get(), true)) ) | ||
1212 | { | ||
1213 | if (!strReply.empty()) | ||
1214 | strReply.push_back(','); | ||
1215 | strReply += strFolder; | ||
1216 | } | ||
1217 | } | ||
1218 | } | ||
1219 | } | ||
1220 | } | ||
1221 | break; | ||
1222 | case RLV_BHVR_GETINVWORN: // @getinvworn[:path]=<channel> - Checked: | ||
1223 | onGetInvWorn(rlvCmd.getOption(), strReply); | ||
1224 | break; | ||
1225 | case RLV_BHVR_FINDFOLDER: // @findfolder:<criteria>=<channel> - Checked: 2009-08-26 (RLVa-1.0.2a) | Modified: RLVa-1.0.2a | ||
1226 | { | ||
1227 | // COMPAT-RLV: RLV 1.16.1 returns the first random folder it finds (probably tries to match "" to a folder name?) | ||
1228 | // (just going to stick with what's there for now... no option => no folder) | ||
1229 | LLInventoryModel::cat_array_t folders; | ||
1230 | if ( (!strOption.empty()) && (findSharedFolders(strOption, folders)) ) | ||
1231 | { | ||
1232 | // We need to return an "in depth" result so whoever has the most '/' is our lucky winner | ||
1233 | // (maxSlashes needs to be initialized to -1 since children of the #RLV folder won't have '/' in their shared path) | ||
1234 | int maxSlashes = -1, curSlashes; std::string strFolderName; | ||
1235 | for (S32 idxFolder = 0, cntFolder = folders.count(); idxFolder < cntFolder; idxFolder++) | ||
1236 | { | ||
1237 | strFolderName = getSharedPath(folders.get(idxFolder)); | ||
1238 | |||
1239 | curSlashes = std::count(strFolderName.begin(), strFolderName.end(), '/'); | ||
1240 | if (curSlashes > maxSlashes) | ||
1241 | { | ||
1242 | maxSlashes = curSlashes; | ||
1243 | strReply = strFolderName; | ||
1244 | } | ||
1245 | } | ||
1246 | } | ||
1247 | } | ||
1248 | break; | ||
1249 | #ifdef RLV_EXTENSION_CMD_FINDFOLDERS | ||
1250 | case RLV_BHVR_FINDFOLDERS: // @findfolders:<criteria>=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | Added: RLVa-0.2.0b | ||
1251 | { | ||
1252 | LLInventoryModel::cat_array_t folders; | ||
1253 | if ( (!strOption.empty()) && (findSharedFolders(strOption, folders)) ) | ||
1254 | { | ||
1255 | for (S32 idxFolder = 0, cntFolder = folders.count(); idxFolder < cntFolder; idxFolder++) | ||
1256 | { | ||
1257 | if (!strReply.empty()) | ||
1258 | strReply.push_back(','); | ||
1259 | strReply += getSharedPath(folders.get(idxFolder)); | ||
1260 | } | ||
1261 | } | ||
1262 | } | ||
1263 | break; | ||
1264 | #endif // RLV_EXTENSION_CMD_FINDFOLDERS | ||
1265 | case RLV_BHVR_GETPATH: // @getpath[:<option>]=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1266 | onGetPath(uuid, rlvCmd.getOption(), strReply); | ||
1267 | break; | ||
1268 | case RLV_BHVR_GETSITID: // @getsitid=<channel> - Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1269 | { | ||
1270 | // (Quirk: RLV 1.16.1 returns a NULL uuid if we're not sitting) | ||
1271 | LLVOAvatar* pAvatarObj = gAgent.getAvatarObject(); LLUUID uuid; | ||
1272 | if ( (pAvatarObj) && (pAvatarObj->mIsSitting) ) | ||
1273 | { | ||
1274 | // LLVOAvatar inherits from 2 classes so make sure we get the right vfptr | ||
1275 | LLViewerObject* pAvatar = dynamic_cast<LLViewerObject*>(pAvatarObj), *pParent; | ||
1276 | // (If there is a parent, we need to upcast it from LLXform to LLViewerObject to get its UUID) | ||
1277 | if ( (pAvatar) && ((pParent = static_cast<LLViewerObject*>(pAvatar->getRoot())) != pAvatar) ) | ||
1278 | uuid = pParent->getID(); | ||
1279 | } | ||
1280 | strReply = uuid.asString(); | ||
1281 | } | ||
1282 | break; | ||
1283 | case RLV_BHVR_UNKNOWN: | ||
1284 | { | ||
1285 | // Give our observers a chance to handle any command we don't | ||
1286 | RlvEvent rlvEvent(uuid, rlvCmd); | ||
1287 | return m_Emitter.update(&RlvObserver::onReplyCommand, rlvEvent); | ||
1288 | } | ||
1289 | break; | ||
1290 | default: | ||
1291 | break; | ||
1292 | } | ||
1293 | |||
1294 | if (fHandled) | ||
1295 | rlvSendChatReply(strChannel, strReply); | ||
1296 | return fHandled; | ||
1297 | } | ||
1298 | |||
1299 | // ============================================================================ | ||
1300 | // House keeping (see debug notes for test methodology, test script and last run) | ||
1301 | // | ||
1302 | |||
1303 | void RlvHandler::initLookupTables() | ||
1304 | { | ||
1305 | static bool fInitialized = false; | ||
1306 | if (!fInitialized) | ||
1307 | { | ||
1308 | // Initialize the attachment name lookup table | ||
1309 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
1310 | if (pAvatar) | ||
1311 | { | ||
1312 | std::string strAttachPtName; | ||
1313 | for (LLVOAvatar::attachment_map_t::const_iterator itAttach = pAvatar->mAttachmentPoints.begin(); | ||
1314 | itAttach != pAvatar->mAttachmentPoints.end(); ++itAttach) | ||
1315 | { | ||
1316 | LLViewerJointAttachment* pAttachPt = itAttach->second; | ||
1317 | if (pAttachPt) | ||
1318 | { | ||
1319 | strAttachPtName = pAttachPt->getName(); | ||
1320 | LLStringUtil::toLower(strAttachPtName); | ||
1321 | m_AttachLookup.addKeyword(strAttachPtName, itAttach->first); | ||
1322 | } | ||
1323 | } | ||
1324 | fInitialized = true; | ||
1325 | } | ||
1326 | } | ||
1327 | } | ||
1328 | |||
1329 | // Checked: 2009-08-11 (RLVa-1.0.1h) | Modified: RLVa-1.0.1h | ||
1330 | void RlvHandler::onAttach(LLViewerJointAttachment* pAttachPt, bool fFullyLoaded) | ||
1331 | { | ||
1332 | // Sanity check - LLVOAvatar::attachObject() should call us *after* calling LLViewerJointAttachment::addObject() | ||
1333 | LLViewerObject* pObj = pAttachPt->getObject(); | ||
1334 | S32 idxAttachPt = getAttachPointIndex(pObj); // getAttachPointIndex() has a NULL pointer check so this is safe | ||
1335 | if ( (!pObj) || (!idxAttachPt) ) | ||
1336 | { | ||
1337 | RLV_ERRS << "pAttachPt->getObject() == NULL" << LL_ENDL; | ||
1338 | return; | ||
1339 | } | ||
1340 | |||
1341 | // Check if this attachment point has a pending "reattach-on-detach" | ||
1342 | rlv_reattach_map_t::iterator itReattach = m_AttachPending.find(idxAttachPt); | ||
1343 | if (itReattach != m_AttachPending.end()) | ||
1344 | { | ||
1345 | if (itReattach->second == pAttachPt->getItemID()) | ||
1346 | { | ||
1347 | RLV_INFOS << "Reattached " << pAttachPt->getItemID().asString() << " to " << idxAttachPt << LL_ENDL; | ||
1348 | m_AttachPending.erase(itReattach); | ||
1349 | } | ||
1350 | } | ||
1351 | else if ( (fFullyLoaded) && (!isDetachableExcept(idxAttachPt, pObj)) ) | ||
1352 | { | ||
1353 | // We're fully loaded with no pending reattach on this attach point but it's "undetachable" -> force detach the new attachment | ||
1354 | |||
1355 | // Assertion: the only way the attachment point could be locked at this point is if some object locked it with @detach:attachpt=n | ||
1356 | // - previous attachments on this attachment point might have issued @detach=n but those were all cleaned up at detach | ||
1357 | // - the new attachment might have issued @detach=n but that won't actually lock down the attachment point until further down | ||
1358 | // NOTE 1: "some object" may no longer exist if it was not an attachment and the GC hasn't cleaned it up yet (informative) | ||
1359 | // NOTE 2: "some object" may refer to the new attachment - ie @detach:spine=n from object on spine (problematic, causes reattach) | ||
1360 | // -> solved by using isDetachableExcept(idxAttachPt, pObj) instead of isDetachable(idxAttachPt) | ||
1361 | |||
1362 | m_DetachPending.insert(std::pair<S32, LLUUID>(idxAttachPt, pObj->getID())); | ||
1363 | rlvForceDetach(pAttachPt); | ||
1364 | } | ||
1365 | |||
1366 | // Check if we already have an RlvObject instance for this object (rezzed prim attached from in-world, or an attachment that rezzed in) | ||
1367 | rlv_object_map_t::iterator itObj = m_Objects.find(pObj->getID()); | ||
1368 | if (itObj != m_Objects.end()) | ||
1369 | { | ||
1370 | // Save the attachment point index | ||
1371 | itObj->second.m_idxAttachPt = idxAttachPt; | ||
1372 | |||
1373 | // If it's an attachment we processed commands for but that only just rezzed in we need to mark it as existing in gObjectList | ||
1374 | if (!itObj->second.m_fLookup) | ||
1375 | itObj->second.m_fLookup = true; | ||
1376 | |||
1377 | // In both cases we should check for "@detach=n" and actually lock down the attachment point it got attached to | ||
1378 | if (itObj->second.hasBehaviour(RLV_BHVR_DETACH, false)) | ||
1379 | { | ||
1380 | // (Copy/paste from processAddCommand) | ||
1381 | setDetachable(idxAttachPt, pObj->getID(), false); | ||
1382 | |||
1383 | if (pObj->isHUDAttachment()) | ||
1384 | LLPipeline::sShowHUDAttachments = TRUE; // Prevents hiding of locked HUD attachments | ||
1385 | } | ||
1386 | } | ||
1387 | |||
1388 | // Fetch the inventory item if we don't currently have it since we might need it for reattach-on-detach | ||
1389 | const LLUUID& idItem = pAttachPt->getItemID(); | ||
1390 | LLViewerInventoryItem* pItem = ( (idItem.notNull()) && (gInventory.isInventoryUsable()) ) ? gInventory.getItem(idItem) : NULL; | ||
1391 | if ( (STATE_STARTED == LLStartUp::getStartupState()) && (pItem != NULL) ) | ||
1392 | { | ||
1393 | RlvCurrentlyWorn f; | ||
1394 | f.fetchItem(idItem); | ||
1395 | } | ||
1396 | |||
1397 | // If what we're wearing is located under the shared root then append the attachment point name (if needed) | ||
1398 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(); | ||
1399 | if ( (STATE_STARTED == LLStartUp::getStartupState()) && (pRlvRoot) && (pItem) && (pItem->isComplete()) && | ||
1400 | (gInventory.isObjectDescendentOf(idItem, pRlvRoot->getUUID())) ) | ||
1401 | { | ||
1402 | std::string strAttachPt = pAttachPt->getName(); | ||
1403 | LLStringUtil::toLower(strAttachPt); | ||
1404 | |||
1405 | // If we can modify the item then it should contain the attach point name itself, otherwise its parent should | ||
1406 | if (pItem->getPermissions().allowModifyBy(gAgent.getID())) | ||
1407 | { | ||
1408 | if (!getAttachPoint(pItem, true)) | ||
1409 | { | ||
1410 | // It doesn't specify an attach point and we can rename it [see LLItemBridge::renameItem()] | ||
1411 | std::string strName = pItem->getName(); | ||
1412 | LLStringUtil::truncate(strName, DB_INV_ITEM_NAME_STR_LEN - strAttachPt.length() - 3); | ||
1413 | |||
1414 | strName += " (" + strAttachPt + ")"; | ||
1415 | |||
1416 | pItem->rename(strName); | ||
1417 | pItem->updateServer(FALSE); | ||
1418 | gInventory.updateItem(pItem); | ||
1419 | //gInventory.notifyObservers(); <- done further down in LLVOAvatar::attachObject() | ||
1420 | } | ||
1421 | } | ||
1422 | else | ||
1423 | { | ||
1424 | // Folder can't be the shared root, or be its direct descendant (= nested at least 2 levels deep) | ||
1425 | LLViewerInventoryCategory* pFolder = gInventory.getCategory(pItem->getParentUUID()); | ||
1426 | if ( (pFolder) && | ||
1427 | (pFolder->getUUID() != pRlvRoot->getUUID()) && (pFolder->getParentUUID() != pRlvRoot->getUUID()) && | ||
1428 | (!getAttachPoint(pFolder, true)) ) | ||
1429 | { | ||
1430 | // It's no mod and its parent folder doesn't contain an attach point | ||
1431 | if ( (1 == rlvGetDirectDescendentsCount(pFolder, LLAssetType::AT_OBJECT)) && (NEW_CATEGORY_NAME == pFolder->getName()) ) | ||
1432 | { | ||
1433 | // Only rename if there's exactly 1 object/attachment inside of it [see LLFolderBridge::renameItem()] | ||
1434 | std::string strName = ".(" + strAttachPt + ")"; | ||
1435 | |||
1436 | pFolder->rename(strName); | ||
1437 | pFolder->updateServer(FALSE); | ||
1438 | gInventory.updateCategory(pFolder); | ||
1439 | //gInventory.notifyObservers(); <- done further down in LLVOAvatar::attachObject() | ||
1440 | } | ||
1441 | } | ||
1442 | } | ||
1443 | } | ||
1444 | } | ||
1445 | |||
1446 | // Checked: 2009-05-31 (RLVa-0.2.0e) | Modified: RLVa-0.2.0e | ||
1447 | void RlvHandler::onDetach(LLViewerJointAttachment* pAttachPt) | ||
1448 | { | ||
1449 | LLViewerObject* pObj = pAttachPt->getObject(); | ||
1450 | if (!pObj) | ||
1451 | { | ||
1452 | // LLVOAvatar::detachObject() should call us *before* calling LLViewerJointAttachment::removeObject() | ||
1453 | RLV_ERRS << "pAttachPt->getObject() == NULL" << LL_ENDL; | ||
1454 | return; | ||
1455 | } | ||
1456 | S32 idxAttachPt = getAttachPointIndex(pObj); | ||
1457 | if (0 == idxAttachPt) | ||
1458 | { | ||
1459 | // If we ended up here then the user "Drop"'ed this attachment (which we can't recover from) | ||
1460 | return; | ||
1461 | } | ||
1462 | |||
1463 | #ifdef RLV_DEBUG | ||
1464 | // TODO-RLV: when we're exiting (for whatever reason) app state won't always reflect it but | ||
1465 | // gAgent.getAvatarObject()->mAttachmentPoints will be NULL so anywhere we use | ||
1466 | // "get_if_there" will call through a NULL pointer. One case is "idling out" -> test the rest | ||
1467 | //LLViewerJointAttachment* pDbgAttachmentPt = | ||
1468 | // get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)idxAttachPt, (LLViewerJointAttachment*)NULL); | ||
1469 | //RLV_INFOS << "Clean up for '" << pDbgAttachmentPt->getName() << "'" << LL_ENDL; | ||
1470 | #endif // RLV_DEBUG | ||
1471 | |||
1472 | // If the attachment was locked then we should reattach it (unless we're already trying to reattach to this attachment point) | ||
1473 | // (unless we forcefully detached it else in which case we do not want to reattach it) | ||
1474 | rlv_reattach_map_t::iterator itDetach = m_DetachPending.find(idxAttachPt); | ||
1475 | if (itDetach != m_DetachPending.end()) | ||
1476 | { | ||
1477 | // RLVa-TODO: we should really be comparing item UUIDs but is it even possible to end up here and not have them match? | ||
1478 | m_DetachPending.erase(itDetach); | ||
1479 | } | ||
1480 | else if ( (!isDetachable(idxAttachPt)) && (m_AttachPending.find(idxAttachPt) == m_AttachPending.end()) ) | ||
1481 | { | ||
1482 | // In an ideal world we would simply set up an LLInventoryObserver but there's no specific "asset updated" changed flag *sighs* | ||
1483 | // NOTE: attachments *always* know their "inventory item UUID" so we don't have to worry about fetched vs unfetched inventory | ||
1484 | m_AttachPending.insert(std::pair<S32, LLUUID>(idxAttachPt, pAttachPt->getItemID())); | ||
1485 | } | ||
1486 | |||
1487 | // We can't - easily - clean up child prims that never issued @detach=n but the GC will get those eventually | ||
1488 | rlv_detach_map_t::iterator itAttach = m_Attachments.find(idxAttachPt); | ||
1489 | while ( (itAttach != m_Attachments.upper_bound(idxAttachPt)) && (itAttach != m_Attachments.end()) ) | ||
1490 | { | ||
1491 | LLViewerObject* pTempObj = gObjectList.findObject(itAttach->second); | ||
1492 | if ( (pTempObj) && (pTempObj->getRootEdit()->getID() == pObj->getID()) ) | ||
1493 | { | ||
1494 | // Iterator points to the object (or to a child prim) so issue a clear on behalf of the object (there's the | ||
1495 | // possibility of going into an eternal loop, but that's ok since it indicates a bug in @clear that needs fixing) | ||
1496 | processCommand(itAttach->second, "clear", true); | ||
1497 | |||
1498 | itAttach = m_Attachments.find(idxAttachPt); // @clear will invalidate all iterators so we have to start anew | ||
1499 | } | ||
1500 | else | ||
1501 | { | ||
1502 | itAttach++; | ||
1503 | } | ||
1504 | } | ||
1505 | |||
1506 | // Clean up in case there was never a @detach=n (only works for the root prim - see above) | ||
1507 | rlv_object_map_t::iterator itObj = m_Objects.find(pObj->getID()); | ||
1508 | if (itObj != m_Objects.end()) | ||
1509 | processCommand(itObj->second.m_UUID, "clear", true); | ||
1510 | } | ||
1511 | |||
1512 | // Checked: 2009-07-30 (RLVa-1.0.1c) | Modified: RLVa-1.0.1c | ||
1513 | bool RlvHandler::onGC() | ||
1514 | { | ||
1515 | // We can't issue @clear on an object while we're in the loop below since that would invalidate our iterator | ||
1516 | // (and starting over would mean that some objects might get their "lookup misses" counter updated more than once per GC run) | ||
1517 | std::list<LLUUID> ExpiredObjects; | ||
1518 | |||
1519 | for (rlv_object_map_t::iterator itObj = m_Objects.begin(); itObj != m_Objects.end(); ++itObj) | ||
1520 | { | ||
1521 | LLViewerObject* pObj = gObjectList.findObject(itObj->second.m_UUID); | ||
1522 | if (!pObj) | ||
1523 | { | ||
1524 | // If the RlvObject once existed in the gObjectList and now doesn't then expire it right now | ||
1525 | // If the RlvObject never existed in the gObjectList and still doesn't then increase its "lookup misses" counter | ||
1526 | // but if that reaches 20 (we run every 30 seconds so that's about 10 minutes) then we'll expire it too | ||
1527 | if ( (itObj->second.m_fLookup) || (++itObj->second.m_nLookupMisses > 20) ) | ||
1528 | ExpiredObjects.push_back(itObj->first); | ||
1529 | } | ||
1530 | else | ||
1531 | { | ||
1532 | // Check if this is an RlvObject instance who's object never existed in gObjectList before (rezzed prim in-world) | ||
1533 | // (it could also be an attachment that only just rezzed in but RlvHandler::onAttach() should be handling those) | ||
1534 | if ( (!itObj->second.m_fLookup) && (!pObj->isAttachment()) ) | ||
1535 | itObj->second.m_fLookup = true; | ||
1536 | } | ||
1537 | } | ||
1538 | |||
1539 | for (std::list<LLUUID>::const_iterator itExpired = ExpiredObjects.begin(); itExpired != ExpiredObjects.end(); ++itExpired) | ||
1540 | { | ||
1541 | #ifdef RLV_DEBUG | ||
1542 | RLV_INFOS << "Garbage collecting " << *itExpired << LL_ENDL; | ||
1543 | #endif // RLV_DEBUG | ||
1544 | |||
1545 | processCommand(*itExpired, "clear", true); | ||
1546 | } | ||
1547 | |||
1548 | return (0 != m_Objects.size()); // GC will kill itself if it has nothing to do | ||
1549 | } | ||
1550 | |||
1551 | // Checked: 2009-08-08 (RLVa-1.0.1g) | Modified: RLVa-1.0.1g | ||
1552 | void RlvHandler::onSavedAssetIntoInventory(const LLUUID& idItem) | ||
1553 | { | ||
1554 | for (rlv_reattach_map_t::iterator itAttach = m_AttachPending.begin(); itAttach != m_AttachPending.end(); ++itAttach) | ||
1555 | { | ||
1556 | if (idItem == itAttach->second) | ||
1557 | { | ||
1558 | RLV_INFOS << "Reattaching " << idItem.asString() << " to " << itAttach->first << LL_ENDL; | ||
1559 | |||
1560 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
1561 | LLAttachmentRezAction* rez_action = new LLAttachmentRezAction; | ||
1562 | rez_action->mItemID = itAttach->second; | ||
1563 | rez_action->mAttachPt = itAttach->first; | ||
1564 | |||
1565 | confirm_replace_attachment_rez(0/*YES*/, (void*)rez_action); // (Will call delete on rez_action) | ||
1566 | #else // Version: 1.23.4 | ||
1567 | LLSD payload; | ||
1568 | payload["item_id"] = itAttach->second; | ||
1569 | payload["attachment_point"] = itAttach->first; | ||
1570 | |||
1571 | LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/); | ||
1572 | #endif | ||
1573 | } | ||
1574 | } | ||
1575 | } | ||
1576 | |||
1577 | // ============================================================================ | ||
1578 | // String/chat censoring functions | ||
1579 | // | ||
1580 | |||
1581 | // LL must have included an strlen for UTF8 *somewhere* but I can't seem to find it so this one is home grown | ||
1582 | size_t utf8str_strlen(const std::string& utf8) | ||
1583 | { | ||
1584 | const char* pUTF8 = utf8.c_str(); size_t length = 0; | ||
1585 | for (int idx = 0, cnt = utf8.length(); idx < cnt ;idx++) | ||
1586 | { | ||
1587 | // We're looking for characters that don't start with 10 as their high bits | ||
1588 | if ((pUTF8[idx] & 0xC0) != 0x80) | ||
1589 | length++; | ||
1590 | } | ||
1591 | return length; | ||
1592 | } | ||
1593 | |||
1594 | // TODO-RLV: works, but more testing won't hurt | ||
1595 | std::string utf8str_chtruncate(const std::string& utf8, size_t length) | ||
1596 | { | ||
1597 | if (0 == length) | ||
1598 | return std::string(); | ||
1599 | if (utf8.length() <= length) | ||
1600 | return utf8; | ||
1601 | |||
1602 | const char* pUTF8 = utf8.c_str(); int idx = 0; | ||
1603 | while ( (pUTF8[idx]) && (length > 0) ) | ||
1604 | { | ||
1605 | // We're looking for characters that don't start with 10 as their high bits | ||
1606 | if ((pUTF8[idx] & 0xC0) != 0x80) | ||
1607 | length--; | ||
1608 | idx++; | ||
1609 | } | ||
1610 | |||
1611 | return utf8.substr(0, idx); | ||
1612 | } | ||
1613 | |||
1614 | // Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
1615 | void RlvHandler::filterChat(std::string& strUTF8Text, bool fFilterEmote) const | ||
1616 | { | ||
1617 | if (strUTF8Text.empty()) | ||
1618 | return; | ||
1619 | |||
1620 | if (rlvIsEmote(strUTF8Text)) // Check if it's an emote | ||
1621 | { | ||
1622 | if (fFilterEmote) // Emote filtering depends on fFilterEmote | ||
1623 | { | ||
1624 | if ( (strUTF8Text.find_first_of("\"()*=^_?~") != -1) || | ||
1625 | (strUTF8Text.find(" -") != -1) || (strUTF8Text.find("- ") != -1) || (strUTF8Text.find("''") != -1) ) | ||
1626 | { | ||
1627 | strUTF8Text = "..."; // Emote contains illegal character (or character sequence) | ||
1628 | } | ||
1629 | else if (!hasBehaviour(RLV_BHVR_EMOTE)) | ||
1630 | { | ||
1631 | int idx = strUTF8Text.find('.'); // Truncate at 20 characters or at the dot (whichever is shorter) | ||
1632 | strUTF8Text = utf8str_chtruncate(strUTF8Text, ( (idx > 0) && (idx < 20) ) ? idx + 1 : 20); | ||
1633 | } | ||
1634 | } | ||
1635 | } | ||
1636 | else if (strUTF8Text[0] == '/') // Not an emote, but starts with a '/' | ||
1637 | { | ||
1638 | if (utf8str_strlen(strUTF8Text) > 7) // Allow as long if it's 6 characters or less | ||
1639 | strUTF8Text = "..."; | ||
1640 | } | ||
1641 | else if ((strUTF8Text.length() < 4) || (strUTF8Text.compare(0, 2, "((")) || (strUTF8Text.compare(strUTF8Text.length() - 2, 2, "))"))) | ||
1642 | { | ||
1643 | strUTF8Text = "..."; // Regular chat (not OOC) | ||
1644 | } | ||
1645 | } | ||
1646 | |||
1647 | // Checked: 2009-07-04 (RLVa-1.0.0a) | Modified: RLVa-1.0.0a | ||
1648 | void RlvHandler::filterLocation(std::string& strUTF8Text) const | ||
1649 | { | ||
1650 | // TODO-RLVa: if either the region or parcel name is a simple word such as "a" or "the" then confusion will ensue? | ||
1651 | // -> not sure how you would go about preventing this though :|... | ||
1652 | |||
1653 | // Filter any mention of the surrounding region names | ||
1654 | LLWorld::region_list_t regions = LLWorld::getInstance()->getRegionList(); | ||
1655 | for (LLWorld::region_list_t::const_iterator itRegion = regions.begin(); itRegion != regions.end(); ++itRegion) | ||
1656 | rlvStringReplace(strUTF8Text, (*itRegion)->getName(), rlv_handler_t::cstrHiddenRegion); | ||
1657 | |||
1658 | // Filter any mention of the parcel name | ||
1659 | LLViewerParcelMgr* pParcelMgr = LLViewerParcelMgr::getInstance(); | ||
1660 | if (pParcelMgr) | ||
1661 | rlvStringReplace(strUTF8Text, pParcelMgr->getAgentParcelName(), rlv_handler_t::cstrHiddenParcel); | ||
1662 | } | ||
1663 | |||
1664 | void RlvHandler::filterNames(std::string& strUTF8Text) const | ||
1665 | { | ||
1666 | std::string strFirstName, strLastName, strName; | ||
1667 | |||
1668 | // TODO-RLV: make this a bit more efficient (ie people with a large draw distance will have a load of active regions) | ||
1669 | // -> the cost of multi string matching them all at once seems to be about the same as calling rlvStringReplace | ||
1670 | // twice so that would be a tremendous gain (and we'd get first name and word matching for free) | ||
1671 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
1672 | for (LLWorld::region_list_t::const_iterator itRegion = LLWorld::getInstance()->getRegionList().begin(); | ||
1673 | itRegion != LLWorld::getInstance()->getRegionList().end(); ++itRegion) | ||
1674 | { | ||
1675 | LLViewerRegion* pRegion = *itRegion; | ||
1676 | |||
1677 | for (S32 idxAgent = 0, cntAgent = pRegion->mMapAvatars.count(); idxAgent < cntAgent; idxAgent++) | ||
1678 | { | ||
1679 | // LLCacheName::getName() will add the UUID to the lookup queue if we don't know it yet | ||
1680 | if (gCacheName->getName(pRegion->mMapAvatarIDs.get(idxAgent), strFirstName, strLastName)) | ||
1681 | { | ||
1682 | strName = strFirstName + " " + strLastName; | ||
1683 | |||
1684 | rlvStringReplace(strUTF8Text, strName, getAnonym(strName)); | ||
1685 | } | ||
1686 | } | ||
1687 | } | ||
1688 | #else // Version: trunk | ||
1689 | // TODO-RLV: should restrict this to a certain radius (probably 1-2 sim range?) | ||
1690 | std::vector<LLUUID> idAgents; | ||
1691 | LLWorld::getInstance()->getAvatars(&idAgents, NULL); | ||
1692 | |||
1693 | for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++) | ||
1694 | { | ||
1695 | // LLCacheName::getName() will add the UUID to the lookup queue if we don't know it yet | ||
1696 | if (gCacheName->getName(idAgents[idxAgent], strFirstName, strLastName)) | ||
1697 | { | ||
1698 | strName = strFirstName + " " + strLastName; | ||
1699 | |||
1700 | rlvStringReplace(strUTF8Text, strName, getAnonym(strName)); | ||
1701 | } | ||
1702 | } | ||
1703 | #endif | ||
1704 | } | ||
1705 | |||
1706 | const std::string& RlvHandler::getAnonym(const std::string& strName) const | ||
1707 | { | ||
1708 | const char* pszName = strName.c_str(); | ||
1709 | U32 nHash = 0; | ||
1710 | |||
1711 | // Test with 11,264 SL names showed a 3.33% - 3.82% occurance for each so we *should* get a very even spread | ||
1712 | for (int idx = 0, cnt = strName.length(); idx < cnt; idx++) | ||
1713 | nHash += pszName[idx]; | ||
1714 | |||
1715 | return cstrAnonyms[nHash % 28]; | ||
1716 | } | ||
1717 | |||
1718 | // Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.2a | ||
1719 | bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const | ||
1720 | { | ||
1721 | // Sanity check - @redirchat only for chat and @rediremote only for emotes | ||
1722 | bool fIsEmote = rlvIsEmote(strUTF8Text); | ||
1723 | if ( ((!fIsEmote) && (!hasBehaviour(RLV_BHVR_REDIRCHAT))) || ((fIsEmote) && (!hasBehaviour(RLV_BHVR_REDIREMOTE))) ) | ||
1724 | return false; | ||
1725 | |||
1726 | if (!fIsEmote) | ||
1727 | { | ||
1728 | std::string strText = strUTF8Text; | ||
1729 | filterChat(strText, true); | ||
1730 | if (strText != "...") | ||
1731 | return false; // @sendchat wouldn't filter it so @redirchat won't redirect it either | ||
1732 | } | ||
1733 | |||
1734 | bool fSendChannel = hasBehaviour(RLV_BHVR_SENDCHANNEL); S32 nChannel = 0; | ||
1735 | for (rlv_object_map_t::const_iterator itObj = m_Objects.begin(); itObj != m_Objects.end(); ++itObj) | ||
1736 | { | ||
1737 | for (rlv_command_list_t::const_iterator itCmd = itObj->second.m_Commands.begin(), | ||
1738 | endCmd = itObj->second.m_Commands.end(); itCmd != endCmd; ++itCmd) | ||
1739 | { | ||
1740 | if ( ( ((!fIsEmote) && (RLV_BHVR_REDIRCHAT == itCmd->getBehaviourType())) || // Redirect if: (not an emote and @redirchat | ||
1741 | ((fIsEmote) && (RLV_BHVR_REDIREMOTE == itCmd->getBehaviourType())) ) && // OR an emote and @rediremote) | ||
1742 | (LLStringUtil::convertToS32(itCmd->getOption(), nChannel)) && // AND the channel is a number | ||
1743 | ( (!fSendChannel) || (isException(RLV_BHVR_SENDCHANNEL, nChannel)) ) ) // AND we're allowed to send to that channel | ||
1744 | { | ||
1745 | rlvSendChatReply(nChannel, strUTF8Text); | ||
1746 | } | ||
1747 | } | ||
1748 | } | ||
1749 | return true; | ||
1750 | } | ||
1751 | |||
1752 | // ============================================================================ | ||
1753 | // Public service functions (called by the outside world or by extension handlers) | ||
1754 | // | ||
1755 | |||
1756 | BOOL RlvHandler::isAgentNearby(const LLUUID& uuid) const | ||
1757 | { | ||
1758 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
1759 | for (LLWorld::region_list_t::const_iterator itRegion = LLWorld::getInstance()->getRegionList().begin(); | ||
1760 | itRegion != LLWorld::getInstance()->getRegionList().end(); ++itRegion) | ||
1761 | { | ||
1762 | LLViewerRegion* pRegion = *itRegion; | ||
1763 | |||
1764 | for (S32 idxAgent = 0, cntAgent = pRegion->mMapAvatars.count(); idxAgent < cntAgent; idxAgent++) | ||
1765 | if (pRegion->mMapAvatarIDs.get(idxAgent) == uuid) | ||
1766 | return TRUE; | ||
1767 | } | ||
1768 | #else // Version: trunk | ||
1769 | // TODO-RLV: rewrite this to fit trunk, but still need the radius limited to a sane range | ||
1770 | std::vector<LLUUID> idAgents; | ||
1771 | LLWorld::getInstance()->getAvatars(&idAgents, NULL); | ||
1772 | |||
1773 | for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++) | ||
1774 | { | ||
1775 | if (idAgents[idxAgent] == uuid) | ||
1776 | return TRUE; | ||
1777 | } | ||
1778 | #endif | ||
1779 | return FALSE; | ||
1780 | } | ||
1781 | |||
1782 | // ============================================================================ | ||
1783 | // General purpose inventory functions | ||
1784 | // | ||
1785 | |||
1786 | // Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1787 | class RlvSharedRootFetcher : public LLInventoryFetchDescendentsObserver | ||
1788 | { | ||
1789 | public: | ||
1790 | RlvSharedRootFetcher() {} | ||
1791 | |||
1792 | virtual void done() | ||
1793 | { | ||
1794 | RLV_INFOS << "Shared folders fetch completed" << LL_ENDL; | ||
1795 | RlvHandler::m_fFetchComplete = TRUE; | ||
1796 | |||
1797 | gInventory.removeObserver(this); | ||
1798 | delete this; | ||
1799 | } | ||
1800 | }; | ||
1801 | |||
1802 | // Checked: 2009-07-12 (RLVa-1.0.0h) | ||
1803 | void RlvHandler::fetchSharedInventory() | ||
1804 | { | ||
1805 | // Sanity check - don't fetch if we're already fetching, or if we don't have a shared root | ||
1806 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(); | ||
1807 | if ( (m_fFetchStarted) || (!pRlvRoot) ) | ||
1808 | return; | ||
1809 | |||
1810 | // Grab all the folders under the shared root | ||
1811 | LLInventoryModel::cat_array_t folders; | ||
1812 | LLInventoryModel::item_array_t items; | ||
1813 | gInventory.collectDescendents(pRlvRoot->getUUID(), folders, items, FALSE); | ||
1814 | |||
1815 | /* | ||
1816 | * Add them to the "to fetch" list | ||
1817 | */ | ||
1818 | LLInventoryFetchDescendentsObserver::folder_ref_t fetchFolders; | ||
1819 | |||
1820 | fetchFolders.push_back(pRlvRoot->getUUID()); | ||
1821 | for (S32 idxFolder = 0, cntFolder = folders.count(); idxFolder < cntFolder; idxFolder++) | ||
1822 | fetchFolders.push_back(folders.get(idxFolder)->getUUID()); | ||
1823 | |||
1824 | /* | ||
1825 | * Now fetch them all in one go | ||
1826 | */ | ||
1827 | RlvSharedRootFetcher* fetcher = new RlvSharedRootFetcher; | ||
1828 | |||
1829 | RLV_INFOS << "Starting fetch of " << fetchFolders.size() << " shared folders" << LL_ENDL; | ||
1830 | fetcher->fetchDescendents(fetchFolders); | ||
1831 | |||
1832 | if (fetcher->isEverythingComplete()) | ||
1833 | fetcher->done(); | ||
1834 | else | ||
1835 | gInventory.addObserver(fetcher); | ||
1836 | } | ||
1837 | |||
1838 | bool RlvHandler::findSharedFolders(const std::string& strCriteria, LLInventoryModel::cat_array_t& folders) const | ||
1839 | { | ||
1840 | // Sanity check - can't do anything without a shared root | ||
1841 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(); | ||
1842 | if (!pRlvRoot) | ||
1843 | return false; | ||
1844 | |||
1845 | folders.clear(); | ||
1846 | LLInventoryModel::item_array_t items; | ||
1847 | RlvCriteriaCategoryCollector functor(strCriteria); | ||
1848 | gInventory.collectDescendentsIf(pRlvRoot->getUUID(), folders, items, FALSE, functor); | ||
1849 | |||
1850 | return (folders.count() != 0); | ||
1851 | } | ||
1852 | |||
1853 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0e | ||
1854 | LLViewerInventoryCategory* RlvHandler::getSharedRoot() | ||
1855 | { | ||
1856 | if (gInventory.isInventoryUsable()) | ||
1857 | { | ||
1858 | LLInventoryModel::cat_array_t* pFolders; | ||
1859 | LLInventoryModel::item_array_t* pItems; | ||
1860 | gInventory.getDirectDescendentsOf(gAgent.getInventoryRootID(), pFolders, pItems); | ||
1861 | if (pFolders) | ||
1862 | { | ||
1863 | // NOTE: we might have multiple #RLV folders so we'll just go with the first one we come across | ||
1864 | LLViewerInventoryCategory* pFolder; | ||
1865 | for (S32 idxFolder = 0, cntFolder = pFolders->count(); idxFolder < cntFolder; idxFolder++) | ||
1866 | { | ||
1867 | if ( ((pFolder = pFolders->get(idxFolder)) != NULL) && (RlvHandler::cstrSharedRoot == pFolder->getName()) ) | ||
1868 | return pFolder; | ||
1869 | } | ||
1870 | } | ||
1871 | } | ||
1872 | return NULL; | ||
1873 | } | ||
1874 | |||
1875 | // Checked: 2009-07-28 (RLVa-1.0.1a) | Modified: RLVa-1.0.1a | ||
1876 | LLViewerInventoryCategory* RlvHandler::getSharedFolder(const LLUUID& idParent, const std::string& strFolderName) const | ||
1877 | { | ||
1878 | LLInventoryModel::cat_array_t* pFolders; | ||
1879 | LLInventoryModel::item_array_t* pItems; | ||
1880 | gInventory.getDirectDescendentsOf(idParent, pFolders, pItems); | ||
1881 | if ( (!pFolders) || (strFolderName.empty()) ) | ||
1882 | return NULL; | ||
1883 | |||
1884 | // If we can't find an exact match then we'll settle for a "contains" match | ||
1885 | LLViewerInventoryCategory* pPartial = NULL; | ||
1886 | |||
1887 | //LLStringUtil::toLower(strFolderName); <- everything was already converted to lower case before | ||
1888 | |||
1889 | std::string strName; | ||
1890 | for (S32 idxFolder = 0, cntFolder = pFolders->count(); idxFolder < cntFolder; idxFolder++) | ||
1891 | { | ||
1892 | LLViewerInventoryCategory* pFolder = pFolders->get(idxFolder); | ||
1893 | |||
1894 | strName = pFolder->getName(); | ||
1895 | if (strName.empty()) | ||
1896 | continue; | ||
1897 | LLStringUtil::toLower(strName); | ||
1898 | |||
1899 | if (strFolderName == strName) | ||
1900 | return pFolder; // Found an exact match, no need to keep on going | ||
1901 | else if ( (!pPartial) && (RLV_FOLDER_PREFIX_HIDDEN != strName[0]) && (strName.find(strFolderName) != std::string::npos) ) | ||
1902 | pPartial = pFolder; // Found a partial (non-hidden) match, but we might still find an exact one (first partial match wins) | ||
1903 | } | ||
1904 | |||
1905 | return pPartial; | ||
1906 | } | ||
1907 | |||
1908 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0e | ||
1909 | LLViewerInventoryCategory* RlvHandler::getSharedFolder(const std::string& strPath) const | ||
1910 | { | ||
1911 | // Sanity check - no shared root => no shared folder | ||
1912 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(), *pFolder = pRlvRoot; | ||
1913 | if (!pRlvRoot) | ||
1914 | return NULL; | ||
1915 | |||
1916 | // Walk the path (starting at the root) | ||
1917 | boost_tokenizer tokens(strPath, boost::char_separator<char>("/", "", boost::drop_empty_tokens)); | ||
1918 | for (boost_tokenizer::const_iterator itToken = tokens.begin(); itToken != tokens.end(); ++itToken) | ||
1919 | { | ||
1920 | pFolder = getSharedFolder(pFolder->getUUID(), *itToken); | ||
1921 | if (!pFolder) | ||
1922 | return NULL; // No such folder | ||
1923 | } | ||
1924 | |||
1925 | return pFolder; // If strPath was empty or just a bunch of //// then: pFolder == pRlvRoot | ||
1926 | } | ||
1927 | |||
1928 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0g | ||
1929 | std::string RlvHandler::getSharedPath(const LLViewerInventoryCategory* pFolder) const | ||
1930 | { | ||
1931 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(); | ||
1932 | // Sanity check - no shared root or no folder => no path | ||
1933 | if ( (!pRlvRoot) || (!pFolder) || (pRlvRoot->getUUID() == pFolder->getUUID()) ) | ||
1934 | return std::string(); | ||
1935 | |||
1936 | const LLUUID& idRLV = pRlvRoot->getUUID(); | ||
1937 | const LLUUID& idRoot = gAgent.getInventoryRootID(); | ||
1938 | std::string strPath; | ||
1939 | |||
1940 | // Walk up the tree until we reach the top | ||
1941 | while (pFolder) | ||
1942 | { | ||
1943 | strPath = "/" + pFolder->getName() + strPath; | ||
1944 | |||
1945 | const LLUUID& idParent = pFolder->getParentUUID(); | ||
1946 | if (idRLV == idParent) // Reached the shared root, we're done | ||
1947 | break; | ||
1948 | else if (idRoot == idParent) // We reached the agent's inventory root (indicative of a logic error elsewhere) | ||
1949 | { | ||
1950 | RLV_ERRS << "Reached agent's inventory root while building path for shared folder" << LL_ENDL; | ||
1951 | return std::string(); | ||
1952 | } | ||
1953 | else | ||
1954 | pFolder = gInventory.getCategory(idParent); | ||
1955 | } | ||
1956 | |||
1957 | return strPath.erase(0, 1); | ||
1958 | } | ||
1959 | |||
1960 | // ============================================================================ | ||
1961 | // Composite folders | ||
1962 | // | ||
1963 | |||
1964 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
1965 | // Checked: | ||
1966 | bool RlvHandler::getCompositeInfo(const LLInventoryCategory* pFolder, std::string* pstrName) const | ||
1967 | { | ||
1968 | if (pFolder) | ||
1969 | { | ||
1970 | // Composite folder naming: ^\.?[Folder] | ||
1971 | const std::string& cstrFolder = pFolder->getName(); | ||
1972 | int idxStart = cstrFolder.find('['), idxEnd = cstrFolder.find(']', idxStart); | ||
1973 | if ( ((0 == idxStart) || (1 == idxStart)) && (idxEnd - idxStart > 1) ) | ||
1974 | { | ||
1975 | if (pstrName) | ||
1976 | pstrName->assign(cstrFolder.substr(idxStart + 1, idxEnd - idxStart - 1)); | ||
1977 | return true; | ||
1978 | } | ||
1979 | } | ||
1980 | return false; | ||
1981 | } | ||
1982 | |||
1983 | // Checked: | ||
1984 | bool RlvHandler::getCompositeInfo(const LLUUID& idItem, std::string* pstrName, LLViewerInventoryCategory** ppFolder) const | ||
1985 | { | ||
1986 | LLViewerInventoryCategory* pRlvRoot; LLViewerInventoryItem* pItem; | ||
1987 | |||
1988 | if ( (idItem.notNull()) && ((pRlvRoot = getSharedRoot()) != NULL) && | ||
1989 | (gInventory.isObjectDescendentOf(idItem, pRlvRoot->getUUID())) && ((pItem = gInventory.getItem(idItem)) != NULL) ) | ||
1990 | { | ||
1991 | // We know it's an item in a folder under the shared root... | ||
1992 | LLViewerInventoryCategory* pFolder = gInventory.getCategory(pItem->getParentUUID()); | ||
1993 | if (getAttachPoint(pFolder, true)) | ||
1994 | { | ||
1995 | // ... but it could be named ".(attachpt)" in which case we need its parent | ||
1996 | pFolder = gInventory.getCategory(pFolder->getParentUUID()); | ||
1997 | } | ||
1998 | |||
1999 | if ( (pFolder) && (getCompositeInfo(pFolder, pstrName)) ) | ||
2000 | { | ||
2001 | if (ppFolder) | ||
2002 | *ppFolder = pFolder; | ||
2003 | return true; | ||
2004 | } | ||
2005 | } | ||
2006 | return false; | ||
2007 | } | ||
2008 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
2009 | |||
2010 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_FOLDING | ||
2011 | // Checked: | ||
2012 | inline bool RlvHandler::isHiddenCompositeItem(const LLUUID& idItem, const std::string& cstrItemType) const | ||
2013 | { | ||
2014 | // An item that's part of a composite folder will be hidden from @getoutfit and @getattach if: | ||
2015 | // (1) the composite name specifies either a wearable layer or an attachment point | ||
2016 | // (2) the specified wearable layer or attachment point is worn and resides in the folder | ||
2017 | // (3) cstrItemType isn't the specified wearable layer or attach point | ||
2018 | // | ||
2019 | // Example: #RLV/Separates/Shoes/ChiChi Pumps/.[shoes] with items: "Shoe Base", "Shoe (left foot)" and "Shoe (right foot)" | ||
2020 | // -> as long as "Shoe Base" is worn, @getattach should not reflect "left foot", nor "right foot" | ||
2021 | std::string strComposite; LLViewerInventoryCategory* pFolder; | ||
2022 | EWearableType type; S32 idxAttachPt; | ||
2023 | if ( (getCompositeInfo(idItem, &strComposite, &pFolder)) && (cstrItemType != strComposite) ) | ||
2024 | { | ||
2025 | LLUUID idCompositeItem; | ||
2026 | if ((type = LLWearable::typeNameToType(strComposite)) != WT_INVALID) | ||
2027 | { | ||
2028 | idCompositeItem = gAgent.getWearableItem(type); | ||
2029 | } | ||
2030 | else if ((idxAttachPt = getAttachPointIndex(strComposite, true)) != 0) | ||
2031 | { | ||
2032 | LLVOAvatar* pAvatar; LLViewerJointAttachment* pAttachmentPt; | ||
2033 | if ( ((pAvatar = gAgent.getAvatarObject()) != NULL) && | ||
2034 | ((pAttachmentPt = get_if_there(pAvatar->mAttachmentPoints, idxAttachPt, (LLViewerJointAttachment*)NULL)) != NULL) ) | ||
2035 | { | ||
2036 | idCompositeItem = pAttachmentPt->getItemID(); | ||
2037 | } | ||
2038 | } | ||
2039 | |||
2040 | if ( (idCompositeItem.notNull()) && (gInventory.isObjectDescendentOf(idCompositeItem, pFolder->getUUID())) ) | ||
2041 | return true; | ||
2042 | } | ||
2043 | return false; | ||
2044 | } | ||
2045 | #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDING | ||
2046 | |||
2047 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2048 | // Checked: | ||
2049 | bool RlvHandler::canTakeOffComposite(const LLInventoryCategory* pFolder) const | ||
2050 | { | ||
2051 | if (!pFolder) // If there's no folder then there is nothing to take off | ||
2052 | return false; | ||
2053 | |||
2054 | LLInventoryModel::cat_array_t folders; | ||
2055 | LLInventoryModel::item_array_t items; | ||
2056 | RlvWearableItemCollector functor(pFolder->getUUID(), true, false); | ||
2057 | |||
2058 | // Grab a list of all the items @detachthis would be detaching/unwearing | ||
2059 | gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, functor); | ||
2060 | if (!items.count()) | ||
2061 | return false; // There are no wearable items in the folder so there is nothing to take off | ||
2062 | |||
2063 | LLViewerInventoryItem* pItem; | ||
2064 | for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++) | ||
2065 | { | ||
2066 | pItem = items.get(idxItem); | ||
2067 | |||
2068 | switch (pItem->getType()) | ||
2069 | { | ||
2070 | case LLAssetType::AT_CLOTHING: | ||
2071 | { | ||
2072 | LLWearable* pWearable = gAgent.getWearableFromWearableItem(pItem->getUUID()); | ||
2073 | if ( (pWearable) && (!isRemovable(pWearable->getType())) ) | ||
2074 | return false; // If one clothing layer in the composite folder is unremoveable then the entire folder is | ||
2075 | } | ||
2076 | break; | ||
2077 | case LLAssetType::AT_OBJECT: | ||
2078 | { | ||
2079 | LLVOAvatar* pAvatar; LLViewerObject* pObj; | ||
2080 | if ( ((pAvatar = gAgent.getAvatarObject()) != NULL) && | ||
2081 | ((pObj = pAvatar->getWornAttachment(pItem->getUUID())) != NULL) && (!isDetachable(pObj)) ) | ||
2082 | { | ||
2083 | return false; // If one attachment in the composite folder is undetachable then the entire folder is | ||
2084 | } | ||
2085 | } | ||
2086 | break; | ||
2087 | #ifdef LL_GNUC | ||
2088 | default: | ||
2089 | break; | ||
2090 | #endif // LL_GNUC | ||
2091 | } | ||
2092 | } | ||
2093 | return true; | ||
2094 | } | ||
2095 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2096 | |||
2097 | // ============================================================================ | ||
2098 | // Event handlers | ||
2099 | // | ||
2100 | |||
2101 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0d | ||
2102 | void RlvHandler::onForceDetach(const LLUUID& idObj, const std::string& strOption) const | ||
2103 | { | ||
2104 | U16 nParam; | ||
2105 | if (strOption.empty()) | ||
2106 | { | ||
2107 | // Simulate right-click / Take Off > Detach All | ||
2108 | LLAgent::userRemoveAllAttachments(NULL); | ||
2109 | } | ||
2110 | else if (m_AttachLookup.getExactMatchParam(strOption, nParam)) | ||
2111 | { | ||
2112 | // Simulate right-click / Take Off > Detach > ... | ||
2113 | LLVOAvatar* pAvatar; LLViewerJointAttachment* pAttachmentPt; | ||
2114 | if ( ((pAvatar = gAgent.getAvatarObject()) != NULL) && // Make sure we're actually wearing something on the attachment point | ||
2115 | ((pAttachmentPt = get_if_there(pAvatar->mAttachmentPoints, (S32)nParam, (LLViewerJointAttachment*)NULL)) != NULL) && | ||
2116 | (isStrippable(pAttachmentPt->getItemID())) ) // ... and that it's not marked as "nostrip" | ||
2117 | { | ||
2118 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
2119 | // If we're stripping something that's part of a composite folder then we should @detachthis instead | ||
2120 | if (isCompositeDescendent(pAttachmentPt->getItemID())) | ||
2121 | { | ||
2122 | std::string strCmd = "detachthis:" + strOption + "=force"; | ||
2123 | #ifdef RLV_DEBUG | ||
2124 | RLV_INFOS << "\t- '" << strOption << "' belongs to composite folder: @" << strCmd << LL_ENDL; | ||
2125 | #endif // RLV_DEBUG | ||
2126 | processForceCommand(idObj, RlvCommand(strCmd)); | ||
2127 | } | ||
2128 | else | ||
2129 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
2130 | { | ||
2131 | handle_detach_from_avatar(pAttachmentPt); | ||
2132 | } | ||
2133 | } | ||
2134 | } | ||
2135 | else | ||
2136 | { | ||
2137 | // Force detach single folder | ||
2138 | onForceWear(strOption, false, false); | ||
2139 | } | ||
2140 | } | ||
2141 | |||
2142 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0d | ||
2143 | void RlvHandler::onForceRemOutfit(const LLUUID& idObj, const std::string& strOption) const | ||
2144 | { | ||
2145 | EWearableType typeOption = LLWearable::typeNameToType(strOption), type; | ||
2146 | if ( (WT_INVALID == typeOption) && (!strOption.empty()) ) | ||
2147 | return; | ||
2148 | |||
2149 | // Before we had an option and optionless branch, but with the addition of composites and nostrip there's less duplication this way | ||
2150 | for (int idxType = 0; idxType < WT_COUNT; idxType++) | ||
2151 | { | ||
2152 | type = (EWearableType)idxType; | ||
2153 | if (LLAssetType::AT_CLOTHING != LLWearable::typeToAssetType(type)) | ||
2154 | continue; // Only strip clothing, not bodyparts | ||
2155 | |||
2156 | if ( ((typeOption == type) || (strOption.empty())) && (gAgent.getWearable(type)) && (isStrippable(gAgent.getWearableItem(type))) ) | ||
2157 | { | ||
2158 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
2159 | // If we're stripping something that's part of a composite folder then we should @detachthis instead | ||
2160 | if (isCompositeDescendent(gAgent.getWearableItem(type))) | ||
2161 | { | ||
2162 | std::string strCmd = "detachthis:" + LLWearable::typeToTypeName(type) + "=force"; | ||
2163 | #ifdef RLV_DEBUG | ||
2164 | RLV_INFOS << "\t- '" << LLWearable::typeToTypeName(type) << "' is composite descendent: @" << strCmd << LL_ENDL; | ||
2165 | #endif // RLV_DEBUG | ||
2166 | processForceCommand(idObj, RlvCommand(strCmd)); | ||
2167 | } | ||
2168 | else | ||
2169 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
2170 | { | ||
2171 | gAgent.removeWearable(type); | ||
2172 | } | ||
2173 | } | ||
2174 | } | ||
2175 | } | ||
2176 | |||
2177 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0g | ||
2178 | bool RlvHandler::onForceSit(const LLUUID& idObj, const std::string& strOption) const | ||
2179 | { | ||
2180 | LLViewerObject* pObject = NULL; LLUUID idTarget(strOption); | ||
2181 | // Sanity checking - we need to know about the object and it should identify a prim/linkset | ||
2182 | if ( (idTarget.isNull()) || ((pObject = gObjectList.findObject(idTarget)) == NULL) || (LL_PCODE_VOLUME != pObject->getPCode()) ) | ||
2183 | return false; | ||
2184 | |||
2185 | // Don't force sit if: | ||
2186 | // 1) currently sitting and prevented from standing up | ||
2187 | // 2) prevented from sitting | ||
2188 | // 3) @sittp=n restricted (except if @sittp=n was issued by the same prim that's currently force sitting the avie) | ||
2189 | if ( ( (hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) && (gAgent.getAvatarObject()->mIsSitting) ) || | ||
2190 | ( (hasBehaviour(RLV_BHVR_SIT)) ) || | ||
2191 | ( (hasBehaviourExcept(RLV_BHVR_SITTP, idObj)) && | ||
2192 | (dist_vec_squared(gAgent.getPositionGlobal(), pObject->getPositionGlobal()) > 1.5f * 1.5f) )) | ||
2193 | { | ||
2194 | return false; | ||
2195 | } | ||
2196 | |||
2197 | // Copy/paste from handle_sit_or_stand() [see http://wiki.secondlife.com/wiki/AgentRequestSit] | ||
2198 | gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); | ||
2199 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | ||
2200 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
2201 | gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
2202 | gMessageSystem->nextBlockFast(_PREHASH_TargetObject); | ||
2203 | gMessageSystem->addUUIDFast(_PREHASH_TargetID, pObject->mID); | ||
2204 | // Offset: "a rough position in local coordinates for the edge to sit on" | ||
2205 | // (we might not even be looking at the object so I don't think we can supply the offset to an edge) | ||
2206 | gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3::zero); | ||
2207 | pObject->getRegion()->sendReliableMessage(); | ||
2208 | |||
2209 | return true; | ||
2210 | } | ||
2211 | |||
2212 | void RlvHandler::onForceWear(const std::string& strPath, bool fAttach, bool fMatchAll) const | ||
2213 | { | ||
2214 | // See LLWearableBridge::wearOnAvatar(): don't wear anything until initial wearables are loaded, can destroy clothing items | ||
2215 | if (!gAgent.areWearablesLoaded()) | ||
2216 | return; | ||
2217 | |||
2218 | LLViewerInventoryCategory* pFolder = getSharedFolder(strPath); | ||
2219 | if (!pFolder) // Folder not found = nothing to attach | ||
2220 | return; | ||
2221 | |||
2222 | LLInventoryModel::cat_array_t folders; | ||
2223 | LLInventoryModel::item_array_t items; | ||
2224 | RlvWearableItemCollector functor(pFolder->getUUID(), fAttach, fMatchAll); | ||
2225 | |||
2226 | // Grab a list of all the items we'll be wearing/attaching | ||
2227 | gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, functor); | ||
2228 | |||
2229 | LLViewerInventoryItem* pItem; | ||
2230 | for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++) | ||
2231 | { | ||
2232 | pItem = items.get(idxItem); | ||
2233 | |||
2234 | switch (pItem->getType()) | ||
2235 | { | ||
2236 | case LLAssetType::AT_CLOTHING: | ||
2237 | case LLAssetType::AT_BODYPART: | ||
2238 | { | ||
2239 | LLWearable* pWearable = gAgent.getWearableFromWearableItem(pItem->getUUID()); | ||
2240 | |||
2241 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2242 | // If we're already wearing something on this layer then we have to check if it isn't part of a composite | ||
2243 | // folder that has at least one unremovable item (in which case we can't wear or remove this item) | ||
2244 | LLViewerInventoryCategory* pCompositeFolder; | ||
2245 | if ( (!pWearable) || (!getCompositeInfo(pItem->getUUID(), NULL, &pCompositeFolder)) || | ||
2246 | (canTakeOffComposite(pFolder))) | ||
2247 | { | ||
2248 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2249 | if (fAttach) | ||
2250 | { | ||
2251 | // Simulate wearing a clothing item from inventory (right click / "Wear") | ||
2252 | // LLWearableBridge::performAction() => LLWearableBridge::wearOnAvatar() => wear_inventory_item_on_avatar() | ||
2253 | wear_inventory_item_on_avatar(pItem); | ||
2254 | } | ||
2255 | else | ||
2256 | { | ||
2257 | if ( (pWearable) && (LLAssetType::AT_CLOTHING == pItem->getType()) ) | ||
2258 | gAgent.removeWearable(pWearable->getType()); | ||
2259 | } | ||
2260 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2261 | } | ||
2262 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2263 | } | ||
2264 | break; | ||
2265 | case LLAssetType::AT_OBJECT: | ||
2266 | { | ||
2267 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
2268 | LLViewerObject* pObj; | ||
2269 | |||
2270 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2271 | // If we're already wearing something on this attach point then we have to check if it isn't part of a composite | ||
2272 | // folder that has at least one unremovable item (in which case we can't attach or detach this item) | ||
2273 | LLViewerInventoryCategory* pCompositeFolder; | ||
2274 | if ( (pAvatar) && | ||
2275 | ( ((pObj = pAvatar->getWornAttachment(pItem->getUUID())) == NULL) || | ||
2276 | (!getCompositeInfo(pItem->getUUID(), NULL, &pCompositeFolder)) || (canTakeOffComposite(pFolder)) ) ) | ||
2277 | { | ||
2278 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2279 | if (fAttach) | ||
2280 | { | ||
2281 | // Simulate wearing an object to a specific attachment point (copy/paste to suppress replacement dialog) | ||
2282 | // LLAttachObject::handleEvent() => rez_attachment() | ||
2283 | LLViewerJointAttachment* pAttachPt = getAttachPoint(pItem, true); | ||
2284 | if ( (pAttachPt) && (isDetachable(pAttachPt)) ) | ||
2285 | { | ||
2286 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
2287 | LLAttachmentRezAction* rez_action = new LLAttachmentRezAction; | ||
2288 | rez_action->mItemID = pItem->getUUID(); | ||
2289 | rez_action->mAttachPt = getAttachPointIndex(pAttachPt->getName(), true); | ||
2290 | |||
2291 | confirm_replace_attachment_rez(0/*YES*/, (void*)rez_action); // (Will call delete on rez_action) | ||
2292 | #else // Version: 1.23.4 | ||
2293 | LLSD payload; | ||
2294 | payload["item_id"] = pItem->getUUID(); | ||
2295 | payload["attachment_point"] = getAttachPointIndex(pAttachPt->getName(), true); | ||
2296 | |||
2297 | LLNotifications::instance().forceResponse( | ||
2298 | LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/); | ||
2299 | #endif | ||
2300 | } | ||
2301 | } | ||
2302 | else | ||
2303 | { | ||
2304 | if ( (pAvatar) && ((pObj = pAvatar->getWornAttachment(pItem->getUUID())) != NULL) ) | ||
2305 | { | ||
2306 | LLViewerJointAttachment* pAttachment = pAvatar->getTargetAttachmentPoint(pObj); | ||
2307 | if (pAttachment) | ||
2308 | handle_detach_from_avatar(pAttachment); | ||
2309 | } | ||
2310 | } | ||
2311 | #ifdef RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2312 | } | ||
2313 | #endif // RLV_EXPERIMENTAL_COMPOSITE_LOCKING | ||
2314 | } | ||
2315 | break; | ||
2316 | #ifdef LL_GNUC | ||
2317 | default: | ||
2318 | break; | ||
2319 | #endif // LL_GNUC | ||
2320 | } | ||
2321 | } | ||
2322 | } | ||
2323 | |||
2324 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-0.2.0g | ||
2325 | bool RlvHandler::onGetPath(const LLUUID &uuid, const std::string& strOption, std::string& strReply) const | ||
2326 | { | ||
2327 | // Sanity check - no need to go through all this trouble if we don't have a shared root | ||
2328 | LLViewerInventoryCategory* pRlvRoot = getSharedRoot(); | ||
2329 | if (!pRlvRoot) | ||
2330 | return false; | ||
2331 | |||
2332 | LLUUID idItem; | ||
2333 | |||
2334 | // <option> can be a clothing layer | ||
2335 | EWearableType layerType = LLWearable::typeNameToType(strOption); | ||
2336 | if (WT_INVALID != layerType) | ||
2337 | { | ||
2338 | idItem = gAgent.getWearableItem(layerType); | ||
2339 | } | ||
2340 | else | ||
2341 | { | ||
2342 | LLViewerJointAttachment* pAttachPt = NULL; | ||
2343 | |||
2344 | // ... or it can be empty | ||
2345 | if (strOption.empty()) | ||
2346 | { | ||
2347 | // (in which case we act on the object that issued the command) | ||
2348 | LLViewerObject* pObj = gObjectList.findObject(uuid); | ||
2349 | if ( (pObj) && (pObj->isAttachment()) && (gAgent.getAvatarObject()) ) | ||
2350 | pAttachPt = gAgent.getAvatarObject()->getTargetAttachmentPoint(pObj); | ||
2351 | } | ||
2352 | else | ||
2353 | { | ||
2354 | // ... or it can specify an attach point | ||
2355 | pAttachPt = getAttachPoint(strOption, true); | ||
2356 | } | ||
2357 | |||
2358 | // If we found something, get its inventory item UUID | ||
2359 | if (pAttachPt) | ||
2360 | idItem = pAttachPt->getItemID(); | ||
2361 | } | ||
2362 | |||
2363 | // If we found something and it's under the shared root, then get its path | ||
2364 | if ( (!idItem.isNull()) && (gInventory.isObjectDescendentOf(idItem, pRlvRoot->getUUID())) ) | ||
2365 | { | ||
2366 | LLInventoryItem* pItem = gInventory.getItem(idItem); | ||
2367 | if (pItem) | ||
2368 | { | ||
2369 | // ... unless the containing folder's name specifies an attach point (or nostrip) in which case we need its parent | ||
2370 | LLViewerInventoryCategory* pFolder = gInventory.getCategory(pItem->getParentUUID()); | ||
2371 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
2372 | if ( (getAttachPoint(pFolder, true)) || (pFolder->getName() == ".("RLV_FOLDER_FLAG_NOSTRIP")") ) | ||
2373 | #else | ||
2374 | if (getAttachPoint(pFolder, true)) | ||
2375 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
2376 | strReply = getSharedPath(pFolder->getParentUUID()); | ||
2377 | else | ||
2378 | strReply = getSharedPath(pFolder); | ||
2379 | } | ||
2380 | } | ||
2381 | return !strReply.empty(); | ||
2382 | } | ||
2383 | |||
2384 | struct rlv_wear_info { U32 cntWorn, cntTotal, cntChildWorn, cntChildTotal; }; | ||
2385 | |||
2386 | // Checked: 2009-05-30 (RLVa-0.2.0e) | Modified: RLVa-0.2.0e | ||
2387 | void RlvHandler::onGetInvWorn(const std::string& strPath, std::string& strReply) const | ||
2388 | { | ||
2389 | // Sanity check - getAvatarObject() can't be NULL [see rlvIsWearingItem()] and the folder should exist and not be hidden | ||
2390 | LLViewerInventoryCategory* pFolder = getSharedFolder(strPath); | ||
2391 | if ((!gAgent.getAvatarObject()) || (!pFolder) || (pFolder->getName().empty()) || (RLV_FOLDER_PREFIX_HIDDEN == pFolder->getName()[0])) | ||
2392 | return; | ||
2393 | |||
2394 | // Collect everything @attachall would be attaching | ||
2395 | LLInventoryModel::cat_array_t folders; | ||
2396 | LLInventoryModel::item_array_t items; | ||
2397 | RlvWearableItemCollector functor(pFolder->getUUID(), true, true); | ||
2398 | gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, functor); | ||
2399 | |||
2400 | rlv_wear_info wi = {0}; | ||
2401 | |||
2402 | // Add all the folders to a lookup map | ||
2403 | std::map<LLUUID, rlv_wear_info> mapFolders; | ||
2404 | mapFolders.insert(std::pair<LLUUID, rlv_wear_info>(pFolder->getUUID(), wi)); | ||
2405 | for (S32 idxFolder = 0, cntFolder = folders.count(); idxFolder < cntFolder; idxFolder++) | ||
2406 | mapFolders.insert(std::pair<LLUUID, rlv_wear_info>(folders.get(idxFolder)->getUUID(), wi)); | ||
2407 | |||
2408 | // Iterate over all the found items | ||
2409 | LLViewerInventoryItem* pItem; std::map<LLUUID, rlv_wear_info>::iterator itFolder; | ||
2410 | for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++) | ||
2411 | { | ||
2412 | pItem = items.get(idxItem); | ||
2413 | |||
2414 | // The "folded parent" is the folder this item should be considered a direct descendent of (may or may not match actual parent) | ||
2415 | const LLUUID& idParent = functor.getFoldedParent(pItem->getParentUUID()); | ||
2416 | |||
2417 | // Walk up the tree: sooner or later one of the parents will be a folder in the map | ||
2418 | LLViewerInventoryCategory* pParent = gInventory.getCategory(idParent); | ||
2419 | while ( (itFolder = mapFolders.find(pParent->getUUID())) == mapFolders.end() ) | ||
2420 | pParent = gInventory.getCategory(pParent->getParentUUID()); | ||
2421 | |||
2422 | U32 &cntWorn = (idParent == pParent->getUUID()) ? itFolder->second.cntWorn : itFolder->second.cntChildWorn, | ||
2423 | &cntTotal = (idParent == pParent->getUUID()) ? itFolder->second.cntTotal : itFolder->second.cntChildTotal; | ||
2424 | |||
2425 | if (rlvIsWearingItem(pItem)) | ||
2426 | cntWorn++; | ||
2427 | cntTotal++; | ||
2428 | } | ||
2429 | |||
2430 | // Extract the result for the main folder | ||
2431 | itFolder = mapFolders.find(pFolder->getUUID()); | ||
2432 | wi.cntWorn = itFolder->second.cntWorn; | ||
2433 | wi.cntTotal = itFolder->second.cntTotal; | ||
2434 | mapFolders.erase(itFolder); | ||
2435 | |||
2436 | // Build the result for each child folder | ||
2437 | for (itFolder = mapFolders.begin(); itFolder != mapFolders.end(); ++itFolder) | ||
2438 | { | ||
2439 | rlv_wear_info& wiFolder = itFolder->second; | ||
2440 | |||
2441 | wi.cntChildWorn += wiFolder.cntWorn + wiFolder.cntChildWorn; | ||
2442 | wi.cntChildTotal += wiFolder.cntTotal + wiFolder.cntChildTotal; | ||
2443 | |||
2444 | strReply += llformat(",%s|%d%d", gInventory.getCategory(itFolder->first)->getName().c_str(), | ||
2445 | (0 == wiFolder.cntTotal) ? 0 : (0 == wiFolder.cntWorn) ? 1 : (wiFolder.cntWorn != wiFolder.cntTotal) ? 2 : 3, | ||
2446 | (0 == wiFolder.cntChildTotal) ? 0 : (0 == wiFolder.cntChildWorn) ? 1 : (wiFolder.cntChildWorn != wiFolder.cntChildTotal) ? 2 : 3 | ||
2447 | ); | ||
2448 | } | ||
2449 | |||
2450 | // Now just prepend the root and done | ||
2451 | strReply = llformat("|%d%d", (0 == wi.cntTotal) ? 0 : (0 == wi.cntWorn) ? 1 : (wi.cntWorn != wi.cntTotal) ? 2 : 3, | ||
2452 | (0 == wi.cntChildTotal) ? 0 : (0 == wi.cntChildWorn) ? 1 : (wi.cntChildWorn != wi.cntChildTotal) ? 2: 3) + strReply; | ||
2453 | } | ||
2454 | |||
2455 | // (In case anyone cares: this isn't used in public builds) | ||
2456 | bool RlvHandler::getWornInfo(const LLInventoryCategory* pFolder, U8& wiFolder, U8& wiChildren) const | ||
2457 | { | ||
2458 | // Sanity check - getAvatarObject() can't be NULL [see rlvIsWearingItem()] and the folder should exist and not be hidden | ||
2459 | if ((!gAgent.getAvatarObject()) || (!pFolder) || (pFolder->getName().empty()) || (RLV_FOLDER_PREFIX_HIDDEN == pFolder->getName()[0])) | ||
2460 | return false; | ||
2461 | |||
2462 | LLInventoryModel::cat_array_t folders; | ||
2463 | LLInventoryModel::item_array_t items; | ||
2464 | RlvWearableItemCollector functor(pFolder->getUUID(), true, true); | ||
2465 | gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, functor); | ||
2466 | |||
2467 | LLViewerInventoryItem* pItem; | ||
2468 | U32 cntWorn = 0, cntTotal = 0, cntChildWorn = 0, cntChildTotal = 0; | ||
2469 | for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++) | ||
2470 | { | ||
2471 | pItem = items.get(idxItem); | ||
2472 | |||
2473 | bool fDirectDescendent = (pFolder->getUUID() == functor.getFoldedParent(pItem->getParentUUID())); | ||
2474 | U32 &refWorn = (fDirectDescendent) ? cntWorn : cntChildWorn, &refTotal = (fDirectDescendent) ? cntTotal : cntChildTotal; | ||
2475 | |||
2476 | if (rlvIsWearingItem(pItem)) | ||
2477 | refWorn++; | ||
2478 | refTotal++; | ||
2479 | } | ||
2480 | |||
2481 | wiFolder = (0 == cntTotal + cntChildTotal) ? 0 : (0 == cntWorn + cntChildWorn) ? 1 : | ||
2482 | (cntWorn + cntChildWorn != cntTotal + cntChildTotal) ? 2 : 3; | ||
2483 | wiChildren = (0 == cntChildTotal) ? 0 : (0 == cntChildWorn) ? 1 : (cntChildWorn != cntChildTotal) ? 2 : 3; | ||
2484 | |||
2485 | return true; | ||
2486 | } | ||
2487 | |||
2488 | // ============================================================================ | ||
2489 | // Initialization helper functions | ||
2490 | // | ||
2491 | |||
2492 | BOOL RlvHandler::setEnabled(BOOL fEnable) | ||
2493 | { | ||
2494 | if (m_fEnabled == fEnable) | ||
2495 | return fEnable; | ||
2496 | |||
2497 | if (fEnable) | ||
2498 | { | ||
2499 | if (gSavedSettings.controlExists(RLV_SETTING_NOSETENV)) | ||
2500 | fNoSetEnv = gSavedSettings.getBOOL(RLV_SETTING_NOSETENV); | ||
2501 | if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING)) | ||
2502 | fLegacyNaming = gSavedSettings.getBOOL(RLV_SETTING_ENABLELEGACYNAMING); | ||
2503 | if (gSavedSettings.controlExists(RLV_SETTING_SHOWNAMETAGS)) | ||
2504 | RlvSettings::fShowNameTags = gSavedSettings.getBOOL(RLV_SETTING_SHOWNAMETAGS); | ||
2505 | |||
2506 | RlvCommand::initLookupTable(); | ||
2507 | gRlvHandler.addObserver(new RlvExtGetSet()); | ||
2508 | |||
2509 | if (LLStartUp::getStartupState() >= STATE_CLEANUP) | ||
2510 | fetchSharedInventory(); | ||
2511 | |||
2512 | m_fEnabled = TRUE; | ||
2513 | } | ||
2514 | else if (canDisable()) | ||
2515 | { | ||
2516 | #ifdef RLV_DEBUG | ||
2517 | RLV_INFOS << "Disabling RLV:" << LL_ENDL; | ||
2518 | #endif // RLV_DEBUG | ||
2519 | |||
2520 | gRlvHandler.clearState(); | ||
2521 | |||
2522 | #ifdef RLV_DEBUG | ||
2523 | RLV_INFOS << "\t--> RLV disabled" << LL_ENDL; | ||
2524 | #endif // RLV_DEBUG | ||
2525 | |||
2526 | m_fEnabled = FALSE; | ||
2527 | } | ||
2528 | |||
2529 | #ifdef RLV_ADVANCED_MENU | ||
2530 | // RELEASE-RLVa: LL defines CLIENT_MENU_NAME but we can't get to it from here so we need to keep those two in sync manually | ||
2531 | LLMenuGL* pClientMenu = NULL; | ||
2532 | if ( (gMenuBarView) && ((pClientMenu = gMenuBarView->getChildMenuByName("Advanced", FALSE)) != NULL) ) | ||
2533 | { | ||
2534 | pClientMenu->setItemVisible("RLVa", m_fEnabled); | ||
2535 | pClientMenu->setItemEnabled("RLVa", m_fEnabled); | ||
2536 | } | ||
2537 | #endif // RLV_ADVANCED_MENU | ||
2538 | |||
2539 | return m_fEnabled; // Return enabled/disabled state | ||
2540 | } | ||
2541 | |||
2542 | BOOL RlvHandler::canDisable() | ||
2543 | { | ||
2544 | return FALSE; | ||
2545 | } | ||
2546 | |||
2547 | void RlvHandler::clearState() | ||
2548 | { | ||
2549 | // TODO-RLVa: should restore all RLV controlled debug variables to their defaults | ||
2550 | |||
2551 | // Issue @clear on behalf of every object that has a currently active RLV restriction (even if it's just an exception) | ||
2552 | LLUUID idObj; LLViewerObject* pObj; bool fDetachable; | ||
2553 | while (m_Objects.size()) | ||
2554 | { | ||
2555 | idObj = m_Objects.begin()->first; // Need a copy since after @clear the data it points to will no longer exist | ||
2556 | fDetachable = ((pObj = gObjectList.findObject(idObj)) != NULL) ? isDetachable(pObj) : true; | ||
2557 | |||
2558 | processCommand(idObj, "clear", false); | ||
2559 | if (!fDetachable) | ||
2560 | processCommand(idObj, "detachme=force", false); | ||
2561 | } | ||
2562 | |||
2563 | // Sanity check - these should all be empty after we issue @clear on the last object | ||
2564 | if ( (!m_Objects.empty()) || !(m_Exceptions.empty()) || (!m_Attachments.empty()) ) | ||
2565 | { | ||
2566 | RLV_ERRS << "Object, exception or attachment map not empty after clearing state!" << LL_ENDL; | ||
2567 | m_Objects.clear(); | ||
2568 | m_Exceptions.clear(); | ||
2569 | m_Attachments.clear(); | ||
2570 | } | ||
2571 | |||
2572 | // These all need manual clearing | ||
2573 | memset(m_LayersAdd, 0, sizeof(S16) * WT_COUNT); | ||
2574 | memset(m_LayersRem, 0, sizeof(S16) * WT_COUNT); | ||
2575 | memset(m_Behaviours, 0, sizeof(S16) * RLV_BHVR_COUNT); | ||
2576 | m_AttachPending.clear(); | ||
2577 | m_Emitter.clearObservers(); // <- calls delete on all active observers | ||
2578 | |||
2579 | // Clear dynamically allocated memory | ||
2580 | if (m_pGCTimer) | ||
2581 | { | ||
2582 | delete m_pGCTimer; | ||
2583 | m_pGCTimer = NULL; | ||
2584 | } | ||
2585 | if (m_pWLSnapshot) | ||
2586 | { | ||
2587 | delete m_pWLSnapshot; | ||
2588 | m_pWLSnapshot = NULL; | ||
2589 | } | ||
2590 | } | ||
2591 | |||
2592 | // ============================================================================ | ||
diff --git a/linden/indra/newview/rlvhandler.h b/linden/indra/newview/rlvhandler.h new file mode 100644 index 0000000..5295a72 --- /dev/null +++ b/linden/indra/newview/rlvhandler.h | |||
@@ -0,0 +1,445 @@ | |||
1 | #ifndef RLV_HANDLER_H | ||
2 | #define RLV_HANDLER_H | ||
3 | |||
4 | #include "llagentconstants.h" | ||
5 | #include "llappviewer.h" | ||
6 | #include "llformat.h" | ||
7 | #include "llversionviewer.h" | ||
8 | #include "llviewerjointattachment.h" | ||
9 | #include "llviewerobject.h" | ||
10 | #include "llwearable.h" | ||
11 | |||
12 | #include "rlvhelper.h" | ||
13 | #include "rlvevent.h" | ||
14 | #include "rlvmultistringsearch.h" | ||
15 | |||
16 | // ============================================================================ | ||
17 | |||
18 | typedef std::map<LLUUID, RlvObject> rlv_object_map_t; | ||
19 | typedef std::multimap<S32, LLUUID> rlv_detach_map_t; | ||
20 | typedef std::map<S32, LLUUID> rlv_reattach_map_t; | ||
21 | typedef std::multimap<ERlvBehaviour, RlvException> rlv_exception_map_t; | ||
22 | |||
23 | class RlvHandler | ||
24 | { | ||
25 | public: | ||
26 | RlvHandler(); | ||
27 | ~RlvHandler(); | ||
28 | |||
29 | // -------------------------------- | ||
30 | |||
31 | /* | ||
32 | * Attachment point helper functions | ||
33 | */ | ||
34 | public: | ||
35 | // Returns a pointer to the attachment point for a supplied parameter | ||
36 | LLViewerJointAttachment* getAttachPoint(const std::string& strText, bool fExact) const; | ||
37 | LLViewerJointAttachment* getAttachPoint(const LLInventoryItem* pItem, bool fStrict) const; | ||
38 | LLViewerJointAttachment* getAttachPoint(const LLInventoryCategory* pFolder, bool fStrict) const; | ||
39 | LLViewerJointAttachment* getAttachPointLegacy(const LLInventoryCategory* pFolder) const; | ||
40 | S32 getAttachPointIndex(std::string strText, bool fExact) const; | ||
41 | S32 getAttachPointIndex(LLViewerObject* pObj) const; | ||
42 | S32 getAttachPointIndex(const LLViewerJointAttachment* pObj) const; | ||
43 | bool hasAttachPointName(const LLInventoryItem* pItem, bool fStrict) const; | ||
44 | |||
45 | // -------------------------------- | ||
46 | |||
47 | /* | ||
48 | * Rule checking functions | ||
49 | */ | ||
50 | // NOTE: - to check @detach=n -> hasLockedAttachment() / hasLockedHUD() / isDetachable() | ||
51 | // - to check exceptions -> isException() | ||
52 | // - to check @addoutfit=n -> isWearable() | ||
53 | // - to check @remoutfit=n -> isRemovable() | ||
54 | public: | ||
55 | // Returns TRUE is at least one object contains the specified behaviour (and optional option) | ||
56 | bool hasBehaviour(ERlvBehaviour eBehaviour) const { return (eBehaviour < RLV_BHVR_COUNT) ? (0 != m_Behaviours[eBehaviour]) : false; } | ||
57 | bool hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption) const; | ||
58 | // Returns TRUE if at least one object (except the specified one) contains the specified behaviour (and optional option) | ||
59 | bool hasBehaviourExcept(ERlvBehaviour eBehaviour, const LLUUID& idObj) const; | ||
60 | bool hasBehaviourExcept(ERlvBehaviour eBehaviour, const std::string& strOption, const LLUUID& idObj) const; | ||
61 | |||
62 | // Returns TRUE if there is at least 1 non-detachable attachment | ||
63 | bool hasLockedAttachment() const { return (0 != m_Attachments.size()); } | ||
64 | // Returns TRUE if there is at least 1 non-detachable HUD attachment | ||
65 | bool hasLockedHUD() const; | ||
66 | // Returns TRUE if the specified attachment point is detachable | ||
67 | bool isDetachable(S32 idxAttachPt) const { return (idxAttachPt) && (m_Attachments.find(idxAttachPt) == m_Attachments.end()); } | ||
68 | bool isDetachable(const LLInventoryItem* pItem) const; | ||
69 | bool isDetachable(LLViewerJointAttachment* pAttachPt) const; | ||
70 | bool isDetachable(LLViewerObject* pObj) const; | ||
71 | // Returns TRUE if the specified attachment point is set non-detachable by anything other than pObj (or one of its children) | ||
72 | bool isDetachableExcept(S32 idxAttachPt, LLViewerObject* pObj) const; | ||
73 | // Marks the specified attachment point as (non-)detachable (return value indicates success ; used by unit tests) | ||
74 | bool setDetachable(S32 idxAttachPt, const LLUUID& idRlvObj, bool fDetachable); | ||
75 | bool setDetachable(LLViewerObject* pObj, const LLUUID& idRlvObj, bool fDetachable); | ||
76 | |||
77 | // Adds or removes an exception for the specified behaviour | ||
78 | void addException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& varOption); | ||
79 | void removeException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& varOption); | ||
80 | // Returns TRUE if the specified option was added as an exception for the specified behaviour | ||
81 | bool isException(ERlvBehaviour eBhvr, const RlvExceptionOption& varOption, ERlvExceptionCheck typeCheck = RLV_CHECK_DEFAULT) const; | ||
82 | // Returns TRUE if the specified behaviour should behave "permissive" (rather than "strict"/"secure") | ||
83 | bool isPermissive(ERlvBehaviour eBhvr) const; | ||
84 | |||
85 | // Returns TRUE if the specified layer is removable (use hasBehaviour(RLV_BHVR_REMOUTFIT) for the general case) | ||
86 | bool isRemovable(EWearableType type) const { return (type < WT_COUNT) ? (0 == m_LayersRem[type]) : true; } | ||
87 | // Returns TRUE if the specified layer is not remoutfit blocked by any object (except the one specified by UUID) | ||
88 | bool isRemovableExcept(EWearableType type, const LLUUID& idObj) const; | ||
89 | // Returns TRUE if the inventory item is strippable by @detach or @remoutfit | ||
90 | bool isStrippable(const LLUUID& idItem) const; | ||
91 | // Returns TRUE if the specified layer is wearable (use hasBehaviour(RLV_BHVR_ADDOUTFIT) for the general case) | ||
92 | bool isWearable(EWearableType type) const { return (type < WT_COUNT) ? (0 == m_LayersAdd[type]) : true; } | ||
93 | |||
94 | // Returns TRUE if the composite folder doesn't contain any "locked" items | ||
95 | bool canTakeOffComposite(const LLInventoryCategory* pFolder) const; | ||
96 | // Returns TRUE if the folder is a composite folder and optionally returns the name | ||
97 | bool getCompositeInfo(const LLInventoryCategory* pFolder, std::string* pstrName) const; | ||
98 | // Returns TRUE if the inventory item belongs to a composite folder and optionally returns the name and composite folder | ||
99 | bool getCompositeInfo(const LLUUID& idItem, std::string* pstrName, LLViewerInventoryCategory** ppFolder) const; | ||
100 | // Returns TRUE if the folder is a composite folder | ||
101 | bool isCompositeFolder(const LLInventoryCategory* pFolder) const; | ||
102 | // Returns TRUE if the inventory item belongs to a composite folder | ||
103 | bool isCompositeDescendent(const LLUUID& idItem) const; | ||
104 | // Returns TRUE if the inventory item is part of a folded composite folder and should be hidden from @getoufit or @getattach | ||
105 | bool isHiddenCompositeItem(const LLUUID& idItem, const std::string& strItemType) const; | ||
106 | |||
107 | // -------------------------------- | ||
108 | |||
109 | /* | ||
110 | * Helper functions | ||
111 | */ | ||
112 | public: | ||
113 | // Accessors | ||
114 | bool getCanCancelTp() const { return m_fCanCancelTp; } // @accepttp and @tpto | ||
115 | void setCanCancelTp(bool fAllow) { m_fCanCancelTp = fAllow; } // @accepttp and @tpto | ||
116 | |||
117 | // Command specific helper functions | ||
118 | bool canShowHoverText(LLViewerObject* pObj) const; // @showhovertext* command family | ||
119 | void filterChat(std::string& strUTF8Text, bool fFilterEmote) const; // @sendchat, @recvchat and @redirchat | ||
120 | void filterLocation(std::string& strUTF8Text) const; // @showloc | ||
121 | void filterNames(std::string& strUTF8Text) const; // @shownames | ||
122 | const std::string& getAnonym(const std::string& strName) const; // @shownames | ||
123 | std::string getVersionString() const; // @version | ||
124 | std::string getVersionNumString() const; // @versionnum | ||
125 | BOOL isAgentNearby(const LLUUID& uuid) const; // @shownames | ||
126 | bool redirectChatOrEmote(const std::string& strUTF8Test) const; // @redirchat and @rediremote | ||
127 | |||
128 | // Command processing helper functions | ||
129 | BOOL processCommand(const LLUUID& idObj, const std::string& strCommand, bool fFromObj); | ||
130 | void processRetainedCommands(); | ||
131 | void retainCommand(const std::string& strObj, const LLUUID& idObj, const std::string& strCmd); | ||
132 | |||
133 | // Returns a pointer to the currently executing command (do *not* save this pointer) | ||
134 | const RlvCommand* getCurrentCommand() const { return m_pCurCommand; } | ||
135 | // Returns the UUID of the object we're currently executing a command for | ||
136 | const LLUUID& getCurrentObject() const { return m_idCurObject; } | ||
137 | |||
138 | // Initialization | ||
139 | static BOOL canDisable(); | ||
140 | static BOOL isEnabled() { return m_fEnabled; } | ||
141 | static void initLookupTables(); | ||
142 | static BOOL setEnabled(BOOL fEnable); | ||
143 | protected: | ||
144 | void clearState(); | ||
145 | |||
146 | // -------------------------------- | ||
147 | |||
148 | /* | ||
149 | * Inventory related functions | ||
150 | */ | ||
151 | public: | ||
152 | // Starts a fetch of everything under the shared root (if there is one) | ||
153 | static void fetchSharedInventory(); | ||
154 | // Returns the path of the supplied folder (relative to the shared root) | ||
155 | std::string getSharedPath(const LLViewerInventoryCategory* pFolder) const; | ||
156 | std::string getSharedPath(const LLUUID& idFolder) const; | ||
157 | // Returns a pointer to the shared root folder (if there is one) | ||
158 | static LLViewerInventoryCategory* getSharedRoot(); | ||
159 | // A "folded folder" is a folder whose items logically belong to the grandparent rather than the parent | ||
160 | bool isFoldedFolder(const LLInventoryCategory* pFolder, bool fAttach) const; | ||
161 | bool isFoldedFolderLegacy(const LLInventoryCategory* pFolder, bool fAttach) const; | ||
162 | protected: | ||
163 | // Find all folders that match a supplied criteria (clears the supplied array) | ||
164 | bool findSharedFolders(const std::string& strCriteria, LLInventoryModel::cat_array_t& folders) const; | ||
165 | |||
166 | // Returns a subfolder of idParent that starts with name (exact match > partial match) | ||
167 | LLViewerInventoryCategory* getSharedFolder(const LLUUID& idParent, const std::string& strName) const; | ||
168 | // Looks up a folder from a path (relative to the shared root) | ||
169 | LLViewerInventoryCategory* getSharedFolder(const std::string& strPath) const; | ||
170 | |||
171 | bool getWornInfo(const LLInventoryCategory* pFolder, U8& wiFolder, U8& wiChildren) const; | ||
172 | |||
173 | // -------------------------------- | ||
174 | |||
175 | /* | ||
176 | * Event handling (forwards to registered observers if we don't handle the command) | ||
177 | */ | ||
178 | public: | ||
179 | BOOL addObserver(RlvObserver* pObserver) { return m_Emitter.addObserver(pObserver); } | ||
180 | BOOL removeObserver(RlvObserver* pObserver) { return m_Emitter.remObserver(pObserver); } | ||
181 | void addBehaviourObserver(RlvBehaviourObserver* pBhvrObserver); | ||
182 | void removeBehaviourObserver(RlvBehaviourObserver* pBhvrObserver); | ||
183 | void notifyBehaviourObservers(const RlvCommand& rlvCmd, bool fInternal); | ||
184 | |||
185 | // Externally invoked event handlers | ||
186 | void onAttach(LLViewerJointAttachment* pAttachPt, bool fFullyLoaded); // LLVOAvatar::attachObject() | ||
187 | void onDetach(LLViewerJointAttachment* pAttachPt); // LLVOAvatar::detachObject() | ||
188 | bool onGC(); // RlvGCTimer::tick() | ||
189 | void onSavedAssetIntoInventory(const LLUUID& idItem); // LLInventoryModel::processSaveAssetIntoInventory() | ||
190 | protected: | ||
191 | BOOL processAddCommand(const LLUUID& uuid, const RlvCommand& rlvCmd); | ||
192 | BOOL processRemoveCommand(const LLUUID& uuid, const RlvCommand& rlvCmd); | ||
193 | BOOL processClearCommand(const LLUUID& idObj, const RlvCommand& rlvCmd); | ||
194 | BOOL processReplyCommand(const LLUUID& uuid, const RlvCommand& rlvCmd) const; | ||
195 | BOOL processForceCommand(const LLUUID& uuid, const RlvCommand& rlvCmd) const; | ||
196 | |||
197 | // Command handlers (exist for no other reason than to keep the length of the processXXX functions down) | ||
198 | void onForceDetach(const LLUUID& idObj, const std::string& strOption) const; | ||
199 | void onForceRemOutfit(const LLUUID& idObj, const std::string& strOption) const; | ||
200 | bool onForceSit(const LLUUID& uuid, const std::string& strOption) const; | ||
201 | void onForceWear(const std::string& strPath, bool fAttach, bool fMatchAll) const; | ||
202 | bool onGetPath(const LLUUID& uuid, const std::string& strOption, std::string& strReply) const; | ||
203 | void onGetInvWorn(const std::string& strPath, std::string &strReply) const; | ||
204 | |||
205 | // -------------------------------- | ||
206 | |||
207 | /* | ||
208 | * Member variables | ||
209 | */ | ||
210 | public: | ||
211 | static BOOL fNoSetEnv; | ||
212 | static BOOL fLegacyNaming; | ||
213 | |||
214 | static const std::string cstrSharedRoot; // Name of the shared root folder | ||
215 | static const std::string cstrBlockedRecvIM; // Stand-in text for incoming IM when recvim restricted | ||
216 | static const std::string cstrBlockedSendIM; // Stand-in text for outgoing IM when sendim restricted | ||
217 | static const std::string cstrHidden; // General purpose "this was censored" text | ||
218 | static const std::string cstrHiddenParcel; | ||
219 | static const std::string cstrHiddenRegion; | ||
220 | static const std::string cstrMsgRecvIM; // Message sent to IM sender when sendim restricted | ||
221 | static const std::string cstrMsgTpLure; // Message sent to tplure sender when tplure restricted | ||
222 | static const std::string cstrAnonyms[28]; | ||
223 | protected: | ||
224 | rlv_object_map_t m_Objects; // Map of objects that have active restrictions (by UUID) | ||
225 | rlv_exception_map_t m_Exceptions; // Map of UUIDs that are exempt from the associated ERlvBehaviour | ||
226 | rlv_detach_map_t m_Attachments; // Map of locked attachments (attachment point index -> object that issued @detach=n) | ||
227 | S16 m_LayersAdd[WT_COUNT]; // Array of locked layers (reference counted) | ||
228 | S16 m_LayersRem[WT_COUNT]; // Array of locked layers (reference counted) | ||
229 | S16 m_Behaviours[RLV_BHVR_COUNT]; | ||
230 | |||
231 | rlv_retained_list_t m_Retained; | ||
232 | rlv_reattach_map_t m_AttachPending; | ||
233 | rlv_reattach_map_t m_DetachPending; | ||
234 | RlvGCTimer* m_pGCTimer; | ||
235 | RlvWLSnapshot* m_pWLSnapshot; | ||
236 | |||
237 | RlvCommand* m_pCurCommand; // Convenience (see @tpto) | ||
238 | LLUUID m_idCurObject; // Convenience (see @tpto) | ||
239 | |||
240 | mutable RlvEventEmitter<RlvObserver> m_Emitter; | ||
241 | mutable std::list<RlvBehaviourObserver*> m_BhvrObservers; | ||
242 | RlvBehaviourNotifyObserver* m_pBhvrNotify; | ||
243 | |||
244 | static BOOL m_fEnabled; // Use setEnabled() to toggle this | ||
245 | static BOOL m_fFetchStarted; // TRUE if we fired off an inventory fetch | ||
246 | static BOOL m_fFetchComplete; // TRUE if everything was fetched | ||
247 | static RlvMultiStringSearch m_AttachLookup; // Lookup table for attachment names (lower case) | ||
248 | |||
249 | bool m_fCanCancelTp; | ||
250 | |||
251 | friend class RlvSharedRootFetcher; // Fetcher needs access to m_fFetchComplete | ||
252 | friend class RlvGCTimer; // Timer clear its own point at destruction | ||
253 | |||
254 | // -------------------------------- | ||
255 | |||
256 | /* | ||
257 | * Internal access functions used by unit tests | ||
258 | */ | ||
259 | public: | ||
260 | const rlv_object_map_t* getObjectMap() const { return &m_Objects; } | ||
261 | const rlv_exception_map_t* getExceptionMap() const { return &m_Exceptions; } | ||
262 | const rlv_detach_map_t* getDetachMap() const { return &m_Attachments; } | ||
263 | #ifdef RLV_DEBUG_TESTS | ||
264 | const S16* getAddLayers() const { return m_LayersAdd; } | ||
265 | const S16* getRemLayers() const { return m_LayersRem; } | ||
266 | const S16* getBehaviours() const { return m_Behaviours; } | ||
267 | const rlv_retained_list_t* getRetainedList() const { return &m_Retained; } | ||
268 | #endif // RLV_DEBUG_TESTS | ||
269 | }; | ||
270 | |||
271 | typedef RlvHandler rlv_handler_t; | ||
272 | extern rlv_handler_t gRlvHandler; | ||
273 | |||
274 | // ============================================================================ | ||
275 | // Inlined member functions | ||
276 | // | ||
277 | |||
278 | // Checked: 2009-10-04 (RLVa-1.0.4a) | Modified: RLVa-1.0.4a | ||
279 | inline void RlvHandler::addException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& varOption) | ||
280 | { | ||
281 | m_Exceptions.insert(std::pair<ERlvBehaviour, RlvException>(eBhvr, RlvException(idObj, eBhvr, varOption))); | ||
282 | } | ||
283 | |||
284 | // Checked: 2009-07-09 (RLVa-1.0.0f) | Modified: RLVa-1.0.0f | ||
285 | inline bool RlvHandler::canShowHoverText(LLViewerObject *pObj) const | ||
286 | { | ||
287 | return ( (!pObj) || (LL_PCODE_VOLUME != pObj->getPCode()) || | ||
288 | !( (hasBehaviour(RLV_BHVR_SHOWHOVERTEXTALL)) || | ||
289 | ( (hasBehaviour(RLV_BHVR_SHOWHOVERTEXTWORLD)) && (!pObj->isHUDAttachment()) ) || | ||
290 | ( (hasBehaviour(RLV_BHVR_SHOWHOVERTEXTHUD)) && (pObj->isHUDAttachment()) ) || | ||
291 | (isException(RLV_BHVR_SHOWHOVERTEXT, pObj->getID(), RLV_CHECK_PERMISSIVE)) ) ); | ||
292 | } | ||
293 | |||
294 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
295 | inline S32 RlvHandler::getAttachPointIndex(std::string strText, bool fExact) const | ||
296 | { | ||
297 | U16 nParam; RlvMultiStringSearchMatch match; | ||
298 | LLStringUtil::toLower(strText); | ||
299 | return (fExact) ? ((m_AttachLookup.getExactMatchParam(strText, nParam)) ? nParam : 0) | ||
300 | : ((m_AttachLookup.findLast(strText, match)) ? match.nParam : 0); | ||
301 | } | ||
302 | |||
303 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
304 | inline S32 RlvHandler::getAttachPointIndex(LLViewerObject* pObj) const | ||
305 | { | ||
306 | return (pObj) ? ATTACHMENT_ID_FROM_STATE(pObj->getState()) : 0; | ||
307 | } | ||
308 | |||
309 | // Checked: 2009-06-02 (RLVa-0.2.0g) | ||
310 | inline std::string RlvHandler::getSharedPath(const LLUUID& idFolder) const | ||
311 | { | ||
312 | return getSharedPath(gInventory.getCategory(idFolder)); // getSharedPath() has a NULL pointer check so this is safe | ||
313 | } | ||
314 | |||
315 | // Checked: 2009-06-07 (RLVa-0.2.1c) | ||
316 | inline std::string RlvHandler::getVersionString() const | ||
317 | { | ||
318 | return llformat("RestrainedLife viewer v%d.%d.%d (%s %d.%d.%d.%d - RLVa %d.%d.%d)", | ||
319 | RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, | ||
320 | LLAppViewer::instance()->getSecondLifeTitle().c_str(), LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD, | ||
321 | RLVa_VERSION_MAJOR, RLVa_VERSION_MINOR, RLVa_VERSION_PATCH); | ||
322 | } | ||
323 | |||
324 | // Checked: 2009-10-04 (RLVa-1.0.4b) | Added: RLVa-1.0.4b | ||
325 | inline std::string RlvHandler::getVersionNumString() const | ||
326 | { | ||
327 | return llformat("%d%02d%02d%02d", RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, RLV_VERSION_BUILD); | ||
328 | } | ||
329 | |||
330 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
331 | inline bool RlvHandler::hasAttachPointName(const LLInventoryItem *pItem, bool fStrict) const | ||
332 | { | ||
333 | return (getAttachPoint(pItem, fStrict) != NULL); // getAttachPoint() has a NULL pointer check so this is safe | ||
334 | } | ||
335 | |||
336 | // Checked: | ||
337 | inline bool RlvHandler::hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption) const | ||
338 | { | ||
339 | return hasBehaviourExcept(eBehaviour, strOption, LLUUID::null); | ||
340 | } | ||
341 | |||
342 | // Checked: | ||
343 | inline bool RlvHandler::hasBehaviourExcept(ERlvBehaviour eBehaviour, const LLUUID& idObj) const | ||
344 | { | ||
345 | return hasBehaviourExcept(eBehaviour, std::string(), idObj); | ||
346 | } | ||
347 | |||
348 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
349 | // Checked: | ||
350 | inline bool RlvHandler::isCompositeFolder(const LLInventoryCategory* pFolder) const | ||
351 | { | ||
352 | return getCompositeInfo(pFolder, NULL); | ||
353 | } | ||
354 | |||
355 | // Checked: | ||
356 | inline bool RlvHandler::isCompositeDescendent(const LLUUID& idItem) const | ||
357 | { | ||
358 | return getCompositeInfo(idItem, NULL, NULL); | ||
359 | } | ||
360 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
361 | |||
362 | // Checked: 2009-09-08 (RLVa-1.0.2c) | Added: RLVa-1.0.2c | ||
363 | inline bool RlvHandler::isDetachable(LLViewerJointAttachment *pAttachPt) const | ||
364 | { | ||
365 | // If there's an attached object it's faster to just use that; otherwise look up the attachment index because it might be locked empty | ||
366 | return (pAttachPt == NULL) || | ||
367 | ( (pAttachPt->getObject() != NULL) && isDetachable(pAttachPt->getObject()) ) || (isDetachable(getAttachPointIndex(pAttachPt))); | ||
368 | } | ||
369 | |||
370 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
371 | inline bool RlvHandler::isDetachable(LLViewerObject* pObj) const | ||
372 | { | ||
373 | return (pObj == NULL) || (!pObj->isAttachment()) || (isDetachable(getAttachPointIndex(pObj))); | ||
374 | } | ||
375 | |||
376 | inline bool RlvHandler::isPermissive(ERlvBehaviour eBhvr) const | ||
377 | { | ||
378 | return (RlvCommand::hasStrictVariant(eBhvr)) | ||
379 | ? !((hasBehaviour(RLV_BHVR_PERMISSIVE)) || (isException(RLV_BHVR_PERMISSIVE, eBhvr, RLV_CHECK_PERMISSIVE))) | ||
380 | : true; | ||
381 | } | ||
382 | |||
383 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Added: RLVa-1.0.1b | ||
384 | inline bool RlvHandler::isFoldedFolder(const LLInventoryCategory* pFolder, bool fAttach) const | ||
385 | { | ||
386 | return | ||
387 | ( | ||
388 | // .(<attachpt>) type folder (on detach we don't care about its children, but on attach there can only be 1 attachment) | ||
389 | ( (gRlvHandler.getAttachPoint(pFolder, true)) && | ||
390 | ( (!fAttach) || (1 == rlvGetDirectDescendentsCount(pFolder, LLAssetType::AT_OBJECT))) ) | ||
391 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
392 | // .(nostrip) folder | ||
393 | || ( (pFolder) && (".("RLV_FOLDER_FLAG_NOSTRIP")" == pFolder->getName()) ) | ||
394 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
395 | ); | ||
396 | } | ||
397 | |||
398 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Added: RLVa-0.2.0d | ||
399 | inline bool RlvHandler::isRemovableExcept(EWearableType type, const LLUUID& idObj) const | ||
400 | { | ||
401 | // NOTE: mind the bitwise OR rather than the logical OR!! | ||
402 | return (isRemovable(type)) || !( (hasBehaviourExcept(RLV_BHVR_REMOUTFIT, idObj)) | | ||
403 | (hasBehaviourExcept(RLV_BHVR_REMOUTFIT, LLWearable::typeToTypeName(type), idObj)) ); | ||
404 | } | ||
405 | |||
406 | #ifndef RLV_EXTENSION_FLAG_NOSTRIP | ||
407 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Added: RLVa-0.2.0d | ||
408 | bool RlvHandler::isStrippable(const LLUUID& idItem) const | ||
409 | { | ||
410 | return true; | ||
411 | } | ||
412 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
413 | |||
414 | // Checked: 2009-10-04 (RLVa-1.0.4a) | Modified: RLVa-1.0.4a | ||
415 | inline void RlvHandler::removeException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& varOption) | ||
416 | { | ||
417 | for (rlv_exception_map_t::iterator itException = m_Exceptions.lower_bound(eBhvr), | ||
418 | endException = m_Exceptions.upper_bound(eBhvr); itException != endException; ++itException) | ||
419 | { | ||
420 | if ( (itException->second.idObject == idObj) && (itException->second.varOption == varOption) ) | ||
421 | { | ||
422 | m_Exceptions.erase(itException); | ||
423 | break; | ||
424 | } | ||
425 | } | ||
426 | } | ||
427 | |||
428 | // Checked: 2009-08-05 (RLVa-1.0.1e) | Modified: RLVa-1.0.1e | ||
429 | inline void RlvHandler::retainCommand(const std::string& strObj, const LLUUID& idObj, const std::string& strCmd) | ||
430 | { | ||
431 | #ifdef RLV_DEBUG | ||
432 | RLV_INFOS << "[" << idObj << "]: " << strCmd << " (retaining)" << LL_ENDL; | ||
433 | #endif // RLV_DEBUG | ||
434 | m_Retained.push_back(RlvRetainedCommand(strObj, idObj, strCmd)); | ||
435 | } | ||
436 | |||
437 | // Checked: 2009-05-23 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
438 | inline bool RlvHandler::setDetachable(LLViewerObject* pObj, const LLUUID& idRlvObj, bool fDetachable) | ||
439 | { | ||
440 | return setDetachable(getAttachPointIndex(pObj), idRlvObj, fDetachable); // getAttachPointIndex() has a NULL pointer check | ||
441 | } | ||
442 | |||
443 | // ============================================================================ | ||
444 | |||
445 | #endif // RLV_HANDLER_H | ||
diff --git a/linden/indra/newview/rlvhelper.cpp b/linden/indra/newview/rlvhelper.cpp new file mode 100644 index 0000000..c8d430d --- /dev/null +++ b/linden/indra/newview/rlvhelper.cpp | |||
@@ -0,0 +1,668 @@ | |||
1 | #include "llviewerprecompiledheaders.h" | ||
2 | #include "llagent.h" | ||
3 | #include "llfloaterwindlight.h" | ||
4 | #include "llviewerobject.h" | ||
5 | #include "llviewerstats.h" | ||
6 | #include "llviewerwindow.h" | ||
7 | #include "llvoavatar.h" | ||
8 | #include "llwlparammanager.h" | ||
9 | |||
10 | #include "rlvhelper.h" | ||
11 | #include "rlvevent.h" | ||
12 | #include "rlvhandler.h" | ||
13 | |||
14 | // ============================================================================ | ||
15 | // Static variable initialization | ||
16 | // | ||
17 | |||
18 | RlvCommand::RlvBhvrTable RlvCommand::m_BhvrMap; | ||
19 | |||
20 | // ============================================================================ | ||
21 | // RlvCommmand | ||
22 | // | ||
23 | |||
24 | // Checked: 2009-09-10 (RLVa-1.0.3a) | Modified: RLVa-1.0.3a | ||
25 | RlvCommand::RlvCommand(const std::string& strCommand) | ||
26 | : m_eBehaviour(RLV_BHVR_UNKNOWN), m_fStrict(false), m_eParamType(RLV_TYPE_UNKNOWN) | ||
27 | { | ||
28 | if ((m_fValid = parseCommand(strCommand, m_strBehaviour, m_strOption, m_strParam))) | ||
29 | { | ||
30 | S32 nTemp = 0; | ||
31 | if ( ("n" == m_strParam) || ("add" == m_strParam) ) | ||
32 | m_eParamType = RLV_TYPE_ADD; | ||
33 | else if ( ("y" == m_strParam) || ("rem" == m_strParam) ) | ||
34 | m_eParamType = RLV_TYPE_REMOVE; | ||
35 | else if ("force" == m_strParam) | ||
36 | m_eParamType = RLV_TYPE_FORCE; | ||
37 | else if (LLStringUtil::convertToS32(m_strParam, nTemp)) // Assume it's a reply command if we can convert <param> to an S32 | ||
38 | m_eParamType = RLV_TYPE_REPLY; | ||
39 | else if (m_strBehaviour == "clear") // clear is the odd one out so just make it its own type | ||
40 | m_eParamType = RLV_TYPE_CLEAR; | ||
41 | else | ||
42 | { | ||
43 | m_eParamType = RLV_TYPE_UNKNOWN; | ||
44 | m_fValid = false; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | if (!m_fValid) | ||
49 | { | ||
50 | m_strBehaviour = m_strOption = m_strParam = ""; | ||
51 | return; | ||
52 | } | ||
53 | |||
54 | // Check if this is the "strict" (aka "secure") variation of a behaviour | ||
55 | std::string::size_type idxStrict = m_strBehaviour.find("_sec"); | ||
56 | m_fStrict = (std::string::npos != idxStrict) && (idxStrict + 4 == m_strBehaviour.length()); | ||
57 | |||
58 | RlvBhvrTable::const_iterator itBhvr = m_BhvrMap.find( (!m_fStrict) ? m_strBehaviour : m_strBehaviour.substr(0, idxStrict)); | ||
59 | if ( (itBhvr != m_BhvrMap.end()) && ((!m_fStrict) || (hasStrictVariant(itBhvr->second))) ) | ||
60 | m_eBehaviour = itBhvr->second; | ||
61 | } | ||
62 | |||
63 | |||
64 | bool RlvCommand::parseCommand(const std::string& strCommand, std::string& strBehaviour, std::string& strOption, std::string& strParam) | ||
65 | { | ||
66 | // (See behaviour notes for the command parsing truth table) | ||
67 | |||
68 | // Format: <behaviour>[:<option>]=<param> | ||
69 | int idxParam = strCommand.find('='); | ||
70 | int idxOption = (idxParam > 0) ? strCommand.find(':') : -1; | ||
71 | if (idxOption > idxParam - 1) | ||
72 | idxOption = -1; | ||
73 | |||
74 | // If <behaviour> is missing it's always an improperly formatted command | ||
75 | if ( (0 == idxOption) || (0 == idxParam) ) | ||
76 | return false; | ||
77 | |||
78 | strBehaviour = strCommand.substr(0, (-1 != idxOption) ? idxOption : idxParam); | ||
79 | strOption = strParam = ""; | ||
80 | |||
81 | // If <param> is missing it's an improperly formatted command | ||
82 | if ( (-1 == idxParam) || ((int)strCommand.length() - 1 == idxParam) ) | ||
83 | { | ||
84 | // Unless "<behaviour> == "clear" AND (idxOption == 0)" | ||
85 | // OR <behaviour> == "clear" AND (idxParam != 0) [see table above] | ||
86 | if ( ("clear" == strBehaviour) && ( (!idxOption) || (idxParam) ) ) | ||
87 | return true; | ||
88 | return false; | ||
89 | } | ||
90 | |||
91 | if ( (-1 != idxOption) && (idxOption + 1 != idxParam) ) | ||
92 | strOption = strCommand.substr(idxOption + 1, idxParam - idxOption - 1); | ||
93 | strParam = strCommand.substr(idxParam + 1); | ||
94 | |||
95 | return true; | ||
96 | } | ||
97 | |||
98 | void RlvCommand::initLookupTable() | ||
99 | { | ||
100 | static bool fInitialized = false; | ||
101 | if (!fInitialized) | ||
102 | { | ||
103 | // NOTE: keep this matched with the enumeration at all times | ||
104 | std::string arBehaviours[RLV_BHVR_COUNT] = | ||
105 | { | ||
106 | "version", "detach", "sendchat", "emote", "chatshout", "chatnormal", "chatwhisper", "redirchat", "rediremote", | ||
107 | "sendim", "recvchat", "recvemote", "recvim", "tplm", "tploc", "tplure", "sittp", "edit", "rez", "addoutfit", | ||
108 | "remoutfit", "getoutfit", "getattach", "showinv", "viewnote", "unsit", "sit", "sendchannel", "getstatus", "getstatusall", | ||
109 | "getinv", "getinvworn", "findfolder", "findfolders", "attach", "attachall", "detachall", "getpath", "attachthis", | ||
110 | "attachallthis", "detachthis", "detachallthis", "fartouch", "showworldmap", "showminimap", "showloc", "tpto", "accepttp", | ||
111 | "acceptpermission", "shownames", "fly", "getsitid", "setdebug", "setenv", "detachme", "showhovertextall", | ||
112 | "showhovertextworld", "showhovertexthud", "showhovertext", "notify", "defaultwear", "versionnum", "permissive" | ||
113 | }; | ||
114 | |||
115 | for (int idxBvhr = 0; idxBvhr < RLV_BHVR_COUNT; idxBvhr++) | ||
116 | m_BhvrMap.insert(std::pair<std::string, ERlvBehaviour>(arBehaviours[idxBvhr], (ERlvBehaviour)idxBvhr)); | ||
117 | |||
118 | fInitialized = true; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | // ========================================================================= | ||
123 | // RlvObject | ||
124 | // | ||
125 | |||
126 | RlvObject::RlvObject(const LLUUID& idObj) : m_UUID(idObj), m_nLookupMisses(0) | ||
127 | { | ||
128 | LLViewerObject* pObj = gObjectList.findObject(idObj); | ||
129 | m_fLookup = (NULL != pObj); | ||
130 | m_idxAttachPt = (pObj) ? ATTACHMENT_ID_FROM_STATE(pObj->getState()) : 0; | ||
131 | } | ||
132 | |||
133 | bool RlvObject::addCommand(const RlvCommand& rlvCmd) | ||
134 | { | ||
135 | // Sanity checking | ||
136 | if (RLV_TYPE_ADD != rlvCmd.getParamType()) | ||
137 | return false; | ||
138 | |||
139 | // Don't add duplicate commands for this object (ie @detach=n followed by another @detach=n later on) | ||
140 | for (rlv_command_list_t::iterator itCmd = m_Commands.begin(); itCmd != m_Commands.end(); ++itCmd) | ||
141 | { | ||
142 | if ( (itCmd->getBehaviour() == rlvCmd.getBehaviour()) && (itCmd->getOption() == rlvCmd.getOption()) && | ||
143 | (itCmd->isStrict() == rlvCmd.isStrict() ) ) | ||
144 | { | ||
145 | return false; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | // Now that we know it's not a duplicate, add it to the end of the list | ||
150 | m_Commands.push_back(rlvCmd); | ||
151 | |||
152 | return true; | ||
153 | } | ||
154 | |||
155 | bool RlvObject::removeCommand(const RlvCommand& rlvCmd) | ||
156 | { | ||
157 | // Sanity checking | ||
158 | if (RLV_TYPE_REMOVE != rlvCmd.getParamType()) | ||
159 | return false; | ||
160 | |||
161 | for (rlv_command_list_t::iterator itCmd = m_Commands.begin(); itCmd != m_Commands.end(); ++itCmd) | ||
162 | { | ||
163 | //if (*itCmd == rlvCmd) <- commands will never be equal since one is an add and the other is a remove *rolls eyes* | ||
164 | if ( (itCmd->getBehaviour() == rlvCmd.getBehaviour()) && (itCmd->getOption() == rlvCmd.getOption()) && | ||
165 | (itCmd->isStrict() == rlvCmd.isStrict() ) ) | ||
166 | { | ||
167 | m_Commands.erase(itCmd); | ||
168 | return true; | ||
169 | } | ||
170 | } | ||
171 | return false; // Command was never added so nothing to remove now | ||
172 | } | ||
173 | |||
174 | bool RlvObject::hasBehaviour(ERlvBehaviour eBehaviour, bool fStrictOnly) const | ||
175 | { | ||
176 | for (rlv_command_list_t::const_iterator itCmd = m_Commands.begin(); itCmd != m_Commands.end(); ++itCmd) | ||
177 | if ( (itCmd->getBehaviourType() == eBehaviour) && (itCmd->getOption().empty()) && ((!fStrictOnly) || (itCmd->isStrict())) ) | ||
178 | return true; | ||
179 | return false; | ||
180 | } | ||
181 | |||
182 | bool RlvObject::hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption, bool fStrictOnly) const | ||
183 | { | ||
184 | for (rlv_command_list_t::const_iterator itCmd = m_Commands.begin(); itCmd != m_Commands.end(); ++itCmd) | ||
185 | if ( (itCmd->getBehaviourType() == eBehaviour) && (itCmd->getOption() == strOption) && ((!fStrictOnly) || (itCmd->isStrict())) ) | ||
186 | return true; | ||
187 | return false; | ||
188 | } | ||
189 | |||
190 | // Checked: 2009-06-07 (RLVa-0.2.1c) | ||
191 | std::string RlvObject::getStatusString(const std::string& strMatch) const | ||
192 | { | ||
193 | std::string strStatus, strCmd; | ||
194 | |||
195 | for (rlv_command_list_t::const_iterator itCmd = m_Commands.begin(); itCmd != m_Commands.end(); ++itCmd) | ||
196 | { | ||
197 | strCmd = itCmd->asString(); | ||
198 | if ( (strMatch.empty()) || (std::string::npos != strCmd.find(strMatch)) ) | ||
199 | { | ||
200 | if (!strStatus.empty()) | ||
201 | strStatus.push_back('/'); | ||
202 | strStatus += strCmd; | ||
203 | } | ||
204 | } | ||
205 | |||
206 | return strStatus; | ||
207 | } | ||
208 | |||
209 | // ============================================================================ | ||
210 | // RlvWearableItemCollector | ||
211 | // | ||
212 | |||
213 | // Checked: 2009-05-30 (RLVa-0.2.0e) | Added: RLVa-0.2.0e | ||
214 | const LLUUID& RlvWearableItemCollector::getFoldedParent(const LLUUID& idFolder) const | ||
215 | { | ||
216 | std::map<LLUUID, LLUUID>::const_iterator itFolder = m_Folding.end(), itCur = m_Folding.find(idFolder); | ||
217 | while (itCur != m_Folding.end()) | ||
218 | { | ||
219 | itFolder = itCur; | ||
220 | itCur = m_Folding.find(itFolder->second); | ||
221 | } | ||
222 | return (m_Folding.end() == itFolder) ? idFolder : itFolder->second; | ||
223 | } | ||
224 | |||
225 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Modified: RLVa-1.0.1b | ||
226 | bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolder) | ||
227 | { | ||
228 | const LLUUID& idParent = pFolder->getParentUUID(); | ||
229 | if (m_Wearable.end() == std::find(m_Wearable.begin(), m_Wearable.end(), idParent)) | ||
230 | return false; // Not the child of a wearable folder == skip | ||
231 | |||
232 | const std::string& strFolder = pFolder->getName(); | ||
233 | if (strFolder.empty()) // Shouldn't happen but does... naughty Lindens | ||
234 | return false; | ||
235 | |||
236 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
237 | if ( (!m_fAttach) && (-1 != strFolder.find(RLV_FOLDER_FLAG_NOSTRIP)) ) // Don't process "nostrip" folders on detach | ||
238 | return false; | ||
239 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
240 | |||
241 | if (gRlvHandler.isFoldedFolder(pFolder, m_fAttach)) // Check for folder that should get folded under its parent | ||
242 | { | ||
243 | m_Tentative.push_front(pFolder->getUUID()); | ||
244 | m_Folding.insert(std::pair<LLUUID, LLUUID>(pFolder->getUUID(), idParent)); | ||
245 | } | ||
246 | else if ( (RLV_FOLDER_PREFIX_HIDDEN != strFolder[0]) && (m_fMatchAll) ) // Collect from any non-hidden child folder for *all | ||
247 | { | ||
248 | m_Wearable.push_front(pFolder->getUUID()); | ||
249 | return (idParent == m_idFolder); // (Convenience for @getinvworn) | ||
250 | } | ||
251 | #ifdef RLV_EXPERIMENTAL_COMPOSITES | ||
252 | else if ( (RLV_FOLDER_PREFIX_HIDDEN == strFolder[0]) && // Hidden folder that's a... | ||
253 | (gRlvHandler.isCompositeFolder(pFolder)) && // ... composite folder which we... | ||
254 | ((m_fAttach) || (gRlvHandler.canTakeOffComposite(pFolder))) ) // ... attach or can detach (see composite locking) | ||
255 | { | ||
256 | m_Wearable.push_front(pFolder->getUUID()); | ||
257 | m_Folding.insert(std::pair<LLUUID, LLUUID>(pFolder->getUUID(), idParent)); | ||
258 | } | ||
259 | #endif // RLV_EXPERIMENTAL_COMPOSITES | ||
260 | |||
261 | return false; | ||
262 | } | ||
263 | |||
264 | // Checked: 2009-05-26 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
265 | bool RlvWearableItemCollector::onCollectItem(const LLInventoryItem* pItem) | ||
266 | { | ||
267 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
268 | if ( (!m_fAttach) && (-1 != pItem->getName().find(RLV_FOLDER_FLAG_NOSTRIP)) ) // Don't process "nostrip" items on detach | ||
269 | return false; | ||
270 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
271 | |||
272 | const LLUUID& idParent = pItem->getParentUUID(); bool fRet = false; | ||
273 | switch (pItem->getType()) | ||
274 | { | ||
275 | case LLAssetType::AT_BODYPART: | ||
276 | if (!m_fAttach) | ||
277 | break; // Don't process body parts on detach | ||
278 | case LLAssetType::AT_CLOTHING: | ||
279 | #ifdef RLV_EXTENSION_FLAG_NOSTRIP | ||
280 | fRet = ( (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)) || | ||
281 | ( (m_fAttach) && (m_Tentative.end() != std::find(m_Tentative.begin(), m_Tentative.end(), idParent)) && | ||
282 | (gInventory.getCategory(pItem->getParentUUID())->getName() == ".("RLV_FOLDER_FLAG_NOSTRIP")") ) ); | ||
283 | #else | ||
284 | fRet = (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)); | ||
285 | #endif // RLV_EXTENSION_FLAG_NOSTRIP | ||
286 | break; | ||
287 | case LLAssetType::AT_OBJECT: | ||
288 | fRet = ( (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)) || | ||
289 | (m_Tentative.end() != std::find(m_Tentative.begin(), m_Tentative.end(), idParent)) ) && | ||
290 | ( (!m_fAttach) || (gRlvHandler.hasAttachPointName(pItem, true)) ); // Only care about attach point on attach* | ||
291 | break; | ||
292 | #ifdef RLV_EXPERIMENTAL_FORCEWEAR_GESTURES | ||
293 | case LLAssetType::AT_GESTURE: | ||
294 | fRet = (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)); | ||
295 | break; | ||
296 | #endif // RLV_EXPERIMENTAL_FORCEWEAR_GESTURES | ||
297 | default: | ||
298 | break; | ||
299 | } | ||
300 | return fRet; | ||
301 | } | ||
302 | |||
303 | // Checked: 2009-05-26 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
304 | bool RlvWearableItemCollector::operator()(LLInventoryCategory* pFolder, LLInventoryItem* pItem) | ||
305 | { | ||
306 | // NOTE: this is used for more than was originally intended so only modify if you're sure it won't break something obscure | ||
307 | return (pFolder) ? onCollectFolder(pFolder) : ( (pItem) ? onCollectItem(pItem) : false ); | ||
308 | } | ||
309 | |||
310 | // ============================================================================ | ||
311 | // RlvWLSnapshot | ||
312 | // | ||
313 | |||
314 | // Checked: 2009-06-03 (RLVa-0.2.0h) | Added: RLVa-0.2.0h | ||
315 | void RlvWLSnapshot::restoreSnapshot(const RlvWLSnapshot* pWLSnapshot) | ||
316 | { | ||
317 | LLWLParamManager* pWLParams = LLWLParamManager::instance(); | ||
318 | if ( (pWLSnapshot) && (pWLParams) ) | ||
319 | { | ||
320 | pWLParams->mAnimator.mIsRunning = pWLSnapshot->fIsRunning; | ||
321 | pWLParams->mAnimator.mUseLindenTime = pWLSnapshot->fUseLindenTime; | ||
322 | pWLParams->mCurParams = pWLSnapshot->WLParams; | ||
323 | pWLParams->propagateParameters(); | ||
324 | } | ||
325 | } | ||
326 | |||
327 | // Checked: 2009-09-16 (RLVa-1.0.3c) | Modified: RLVa-1.0.3c | ||
328 | RlvWLSnapshot* RlvWLSnapshot::takeSnapshot() | ||
329 | { | ||
330 | // HACK: see RlvExtGetSet::onGetEnv | ||
331 | if (!LLFloaterWindLight::isOpen()) | ||
332 | { | ||
333 | LLFloaterWindLight::instance()->close(); | ||
334 | LLFloaterWindLight::instance()->syncMenu(); | ||
335 | } | ||
336 | |||
337 | RlvWLSnapshot* pWLSnapshot = NULL; | ||
338 | LLWLParamManager* pWLParams = LLWLParamManager::instance(); | ||
339 | if (pWLParams) | ||
340 | { | ||
341 | pWLSnapshot = new RlvWLSnapshot(); | ||
342 | pWLSnapshot->fIsRunning = pWLParams->mAnimator.mIsRunning; | ||
343 | pWLSnapshot->fUseLindenTime = pWLParams->mAnimator.mUseLindenTime; | ||
344 | pWLSnapshot->WLParams = pWLParams->mCurParams; | ||
345 | } | ||
346 | return pWLSnapshot; | ||
347 | } | ||
348 | |||
349 | // ========================================================================= | ||
350 | // RlvSettings | ||
351 | // | ||
352 | |||
353 | BOOL RlvSettings::fShowNameTags = FALSE; | ||
354 | |||
355 | BOOL RlvSettings::getEnableWear() | ||
356 | { | ||
357 | return rlvGetSettingBOOL(RLV_SETTING_ENABLEWEAR, TRUE) && (!gRlvHandler.hasBehaviour(RLV_BHVR_DEFAULTWEAR)); | ||
358 | } | ||
359 | |||
360 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
361 | // Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.1d | ||
362 | void RlvSettings::updateLoginLastLocation() | ||
363 | { | ||
364 | if (gSavedPerAccountSettings.controlExists(RLV_SETTING_LOGINLASTLOCATION)) | ||
365 | { | ||
366 | BOOL fValue = (gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC)) || | ||
367 | ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && | ||
368 | (gAgent.getAvatarObject()) && (!gAgent.getAvatarObject()->mIsSitting) ); | ||
369 | if (gSavedPerAccountSettings.getBOOL(RLV_SETTING_LOGINLASTLOCATION) != fValue) | ||
370 | { | ||
371 | gSavedPerAccountSettings.setBOOL(RLV_SETTING_LOGINLASTLOCATION, fValue); | ||
372 | gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE); | ||
373 | } | ||
374 | } | ||
375 | } | ||
376 | #endif // RLV_EXTENSION_STARTLOCATION | ||
377 | |||
378 | // ========================================================================= | ||
379 | // Various helper classes/timers/functors | ||
380 | // | ||
381 | |||
382 | BOOL RlvGCTimer::tick() | ||
383 | { | ||
384 | bool fContinue = gRlvHandler.onGC(); | ||
385 | if (!fContinue) | ||
386 | gRlvHandler.m_pGCTimer = NULL; | ||
387 | return !fContinue; | ||
388 | } | ||
389 | |||
390 | void RlvCurrentlyWorn::fetchWorn() | ||
391 | { | ||
392 | LLInventoryFetchObserver::item_ref_t idItems; | ||
393 | |||
394 | // Fetch all currently worn clothing layers and body parts | ||
395 | for (int type = 0; type < (int)WT_COUNT; type++) | ||
396 | { | ||
397 | const LLUUID& idItem = gAgent.getWearableItem((EWearableType)type); | ||
398 | if (idItem.notNull()) | ||
399 | idItems.push_back(idItem); | ||
400 | } | ||
401 | |||
402 | // Fetch all currently worn attachments | ||
403 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
404 | if (pAvatar) | ||
405 | { | ||
406 | for (LLVOAvatar::attachment_map_t::const_iterator itAttach = pAvatar->mAttachmentPoints.begin(); | ||
407 | itAttach != pAvatar->mAttachmentPoints.end(); ++itAttach) | ||
408 | { | ||
409 | const LLUUID& idItem = itAttach->second->getItemID(); | ||
410 | if (idItem.notNull()) | ||
411 | idItems.push_back(idItem); | ||
412 | } | ||
413 | } | ||
414 | |||
415 | RlvCurrentlyWorn f; | ||
416 | f.fetchItems(idItems); | ||
417 | } | ||
418 | |||
419 | // Checked: 2009-07-06 (RLVa-1.0.0c) | Modified: RLVa-0.2.0f | ||
420 | bool RlvSelectHasLockedAttach::apply(LLSelectNode* pNode) | ||
421 | { | ||
422 | return (pNode->getObject()) ? !gRlvHandler.isDetachable(pNode->getObject()) : false; | ||
423 | } | ||
424 | |||
425 | // Checked: 2009-07-05 (RLVa-1.0.0b) | Modified: RLVa-0.2.0f | ||
426 | bool RlvSelectIsOwnedByOrGroupOwned::apply(LLSelectNode* pNode) | ||
427 | { | ||
428 | return (pNode->mPermissions->isGroupOwned()) || (pNode->mPermissions->getOwner() == m_idAgent); | ||
429 | } | ||
430 | |||
431 | // Checked: 2009-05-31 (RLVa-0.2.0f) | Modified: RLVa-0.2.0f | ||
432 | bool RlvSelectIsSittingOn::apply(LLSelectNode* pNode) | ||
433 | { | ||
434 | return (pNode->getObject()) && (pNode->getObject()->getRootEdit() == m_pObject); | ||
435 | } | ||
436 | |||
437 | // ============================================================================ | ||
438 | // Various helper functions | ||
439 | // | ||
440 | |||
441 | // Checked: 2009-09-08 (RLVa-1.0.2c) | Modified: RLVa-1.0.2c | ||
442 | BOOL rlvAttachToEnabler(void* pParam) | ||
443 | { | ||
444 | // Enables/disables an option on the "Attach to (HUD)" submenu depending on whether it is (un)detachable | ||
445 | return gRlvHandler.isDetachable((LLViewerJointAttachment*)pParam); | ||
446 | } | ||
447 | |||
448 | // Checked: 2009-07-05 (RLVa-1.0.0b) | Modified: RLVa-0.2.0g | ||
449 | bool rlvCanDeleteOrReturn() | ||
450 | { | ||
451 | bool fIsAllowed = true; | ||
452 | |||
453 | if (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) | ||
454 | { | ||
455 | // We'll allow if none of the prims are owned by the avie or group owned | ||
456 | LLObjectSelectionHandle handleSel = LLSelectMgr::getInstance()->getSelection(); | ||
457 | RlvSelectIsOwnedByOrGroupOwned func(gAgent.getID()); | ||
458 | if ( (handleSel.notNull()) && ((0 == handleSel->getRootObjectCount()) || (NULL != handleSel->getFirstRootNode(&func, FALSE))) ) | ||
459 | fIsAllowed = false; | ||
460 | } | ||
461 | |||
462 | if ( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (gAgent.getAvatarObject()) ) | ||
463 | { | ||
464 | // We'll allow if the avie isn't sitting on any of the selected objects | ||
465 | LLObjectSelectionHandle handleSel = LLSelectMgr::getInstance()->getSelection(); | ||
466 | RlvSelectIsSittingOn func(gAgent.getAvatarObject()->getRoot()); | ||
467 | if ( (handleSel.notNull()) && (handleSel->getFirstRootNode(&func, TRUE)) ) | ||
468 | fIsAllowed = false; | ||
469 | } | ||
470 | |||
471 | return fIsAllowed; | ||
472 | } | ||
473 | |||
474 | // Checked: 2009-10-04 (RLVa-1.0.4b) | Modified: RLVa-1.0.4b | ||
475 | BOOL rlvEnableWearEnabler(void* pParam) | ||
476 | { | ||
477 | // Visually disables the "Enable Wear" option when restricted from toggling it | ||
478 | return (!gRlvHandler.hasBehaviour(RLV_BHVR_DEFAULTWEAR)); | ||
479 | } | ||
480 | |||
481 | // Checked: 2009-05-26 (RLVa-0.2.0d) | Modified: RLVa-0.2.0d | ||
482 | S32 rlvGetDirectDescendentsCount(const LLInventoryCategory* pFolder, LLAssetType::EType type) | ||
483 | { | ||
484 | S32 cntType = 0; | ||
485 | if (pFolder) | ||
486 | { | ||
487 | LLInventoryModel::cat_array_t* pFolders; | ||
488 | LLInventoryModel::item_array_t* pItems; | ||
489 | gInventory.getDirectDescendentsOf(pFolder->getUUID(), pFolders, pItems); | ||
490 | |||
491 | if (pItems) | ||
492 | { | ||
493 | for (S32 idxItem = 0, cntItem = pItems->count(); idxItem < cntItem; idxItem++) | ||
494 | if (pItems->get(idxItem)->getType() == type) | ||
495 | cntType++; | ||
496 | } | ||
497 | } | ||
498 | return cntType; | ||
499 | } | ||
500 | |||
501 | #ifdef RLV_ADVANCED_TOGGLE_RLVA | ||
502 | // Checked: 2009-07-12 (RLVa-1.0.0h) | Modified: RLVa-1.0.0h | ||
503 | void rlvToggleEnabled(void*) | ||
504 | { | ||
505 | gSavedSettings.setBOOL(RLV_SETTING_MAIN, !rlv_handler_t::isEnabled()); | ||
506 | |||
507 | #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 | ||
508 | LLStringUtil::format_map_t args; | ||
509 | args["[MESSAGE]"] = llformat("Restrained Life Support will be %s after you restart", | ||
510 | (rlv_handler_t::isEnabled()) ? "disabled" : "enabled" ); | ||
511 | gViewerWindow->alertXml("GenericAlert", args); | ||
512 | #else // Version: 1.23.4 | ||
513 | LLSD args; | ||
514 | args["MESSAGE"] = llformat("Restrained Life Support will be %s after you restart", | ||
515 | (rlv_handler_t::isEnabled()) ? "disabled" : "enabled" ); | ||
516 | LLNotifications::instance().add("GenericAlert", args); | ||
517 | #endif | ||
518 | } | ||
519 | // Checked: 2009-07-08 (RLVa-1.0.0e) | ||
520 | BOOL rlvGetEnabled(void*) | ||
521 | { | ||
522 | return rlv_handler_t::isEnabled(); | ||
523 | } | ||
524 | #endif // RLV_ADVANCED_TOGGLE_RLVA | ||
525 | |||
526 | // ========================================================================= | ||
527 | // Message sending functions | ||
528 | // | ||
529 | |||
530 | // Checked: 2009-08-11 (RLVa-1.0.1h) | Added: RLVa-1.0.1h | ||
531 | void rlvForceDetach(LLViewerJointAttachment* pAttachPt) | ||
532 | { | ||
533 | // Copy/paste from handle_detach_from_avatar() | ||
534 | LLViewerObject* attached_object = pAttachPt->getObject(); | ||
535 | if (attached_object) | ||
536 | { | ||
537 | gMessageSystem->newMessage("ObjectDetach"); | ||
538 | gMessageSystem->nextBlockFast(_PREHASH_AgentData); | ||
539 | gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); | ||
540 | gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
541 | |||
542 | gMessageSystem->nextBlockFast(_PREHASH_ObjectData); | ||
543 | gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, attached_object->getLocalID()); | ||
544 | gMessageSystem->sendReliable( gAgent.getRegionHost() ); | ||
545 | } | ||
546 | } | ||
547 | |||
548 | void rlvSendBusyMessage(const LLUUID& idTo, const std::string& strMsg, const LLUUID& idSession) | ||
549 | { | ||
550 | // (See process_improved_im) | ||
551 | std::string strFullName; | ||
552 | gAgent.buildFullname(strFullName); | ||
553 | |||
554 | pack_instant_message(gMessageSystem, gAgent.getID(), FALSE, gAgent.getSessionID(), idTo, strFullName, | ||
555 | strMsg, IM_ONLINE, IM_BUSY_AUTO_RESPONSE, idSession); | ||
556 | gAgent.sendReliableMessage(); | ||
557 | } | ||
558 | |||
559 | // Checked: 2009-08-05 (RLVa-1.0.1e) | Modified: RLVa-1.0.1e | ||
560 | bool rlvSendChatReply(S32 nChannel, const std::string& strReply) | ||
561 | { | ||
562 | if (!rlvIsValidReplyChannel(nChannel)) | ||
563 | return false; | ||
564 | |||
565 | // Copy/paste from send_chat_from_viewer() | ||
566 | LLMessageSystem* msg = gMessageSystem; | ||
567 | msg->newMessageFast(_PREHASH_ChatFromViewer); | ||
568 | msg->nextBlockFast(_PREHASH_AgentData); | ||
569 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
570 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
571 | msg->nextBlockFast(_PREHASH_ChatData); | ||
572 | msg->addStringFast(_PREHASH_Message, strReply); | ||
573 | msg->addU8Fast(_PREHASH_Type, CHAT_TYPE_SHOUT); | ||
574 | msg->addS32("Channel", nChannel); | ||
575 | gAgent.sendReliableMessage(); | ||
576 | LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT); | ||
577 | |||
578 | return true; | ||
579 | } | ||
580 | |||
581 | // ========================================================================= | ||
582 | // String helper functions | ||
583 | // | ||
584 | |||
585 | // Checked: 2009-07-04 (RLVa-1.0.0a) | ||
586 | void rlvStringReplace(std::string& strText, std::string strFrom, const std::string& strTo) | ||
587 | { | ||
588 | if (strFrom.empty()) | ||
589 | return; | ||
590 | |||
591 | size_t lenFrom = strFrom.length(); | ||
592 | size_t lenTo = strTo.length(); | ||
593 | |||
594 | std::string strTemp(strText); | ||
595 | LLStringUtil::toLower(strTemp); | ||
596 | LLStringUtil::toLower(strFrom); | ||
597 | |||
598 | std::string::size_type idxCur, idxStart = 0, idxOffset = 0; | ||
599 | while ( (idxCur = strTemp.find(strFrom, idxStart)) != std::string::npos) | ||
600 | { | ||
601 | strText.replace(idxCur + idxOffset, lenFrom, strTo); | ||
602 | idxStart = idxCur + lenFrom; | ||
603 | idxOffset += lenTo - lenFrom; | ||
604 | } | ||
605 | } | ||
606 | |||
607 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Added: RLVa-1.0.1b | ||
608 | std::string rlvGetFirstParenthesisedText(const std::string& strText, std::string::size_type* pidxMatch /*=NULL*/) | ||
609 | { | ||
610 | if (pidxMatch) | ||
611 | *pidxMatch = std::string::npos; // Assume we won't find anything | ||
612 | |||
613 | std::string::size_type idxIt, idxStart; int cntLevel = 1; | ||
614 | if ((idxStart = strText.find_first_of('(')) == std::string::npos) | ||
615 | return std::string(); | ||
616 | |||
617 | const char* pstrText = strText.c_str(); idxIt = idxStart; | ||
618 | while ( (cntLevel > 0) && (idxIt < strText.length()) ) | ||
619 | { | ||
620 | if ('(' == pstrText[++idxIt]) | ||
621 | cntLevel++; | ||
622 | else if (')' == pstrText[idxIt]) | ||
623 | cntLevel--; | ||
624 | } | ||
625 | |||
626 | if (idxIt < strText.length()) | ||
627 | { | ||
628 | if (pidxMatch) | ||
629 | *pidxMatch = idxStart; // Return the character index of the starting '(' | ||
630 | return strText.substr(idxStart + 1, idxIt - idxStart - 1); | ||
631 | } | ||
632 | return std::string(); | ||
633 | } | ||
634 | |||
635 | // Checked: 2009-07-29 (RLVa-1.0.1b) | Added: RLVa-1.0.1b | ||
636 | std::string rlvGetLastParenthesisedText(const std::string& strText, std::string::size_type* pidxStart /*=NULL*/) | ||
637 | { | ||
638 | if (pidxStart) | ||
639 | *pidxStart = std::string::npos; // Assume we won't find anything | ||
640 | |||
641 | // Extracts the last - matched - parenthesised text from the input string | ||
642 | std::string::size_type idxIt, idxEnd; int cntLevel = 1; | ||
643 | if ((idxEnd = strText.find_last_of(')')) == std::string::npos) | ||
644 | return std::string(); | ||
645 | |||
646 | const char* pstrText = strText.c_str(); idxIt = idxEnd; | ||
647 | while ( (cntLevel > 0) && (idxIt >= 0) ) | ||
648 | { | ||
649 | if (')' == pstrText[--idxIt]) | ||
650 | cntLevel++; | ||
651 | else if ('(' == pstrText[idxIt]) | ||
652 | cntLevel--; | ||
653 | } | ||
654 | |||
655 | if ( (idxIt >= 0) && (idxIt < strText.length()) ) // NOTE: allow for std::string::size_type to be signed or unsigned | ||
656 | { | ||
657 | if (pidxStart) | ||
658 | *pidxStart = idxIt; // Return the character index of the starting '(' | ||
659 | return strText.substr(idxIt + 1, idxEnd - idxIt - 1); | ||
660 | } | ||
661 | return std::string(); | ||
662 | } | ||
663 | |||
664 | // ========================================================================= | ||
665 | // Debug helper functions | ||
666 | // | ||
667 | |||
668 | // ========================================================================= | ||
diff --git a/linden/indra/newview/rlvhelper.h b/linden/indra/newview/rlvhelper.h new file mode 100644 index 0000000..42d10b8 --- /dev/null +++ b/linden/indra/newview/rlvhelper.h | |||
@@ -0,0 +1,416 @@ | |||
1 | #ifndef RLV_HELPER_H | ||
2 | #define RLV_HELPER_H | ||
3 | |||
4 | #include "llboost.h" | ||
5 | #include "llinventorymodel.h" | ||
6 | #include "llselectmgr.h" | ||
7 | #include "llviewercontrol.h" | ||
8 | #include "llviewerobjectlist.h" | ||
9 | #include "llwlparamset.h" | ||
10 | #include "rlvdefines.h" | ||
11 | |||
12 | #ifdef LL_WINDOWS | ||
13 | #pragma warning (push) | ||
14 | #pragma warning (disable : 4702) // warning C4702: unreachable code | ||
15 | #endif | ||
16 | #include <boost/variant.hpp> | ||
17 | #ifdef LL_WINDOWS | ||
18 | #pragma warning (pop) | ||
19 | #endif | ||
20 | |||
21 | // ============================================================================ | ||
22 | // RlvCommand | ||
23 | // | ||
24 | |||
25 | class RlvCommand | ||
26 | { | ||
27 | public: | ||
28 | explicit RlvCommand(const std::string& strCommand); | ||
29 | |||
30 | /* | ||
31 | * Member functions | ||
32 | */ | ||
33 | public: | ||
34 | std::string asString() const; | ||
35 | const std::string& getBehaviour() const { return m_strBehaviour; } | ||
36 | ERlvBehaviour getBehaviourType() const { return m_eBehaviour; } | ||
37 | const std::string& getOption() const { return m_strOption; } | ||
38 | const std::string& getParam() const { return m_strParam; } | ||
39 | ERlvParamType getParamType() const { return m_eParamType; } | ||
40 | bool isStrict() const { return m_fStrict; } | ||
41 | bool isValid() const { return m_fValid; } | ||
42 | |||
43 | static ERlvBehaviour getBehaviourFromString(const std::string& strBhvr); | ||
44 | static const std::string& getStringFromBehaviour(ERlvBehaviour eBhvr); | ||
45 | static bool hasStrictVariant(ERlvBehaviour eBhvr); | ||
46 | |||
47 | static void initLookupTable(); | ||
48 | protected: | ||
49 | static bool parseCommand(const std::string& strCommand, std::string& strBehaviour, std::string& strOption, std::string& strParam); | ||
50 | |||
51 | /* | ||
52 | * Operators | ||
53 | */ | ||
54 | public: | ||
55 | bool operator ==(const RlvCommand&) const; | ||
56 | |||
57 | /* | ||
58 | * Member variables | ||
59 | */ | ||
60 | protected: | ||
61 | bool m_fValid; | ||
62 | std::string m_strBehaviour; | ||
63 | ERlvBehaviour m_eBehaviour; | ||
64 | bool m_fStrict; | ||
65 | std::string m_strOption; | ||
66 | std::string m_strParam; | ||
67 | ERlvParamType m_eParamType; | ||
68 | |||
69 | typedef std::map<std::string, ERlvBehaviour> RlvBhvrTable; | ||
70 | static RlvBhvrTable m_BhvrMap; | ||
71 | |||
72 | friend class RlvHandler; | ||
73 | }; | ||
74 | typedef std::list<RlvCommand> rlv_command_list_t; | ||
75 | |||
76 | // ============================================================================ | ||
77 | // RlvObject | ||
78 | // | ||
79 | |||
80 | class RlvObject | ||
81 | { | ||
82 | public: | ||
83 | RlvObject(const LLUUID& idObj); | ||
84 | |||
85 | /* | ||
86 | * Member functions | ||
87 | */ | ||
88 | public: | ||
89 | bool addCommand(const RlvCommand& rlvCmd); | ||
90 | bool removeCommand(const RlvCommand& rlvCmd); | ||
91 | |||
92 | std::string getStatusString(const std::string& strMatch) const; | ||
93 | bool hasBehaviour(ERlvBehaviour eBehaviour, bool fStrictOnly) const; | ||
94 | bool hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption, bool fStrictOnly) const; | ||
95 | |||
96 | const rlv_command_list_t* getCommandList() const { return &m_Commands; } | ||
97 | |||
98 | /* | ||
99 | * Member variables | ||
100 | */ | ||
101 | protected: | ||
102 | LLUUID m_UUID; // The object's UUID | ||
103 | S32 m_idxAttachPt; // The object's attachment point (or 0 if it's not an attachment) | ||
104 | bool m_fLookup; // TRUE if the object existed in gObjectList at one point in time | ||
105 | S16 m_nLookupMisses; // Count of unsuccessful lookups in gObjectList by the GC | ||
106 | rlv_command_list_t m_Commands; // List of behaviours held by this object (in the order they were received) | ||
107 | |||
108 | friend class RlvHandler; | ||
109 | }; | ||
110 | |||
111 | // ============================================================================ | ||
112 | // RlvCriteriaCategoryCollector - Criteria based folder matching filter used by @findfolder and @findfolders | ||
113 | // | ||
114 | |||
115 | class RlvCriteriaCategoryCollector : public LLInventoryCollectFunctor | ||
116 | { | ||
117 | public: | ||
118 | RlvCriteriaCategoryCollector(const std::string& strCriteria) | ||
119 | { | ||
120 | std::string::size_type idxIt, idxLast = 0; | ||
121 | while (idxLast < strCriteria.length()) | ||
122 | { | ||
123 | idxIt = strCriteria.find("&&", idxLast); | ||
124 | if (std::string::npos == idxIt) | ||
125 | idxIt = strCriteria.length(); | ||
126 | if (idxIt != idxLast) | ||
127 | m_Criteria.push_back(strCriteria.substr(idxLast, idxIt - idxLast)); | ||
128 | idxLast = idxIt + 2; | ||
129 | } | ||
130 | } | ||
131 | virtual ~RlvCriteriaCategoryCollector() {} | ||
132 | |||
133 | virtual bool operator()(LLInventoryCategory* pFolder, LLInventoryItem* pItem) | ||
134 | { | ||
135 | if ( (!pFolder) || (m_Criteria.empty()) ) // We're only interested in matching folders, we don't care about items | ||
136 | return false; // (if there are no criteria then we don't want to return a match) | ||
137 | |||
138 | std::string strFolderName = pFolder->getName(); | ||
139 | LLStringUtil::toLower(strFolderName); | ||
140 | |||
141 | if ( (strFolderName.empty()) || (RLV_FOLDER_PREFIX_HIDDEN == strFolderName[0]) ) | ||
142 | return false; | ||
143 | |||
144 | for (std::list<std::string>::const_iterator itCrit = m_Criteria.begin(); itCrit != m_Criteria.end(); ++itCrit) | ||
145 | if (std::string::npos == strFolderName.find(*itCrit)) // Return false on the first mismatch | ||
146 | return false; | ||
147 | return true; | ||
148 | } | ||
149 | |||
150 | protected: | ||
151 | std::list<std::string> m_Criteria; | ||
152 | }; | ||
153 | |||
154 | // ============================================================================ | ||
155 | // RlvWearableItemCollector - Inventory item filter used by attach/detach/attachall/detachall/getinvworn | ||
156 | // | ||
157 | |||
158 | class RlvWearableItemCollector : public LLInventoryCollectFunctor | ||
159 | { | ||
160 | public: | ||
161 | RlvWearableItemCollector(const LLUUID& idFolder, bool fAttach, bool fMatchAll) | ||
162 | : m_idFolder(idFolder), m_fAttach(fAttach), m_fMatchAll(fMatchAll) | ||
163 | { | ||
164 | m_Wearable.push_back(idFolder); | ||
165 | } | ||
166 | virtual ~RlvWearableItemCollector() {} | ||
167 | |||
168 | virtual bool operator()(LLInventoryCategory* pFolder, LLInventoryItem* pItem); | ||
169 | |||
170 | const LLUUID& getFoldedParent(const LLUUID& idFolder) const; | ||
171 | protected: | ||
172 | bool m_fAttach; | ||
173 | bool m_fMatchAll; | ||
174 | const LLUUID m_idFolder; | ||
175 | |||
176 | bool onCollectFolder(const LLInventoryCategory* pFolder); | ||
177 | bool onCollectItem(const LLInventoryItem* pItem); | ||
178 | |||
179 | std::list<LLUUID> m_Tentative; | ||
180 | std::list<LLUUID> m_Wearable; | ||
181 | |||
182 | std::map<LLUUID, LLUUID> m_Folding; | ||
183 | }; | ||
184 | |||
185 | // ============================================================================ | ||
186 | // RlvRetainedCommand | ||
187 | // | ||
188 | |||
189 | struct RlvRetainedCommand | ||
190 | { | ||
191 | public: | ||
192 | std::string strObject; | ||
193 | LLUUID idObject; | ||
194 | std::string strCmd; | ||
195 | |||
196 | RlvRetainedCommand(const std::string obj, const LLUUID& uuid, const std::string& cmd) : strObject(obj), idObject(uuid), strCmd(cmd) {} | ||
197 | private: | ||
198 | RlvRetainedCommand(); | ||
199 | }; | ||
200 | typedef std::list<RlvRetainedCommand> rlv_retained_list_t; | ||
201 | |||
202 | // ============================================================================ | ||
203 | // RlvException | ||
204 | // | ||
205 | |||
206 | typedef boost::variant<std::string, LLUUID, S32, ERlvBehaviour> RlvExceptionOption; | ||
207 | |||
208 | struct RlvException | ||
209 | { | ||
210 | public: | ||
211 | LLUUID idObject; // UUID of the object that added the exception | ||
212 | ERlvBehaviour eBehaviour; // Behaviour the exception applies to | ||
213 | RlvExceptionOption varOption; // Exception data (type is dependent on eBehaviour) | ||
214 | |||
215 | RlvException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& option) : idObject(idObj), eBehaviour(eBhvr), varOption(option) {} | ||
216 | private: | ||
217 | RlvException(); | ||
218 | }; | ||
219 | |||
220 | // ============================================================================ | ||
221 | // RlvWLSnapshot | ||
222 | // | ||
223 | |||
224 | struct RlvWLSnapshot | ||
225 | { | ||
226 | public: | ||
227 | static void restoreSnapshot(const RlvWLSnapshot* pWLSnapshot); | ||
228 | static RlvWLSnapshot* takeSnapshot(); | ||
229 | private: | ||
230 | RlvWLSnapshot() {} | ||
231 | |||
232 | bool fIsRunning; | ||
233 | bool fUseLindenTime; | ||
234 | LLWLParamSet WLParams; | ||
235 | }; | ||
236 | |||
237 | // ============================================================================ | ||
238 | // RlvSettings | ||
239 | // | ||
240 | |||
241 | inline BOOL rlvGetSettingBOOL(const std::string& strSetting, BOOL fDefault) | ||
242 | { | ||
243 | return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getBOOL(strSetting) : fDefault; | ||
244 | } | ||
245 | inline BOOL rlvGetPerUserSettingsBOOL(const std::string& strSetting, BOOL fDefault) | ||
246 | { | ||
247 | return (gSavedPerAccountSettings.controlExists(strSetting)) ? gSavedPerAccountSettings.getBOOL(strSetting) : fDefault; | ||
248 | } | ||
249 | |||
250 | class RlvSettings | ||
251 | { | ||
252 | public: | ||
253 | static BOOL getDebug() { return rlvGetSettingBOOL(RLV_SETTING_DEBUG, FALSE); } | ||
254 | static BOOL getForbidGiveToRLV() { return rlvGetSettingBOOL(RLV_SETTING_FORBIDGIVETORLV, TRUE); } | ||
255 | |||
256 | static BOOL getEnableWear(); | ||
257 | static BOOL getHideLockedLayers() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDLAYER, FALSE); } | ||
258 | static BOOL getHideLockedAttach() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDATTACH, FALSE); } | ||
259 | static BOOL getHideLockedInventory() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDINVENTORY, FALSE); } | ||
260 | static BOOL getShowNameTags() { return fShowNameTags; } | ||
261 | |||
262 | #ifdef RLV_EXTENSION_STARTLOCATION | ||
263 | static BOOL getLoginLastLocation() { return rlvGetPerUserSettingsBOOL(RLV_SETTING_LOGINLASTLOCATION, TRUE); } | ||
264 | static void updateLoginLastLocation(); | ||
265 | #endif // RLV_EXTENSION_STARTLOCATION | ||
266 | |||
267 | static BOOL fShowNameTags; | ||
268 | }; | ||
269 | |||
270 | // ============================================================================ | ||
271 | // State keeping classes/structure | ||
272 | // | ||
273 | |||
274 | // ============================================================================ | ||
275 | // Various helper classes/timers/functors | ||
276 | // | ||
277 | |||
278 | class RlvGCTimer : public LLEventTimer | ||
279 | { | ||
280 | public: | ||
281 | RlvGCTimer() : LLEventTimer(30.0) {} | ||
282 | virtual BOOL tick(); | ||
283 | }; | ||
284 | |||
285 | class RlvCurrentlyWorn : public LLInventoryFetchObserver | ||
286 | { | ||
287 | public: | ||
288 | RlvCurrentlyWorn() {} | ||
289 | ~RlvCurrentlyWorn() {} | ||
290 | virtual void done() {} | ||
291 | |||
292 | static void fetchWorn(); | ||
293 | void fetchItem(const LLUUID& idItem); | ||
294 | }; | ||
295 | |||
296 | struct RlvSelectHasLockedAttach : public LLSelectedNodeFunctor | ||
297 | { | ||
298 | virtual bool apply(LLSelectNode* pNode); | ||
299 | }; | ||
300 | |||
301 | struct RlvSelectIsOwnedByOrGroupOwned : public LLSelectedNodeFunctor | ||
302 | { | ||
303 | RlvSelectIsOwnedByOrGroupOwned(const LLUUID& uuid) : m_idAgent(uuid) {} | ||
304 | virtual bool apply(LLSelectNode* pNode); | ||
305 | LLUUID m_idAgent; | ||
306 | }; | ||
307 | |||
308 | struct RlvSelectIsSittingOn : public LLSelectedNodeFunctor | ||
309 | { | ||
310 | RlvSelectIsSittingOn(LLXform* pObject) : m_pObject(pObject) {} | ||
311 | virtual bool apply(LLSelectNode* pNode); | ||
312 | LLXform* m_pObject; | ||
313 | }; | ||
314 | |||
315 | // ============================================================================ | ||
316 | // Various helper functions | ||
317 | // | ||
318 | |||
319 | BOOL rlvAttachToEnabler(void* pParam); | ||
320 | bool rlvCanDeleteOrReturn(); | ||
321 | BOOL rlvEnableWearEnabler(void* pParam); | ||
322 | S32 rlvGetDirectDescendentsCount(const LLInventoryCategory* pFolder, LLAssetType::EType type); | ||
323 | bool rlvIsEmote(const std::string& strUTF8Text); | ||
324 | bool rlvIsValidReplyChannel(S32 nChannel); | ||
325 | bool rlvIsWearingItem(const LLInventoryItem* pItem); | ||
326 | |||
327 | void rlvForceDetach(LLViewerJointAttachment* pAttachPt); | ||
328 | void rlvSendBusyMessage(const LLUUID& idTo, const std::string& strMsg, const LLUUID& idSession = LLUUID::null); | ||
329 | bool rlvSendChatReply(const std::string& strChannel, const std::string& strReply); | ||
330 | bool rlvSendChatReply(S32 nChannel, const std::string& strReply); | ||
331 | |||
332 | std::string rlvGetFirstParenthesisedText(const std::string& strText, std::string::size_type* pidxMatch = NULL); | ||
333 | std::string rlvGetLastParenthesisedText(const std::string& strText, std::string::size_type* pidxStart = NULL); | ||
334 | void rlvStringReplace(std::string& strText, std::string strFrom, const std::string& strTo); | ||
335 | |||
336 | #ifdef RLV_ADVANCED_TOGGLE_RLVA | ||
337 | // "Advanced / RLVa / Enable RLV" menu option | ||
338 | void rlvToggleEnabled(void*); | ||
339 | BOOL rlvGetEnabled(void*); | ||
340 | #endif // RLV_ADVANCED_TOGGLE_RLVA | ||
341 | |||
342 | // ============================================================================ | ||
343 | // Debug helper functions | ||
344 | // | ||
345 | |||
346 | // ============================================================================ | ||
347 | // Inlined class member functions | ||
348 | // | ||
349 | |||
350 | // Checked: 2009-09-19 (RLVa-1.0.3d) | ||
351 | inline std::string RlvCommand::asString() const | ||
352 | { | ||
353 | // NOTE: @clear=<param> should be represented as clear:<param> | ||
354 | return (m_eParamType != RLV_TYPE_CLEAR) | ||
355 | ? (!m_strOption.empty()) ? (std::string(m_strBehaviour)).append(":").append(m_strOption) : (std::string(m_strBehaviour)) | ||
356 | : (!m_strParam.empty()) ? (std::string(m_strBehaviour)).append(":").append(m_strParam) : (std::string(m_strBehaviour)); | ||
357 | } | ||
358 | |||
359 | inline bool RlvCommand::operator ==(const RlvCommand& rhs) const | ||
360 | { | ||
361 | // The specification notes that "@detach=n" is semantically identical to "@detach=add" (same for "y" and "rem" | ||
362 | return (m_strBehaviour == rhs.m_strBehaviour) && (m_strOption == rhs.m_strOption) && | ||
363 | ( (RLV_TYPE_UNKNOWN != m_eParamType) ? (m_eParamType == rhs.m_eParamType) : (m_strParam == rhs.m_strParam) ); | ||
364 | } | ||
365 | |||
366 | inline void RlvCurrentlyWorn::fetchItem(const LLUUID& idItem) | ||
367 | { | ||
368 | if (idItem.notNull()) | ||
369 | { | ||
370 | LLInventoryFetchObserver::item_ref_t idItems; | ||
371 | idItems.push_back(idItem); | ||
372 | fetchItems(idItems); | ||
373 | } | ||
374 | } | ||
375 | |||
376 | inline bool RlvCommand::hasStrictVariant(ERlvBehaviour eBhvr) | ||
377 | { | ||
378 | switch (eBhvr) | ||
379 | { | ||
380 | case RLV_BHVR_RECVCHAT: | ||
381 | case RLV_BHVR_RECVEMOTE: | ||
382 | case RLV_BHVR_RECVIM: | ||
383 | case RLV_BHVR_SENDIM: | ||
384 | case RLV_BHVR_TPLURE: | ||
385 | case RLV_BHVR_SENDCHANNEL: | ||
386 | return true; | ||
387 | default: | ||
388 | return false; | ||
389 | } | ||
390 | } | ||
391 | |||
392 | // ============================================================================ | ||
393 | // Inlined helper functions | ||
394 | // | ||
395 | |||
396 | inline bool rlvIsEmote(const std::string& strUTF8Text) | ||
397 | { | ||
398 | return (strUTF8Text.length() > 4) && ( (strUTF8Text.compare(0, 4, "/me ") == 0) || (strUTF8Text.compare(0, 4, "/me'") == 0) ); | ||
399 | } | ||
400 | |||
401 | // Checked: 2009-09-05 (RLVa-1.0.2a) | Added: RLVa-1.0.2a | ||
402 | inline bool rlvIsValidReplyChannel(S32 nChannel) | ||
403 | { | ||
404 | return (nChannel > 0) && (CHAT_CHANNEL_DEBUG != nChannel); | ||
405 | } | ||
406 | |||
407 | // Checked: 2009-08-05 (RLVa-1.0.1e) | Added: RLVa-1.0.0e | ||
408 | inline bool rlvSendChatReply(const std::string& strChannel, const std::string& strReply) | ||
409 | { | ||
410 | S32 nChannel; | ||
411 | return (LLStringUtil::convertToS32(strChannel, nChannel)) ? rlvSendChatReply(nChannel, strReply) : false; | ||
412 | } | ||
413 | |||
414 | // ============================================================================ | ||
415 | |||
416 | #endif // RLV_HELPER_H | ||
diff --git a/linden/indra/newview/rlvmultistringsearch.cpp b/linden/indra/newview/rlvmultistringsearch.cpp new file mode 100644 index 0000000..0aa9889 --- /dev/null +++ b/linden/indra/newview/rlvmultistringsearch.cpp | |||
@@ -0,0 +1,196 @@ | |||
1 | #include "llviewerprecompiledheaders.h" | ||
2 | |||
3 | #include "rlvmultistringsearch.h" | ||
4 | |||
5 | // ==================================================================================== | ||
6 | |||
7 | #ifndef RLV_LOWORD | ||
8 | #define RLV_LOWORD(x) ( (U16)( ((U32)x) & 0xFFFF) ) | ||
9 | #endif // RLV_LOWORD | ||
10 | |||
11 | #ifndef RLV_HIWORD | ||
12 | #define RLV_HIWORD(x) ( (U16)( (((U32)x) >> 16) & 0xFFFF) ) | ||
13 | #endif // RLV_HIWORD | ||
14 | |||
15 | // ==================================================================================== | ||
16 | |||
17 | // (TODO-RLV: oops, forgot I was experimenting with word matching, get rid of that again?) | ||
18 | #define isLetter(ch) \ | ||
19 | ( ( (ch >= 'a') && (ch <= 'z') ) || ( (ch >= 'A') && (ch <= 'Z') ) ) | ||
20 | |||
21 | RlvMultiStringSearch::RlvMultiStringSearch() | ||
22 | : m_FSM(256), // Start our FSM with room for 256 states (enough for all attachment point names) | ||
23 | m_cntState(0) | ||
24 | { | ||
25 | } | ||
26 | |||
27 | void RlvMultiStringSearch::addKeyword(const std::string& strKeyword, U16 nParam) { | ||
28 | U16 nCurState = 0; // Always start the loop at state 0 | ||
29 | |||
30 | // | ||
31 | // Make sure there are enough unused rows to accomodate the worst case (== strKeyword.length() new states) | ||
32 | // | ||
33 | size_t nMaxState = m_FSM.getSize(); | ||
34 | if (m_cntState + strKeyword.length() > nMaxState) | ||
35 | // Allocate enough new rows (in batches of 256 rows) | ||
36 | m_FSM.resize(nMaxState + ((strKeyword.length() / 256) + 1) * 256); | ||
37 | |||
38 | // | ||
39 | // Walk the string character by character | ||
40 | // | ||
41 | for (int idxCh = 0, cntCh = strKeyword.length(); idxCh < cntCh; idxCh++) { | ||
42 | // Look up the next state for current character | ||
43 | unsigned char ch = strKeyword[idxCh]; | ||
44 | U16 nState = RLV_LOWORD(m_FSM[nCurState][ch]); | ||
45 | |||
46 | // If we're at the last character in the keyword then set the termination bit | ||
47 | if (cntCh - 1 == idxCh) | ||
48 | { | ||
49 | // (Only set the termination bit for the state because this keyword might be a substring of another keyword) | ||
50 | m_FSM[nCurState][ch] = (nParam << 16) | (nState | 0x8000); | ||
51 | } | ||
52 | else if ( (nState & 0x7FFF) == 0 ) // If the new state is 0 then we're creating a new path | ||
53 | { | ||
54 | // (Preserve the termination bit because another keyword might be a substring of this one) | ||
55 | nState = ++m_cntState | (nState & 0x8000); | ||
56 | |||
57 | // Store the new path in the FSM | ||
58 | //m_FSM[nCurState][ch] = (nParam << 16) | nState; | ||
59 | m_FSM[nCurState][ch] |= nState; | ||
60 | } | ||
61 | |||
62 | nCurState = nState & 0x7FFF; // Mask out the termination bit since we never need it for the current state | ||
63 | } | ||
64 | } | ||
65 | |||
66 | // (Iterating over a "const char*" is *significantly* faster than "std::string") | ||
67 | bool RlvMultiStringSearch::findNext(const char* pstrText, int idxCh, int cntCh, RlvMultiStringSearchMatch& match, bool fWordMatch) const | ||
68 | { | ||
69 | U16 nCurState = 0; // Always start the loop at state 0 | ||
70 | U32 nLastMatch = 0; // Holds the state of the last (possibly partial) keyword match | ||
71 | |||
72 | // | ||
73 | // Walk the string character by character | ||
74 | // | ||
75 | for (; idxCh < cntCh; idxCh++) | ||
76 | { | ||
77 | // Keep track of the current state in case we need to backtrack | ||
78 | U16 nPrevState = nCurState; | ||
79 | |||
80 | // If we're currently in state 0, save the current character index (for backtracking or as keyword index match) | ||
81 | if (nCurState == 0) | ||
82 | match.idxMatch = idxCh; | ||
83 | |||
84 | // Look up the current character in the FSM | ||
85 | unsigned char ch = (unsigned char)pstrText[idxCh]; | ||
86 | U32 nCell = m_FSM[nCurState & 0x7FFF][ch]; | ||
87 | |||
88 | // If the termination bit is set then we found a keyword substring match | ||
89 | // If the next state is non-zero then we can't stop yet because the matched keyword might be a substring of another keyword | ||
90 | if (nCell & 0x8000) | ||
91 | { | ||
92 | if ( 0 == (nCell & 0x7FFF) ) | ||
93 | { | ||
94 | // Termination bit with 'next state' equal to 0: matched keyword which isn't also a substring of any other keyword | ||
95 | match.lenMatch = idxCh - match.idxMatch + 1; | ||
96 | match.nParam = RLV_HIWORD(nCell); | ||
97 | |||
98 | // Rudimentary word matching: check if the match is a 'word' | ||
99 | if | ||
100 | ( | ||
101 | (!fWordMatch) || | ||
102 | ( | ||
103 | ( (0 == match.idxMatch) || (!isLetter(pstrText[match.idxMatch - 1])) ) && // Start of string OR non-letter | ||
104 | ( (!isLetter(pstrText[match.idxMatch + match.lenMatch])) ) | ||
105 | ) | ||
106 | ) | ||
107 | { | ||
108 | return true; | ||
109 | } | ||
110 | |||
111 | // Not a word, but there's no need to backtrack: we can move on from the character after the current one | ||
112 | nCell = 0; // Will set nCurState == 0 further down | ||
113 | match.idxMatch = idxCh; // Makes sure we move on to the next character instead of backtracking | ||
114 | } | ||
115 | else | ||
116 | { | ||
117 | nLastMatch = nCell; | ||
118 | |||
119 | // In case it turns out that we need to backtrack and return this match, save the length of this match | ||
120 | match.lenMatch = idxCh - match.idxMatch + 1; | ||
121 | } | ||
122 | } | ||
123 | |||
124 | nCurState = RLV_LOWORD(nCell); | ||
125 | |||
126 | // If our new state is 0, but our previous state wasn't, then we followed a false lead and need to backtrack | ||
127 | if ( (nPrevState != 0) && (nCurState == 0) ) | ||
128 | { | ||
129 | // * if nLastMatch == 0 then we need to backtrack and keep going | ||
130 | // * if nLastMatch != 0 then we previously encountered a keyword match so return that one | ||
131 | if (nLastMatch) { | ||
132 | // Rudimentary word matching: check if the match is a 'word' | ||
133 | if | ||
134 | ( | ||
135 | (!fWordMatch) || | ||
136 | ( | ||
137 | ( (0 == match.idxMatch) || (!isLetter(pstrText[match.idxMatch - 1])) ) && // Start of string OR non-letter | ||
138 | ( (!isLetter(pstrText[match.idxMatch + match.lenMatch])) ) | ||
139 | ) | ||
140 | ) | ||
141 | { | ||
142 | match.nParam = RLV_HIWORD(nLastMatch); | ||
143 | return true; | ||
144 | } else | ||
145 | // Not a word match, so throw away this partial match and backtrack | ||
146 | nLastMatch = 0; | ||
147 | } | ||
148 | |||
149 | idxCh = match.idxMatch; | ||
150 | } | ||
151 | } | ||
152 | |||
153 | // We encountered a match, but while investigating whether it was a substring of another keyword we ran out of characters | ||
154 | if (nLastMatch) | ||
155 | { | ||
156 | // Rudimentary word matching: check if we started at the beginning of a word (we know the one behind us is '\0') | ||
157 | if ( (!fWordMatch) || ( (0 == match.idxMatch) || (!isLetter(pstrText[match.idxMatch - 1])) ) ) | ||
158 | { | ||
159 | match.nParam = RLV_HIWORD(nLastMatch); | ||
160 | return true; | ||
161 | } | ||
162 | } | ||
163 | |||
164 | // None of the keywords is contained in the string: return failure | ||
165 | match.idxMatch = -1; | ||
166 | return false; | ||
167 | } | ||
168 | |||
169 | bool RlvMultiStringSearch::findLast(const std::string& strText, RlvMultiStringSearchMatch& match) const { | ||
170 | RlvMultiStringSearchMatch matchTemp; | ||
171 | match.idxMatch = -1; // (Needed to make the return work in case we don't find anything) | ||
172 | matchTemp.lenMatch = 0; // (Needed to make the first loop iteration start at 0) | ||
173 | |||
174 | // Iterating over a "const char*" is *significantly* faster than "std::string" | ||
175 | const char* pstrText = strText.c_str(); | ||
176 | int lenText = strText.length(); | ||
177 | |||
178 | while (findNext(pstrText, matchTemp.idxMatch + matchTemp.lenMatch + 1, lenText, matchTemp)) | ||
179 | match = matchTemp; | ||
180 | |||
181 | return (match.idxMatch != -1); | ||
182 | } | ||
183 | |||
184 | std::vector<RlvMultiStringSearchMatch> RlvMultiStringSearch::findAll(const std::string& strText) { | ||
185 | std::vector<RlvMultiStringSearchMatch> arMatch; | ||
186 | |||
187 | RlvMultiStringSearchMatch match; | ||
188 | match.lenMatch = 0; // (Needed to make the first loop iteration start at 0) | ||
189 | |||
190 | while (findNext(strText, match.idxMatch + match.lenMatch + 1, match)) | ||
191 | arMatch.push_back(match); | ||
192 | |||
193 | return arMatch; | ||
194 | } | ||
195 | |||
196 | // ==================================================================================== | ||
diff --git a/linden/indra/newview/rlvmultistringsearch.h b/linden/indra/newview/rlvmultistringsearch.h new file mode 100644 index 0000000..43b0172 --- /dev/null +++ b/linden/indra/newview/rlvmultistringsearch.h | |||
@@ -0,0 +1,191 @@ | |||
1 | #ifndef RLV_MULTISTRINGSEARCH_H | ||
2 | #define RLV_MULTISTRINGSEARCH_H | ||
3 | |||
4 | // ============================================================================ | ||
5 | // Template classes for our state machine (2 dimensional array of type T) | ||
6 | |||
7 | // STL vector | ||
8 | template<typename T> class RlvMultiStringSearchFSM_STL | ||
9 | { | ||
10 | public: | ||
11 | /* | ||
12 | * Constructor/destructor | ||
13 | */ | ||
14 | |||
15 | // Initialize the FSM with an initial capacity of 'nCapacity' states | ||
16 | RlvMultiStringSearchFSM_STL(size_t nCapacity) | ||
17 | { | ||
18 | m_arFSM.reserve(nCapacity); | ||
19 | |||
20 | T* pT; | ||
21 | for (size_t idx = 0; idx < nCapacity; idx++) | ||
22 | { | ||
23 | // The width of each row is determined by the alphabet we're using (in this case UTF-8 | ||
24 | // so while every character might consist of multiple bytes there are | ||
25 | // still only 256 'columns' in the state machine) | ||
26 | pT = new T[256](); | ||
27 | |||
28 | // The above *should* initialize to 0 but since we can't account for every compiler doing it :( | ||
29 | memset(pT, 0, sizeof(T) * 256); | ||
30 | |||
31 | m_arFSM.push_back(pT); | ||
32 | } | ||
33 | }; | ||
34 | |||
35 | ~RlvMultiStringSearchFSM_STL() | ||
36 | { | ||
37 | // Free any memory we previously allocated | ||
38 | for (int idx = 0, cnt = m_arFSM.size(); idx < cnt; idx++) | ||
39 | delete[] m_arFSM[idx]; | ||
40 | } | ||
41 | |||
42 | /* | ||
43 | * Operators | ||
44 | */ | ||
45 | // ASSERTION: nState < m_arFSM.size() at all times | ||
46 | // In other words: do *NOT* go out of bounds on the array (no memory will have allocated for that non-existing state) | ||
47 | // (There probably should be a check for that even in release but it seems wasteful, just don't do it :p) | ||
48 | inline T* operator[](size_t nState) | ||
49 | { | ||
50 | //#ifdef _DEBUG | ||
51 | // assert( nState < m_arFSM.size() ); | ||
52 | //#endif // _DEBUG | ||
53 | |||
54 | return m_arFSM[nState]; | ||
55 | } | ||
56 | inline const T* operator[](size_t nState) const | ||
57 | { | ||
58 | //#ifdef _DEBUG | ||
59 | // assert( nState < m_arFSM.size() ); | ||
60 | //#endif // _DEBUG | ||
61 | |||
62 | return m_arFSM[nState]; | ||
63 | } | ||
64 | |||
65 | /* | ||
66 | * Public member functions | ||
67 | */ | ||
68 | |||
69 | size_t getSize() const { return m_arFSM.size(); } | ||
70 | |||
71 | void resize(size_t nNewCapacity) | ||
72 | { | ||
73 | // Get our current capacity (only rows > capacity need memory allocated) | ||
74 | size_t nCurCapacity = m_arFSM.capacity(); | ||
75 | |||
76 | // Only expand, never shrink | ||
77 | if (nNewCapacity <= nCurCapacity) | ||
78 | { | ||
79 | //#ifdef _DEBUG | ||
80 | // assert(false); | ||
81 | //#endif //_DEBUG | ||
82 | |||
83 | return; | ||
84 | } | ||
85 | m_arFSM.resize(nNewCapacity); | ||
86 | |||
87 | // For each new state we added, allocate memory for the columns | ||
88 | for(size_t idx = nCurCapacity; idx < nNewCapacity; idx++) | ||
89 | // The memset is redundant (or rather *should* be) but since we can't account for every compiler doing it :( | ||
90 | m_arFSM[idx] = (T*)memset(new T[256](), 0, sizeof(T) * 256); | ||
91 | } | ||
92 | |||
93 | protected: | ||
94 | /* | ||
95 | * Member variables | ||
96 | */ | ||
97 | std::vector<T*> m_arFSM; | ||
98 | }; | ||
99 | |||
100 | // ============================================================================ | ||
101 | |||
102 | struct RlvMultiStringSearchMatch | ||
103 | { | ||
104 | int idxMatch; // Starting character index into the string of the matched keyword (-1 if no match) | ||
105 | int lenMatch; // Length of the matched keyword (undefined if no match) | ||
106 | U16 nParam; // User supplied parameter for the matched keyword (undefined if no match) | ||
107 | |||
108 | RlvMultiStringSearchMatch() : idxMatch(-1) {} | ||
109 | }; | ||
110 | |||
111 | // ============================================================================ | ||
112 | // The actual search class | ||
113 | |||
114 | class RlvMultiStringSearch | ||
115 | { | ||
116 | public: | ||
117 | /* | ||
118 | * Constructor/destructor | ||
119 | */ | ||
120 | RlvMultiStringSearch(); | ||
121 | //~RlvMultiStringSearch(); | ||
122 | |||
123 | /* | ||
124 | * Public member functions | ||
125 | */ | ||
126 | |||
127 | // Add a keyword to the state machine (if it already exists then it will simply overwrite the existing parameter) | ||
128 | void addKeyword(const std::string& strKeyword, U16 nParam); | ||
129 | |||
130 | BOOL getExactMatchParam(const std::string& strText, U16& nParam) const | ||
131 | { | ||
132 | RlvMultiStringSearchMatch match; | ||
133 | if (findFirst(strText, match)) | ||
134 | { | ||
135 | // We have an exact match if the starting index is 0 | ||
136 | // and the length of the match matches the length of the string | ||
137 | if ( (0 == match.idxMatch) && (match.lenMatch == (int)strText.length()) ) | ||
138 | { | ||
139 | nParam = match.nParam; | ||
140 | return TRUE; | ||
141 | } | ||
142 | } | ||
143 | |||
144 | return FALSE; // Fall-through: no (exact) match | ||
145 | } | ||
146 | |||
147 | // Finds the first occurance of any keyword in the supplied string | ||
148 | bool findFirst(const std::string& strText, RlvMultiStringSearchMatch& match) const; | ||
149 | // Finds the next occurance of any keyword in the supplied string | ||
150 | bool findNext(const std::string& strText, int idxCh, RlvMultiStringSearchMatch& match) const; | ||
151 | // Finds all occurances of any keyword in the supplied string | ||
152 | std::vector<RlvMultiStringSearchMatch> findAll(const std::string& strText); | ||
153 | // Finds the last occurance of any keyword in the supplied string (non-optimized) | ||
154 | bool findLast(const std::string& strText, RlvMultiStringSearchMatch& match) const; | ||
155 | |||
156 | protected: | ||
157 | // Finds the next occurance of any keyword in the supplied string | ||
158 | bool findNext(const char* pstrText, int idxCh, int cntCh, RlvMultiStringSearchMatch& match, bool fWordMatch = true) const; | ||
159 | |||
160 | /* | ||
161 | * Member variables | ||
162 | */ | ||
163 | RlvMultiStringSearchFSM_STL<U32> m_FSM; // Our finite state machine (4 bytes * 256 = 1Kb of memory/state) | ||
164 | // HIWORD(U32) = 16-bits of user data | ||
165 | // LOWORD(U32) = ABBBBBBBBBBBBBBB | ||
166 | // A = termination bit | ||
167 | // If (set) and (B == 0): match | ||
168 | // If (set) and (B != 0): match, but might only be a substring of another keyword | ||
169 | // B = next state (0..32767) | ||
170 | // If (B == 0): false lead -> backtrack | ||
171 | // If (B != 0): partial keyword match, next state | ||
172 | size_t m_cntState; // The number of states in the FSM (= the number of *used* rows in the array) | ||
173 | }; | ||
174 | |||
175 | // ============================================================================ | ||
176 | // Inlined member functions | ||
177 | // | ||
178 | |||
179 | inline bool RlvMultiStringSearch::findFirst(const std::string& strText, RlvMultiStringSearchMatch& match) const | ||
180 | { | ||
181 | return findNext(strText.c_str(), 0, strText.length(), match); | ||
182 | } | ||
183 | |||
184 | inline bool RlvMultiStringSearch::findNext(const std::string& strText, int idxCh, RlvMultiStringSearchMatch& match) const | ||
185 | { | ||
186 | return findNext(strText.c_str(), idxCh, strText.length(), match); | ||
187 | } | ||
188 | |||
189 | // ============================================================================ | ||
190 | |||
191 | #endif // RLV_MULTISTRINGSEARCH_H | ||
diff --git a/linden/indra/newview/skins/default/colors_base.xml b/linden/indra/newview/skins/default/colors_base.xml index b498b4c..b90f8aa 100644 --- a/linden/indra/newview/skins/default/colors_base.xml +++ b/linden/indra/newview/skins/default/colors_base.xml | |||
@@ -68,11 +68,9 @@ | |||
68 | <TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255" /> <!-- Text of read-only items embedded in notecards --> | 68 | <TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255" /> <!-- Text of read-only items embedded in notecards --> |
69 | <TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> | 69 | <TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> |
70 | <TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> | 70 | <TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> |
71 | <ScriptBgReadOnlyColor value="100, 100, 100, 255" /> <!-- Not used --> | ||
72 | <TextLinkColor value="144, 165, 208, 255"/> | 71 | <TextLinkColor value="144, 165, 208, 255"/> |
73 | <TextLinkHoverColor value="255, 255, 255, 255"/> | 72 | <TextLinkHoverColor value="255, 255, 255, 255"/> |
74 | 73 | ||
75 | |||
76 | <!-- LISTBOXES --> | 74 | <!-- LISTBOXES --> |
77 | <ScrollBgReadOnlyColor value="200, 209, 204, 255" /> <!-- Background of read only lists --> | 75 | <ScrollBgReadOnlyColor value="200, 209, 204, 255" /> <!-- Background of read only lists --> |
78 | <ScrollBgWriteableColor value="200, 209, 204, 255" /> <!-- Background of editable lists, e.g. groups--> | 76 | <ScrollBgWriteableColor value="200, 209, 204, 255" /> <!-- Background of editable lists, e.g. groups--> |
@@ -84,6 +82,7 @@ | |||
84 | <ScrollHighlightedColor value="183, 184, 188, 128" /> <!-- Hover color --> | 82 | <ScrollHighlightedColor value="183, 184, 188, 128" /> <!-- Hover color --> |
85 | <ScrollbarThumbColor value="60, 76, 124, 255" /> <!-- Scroll bar --> | 83 | <ScrollbarThumbColor value="60, 76, 124, 255" /> <!-- Scroll bar --> |
86 | <ScrollbarTrackColor value="153, 154, 158, 255" /> <!-- Scroll bar background --> | 84 | <ScrollbarTrackColor value="153, 154, 158, 255" /> <!-- Scroll bar background --> |
85 | <ScrollReadOnlyColor value="100, 100, 100, 255" /> <!-- Color for inactive but not disabled lists --> | ||
87 | 86 | ||
88 | <!-- MENUS --> | 87 | <!-- MENUS --> |
89 | <MenuBarBgColor value="62, 62, 62, 255" /> <!-- Menu bar background --> | 88 | <MenuBarBgColor value="62, 62, 62, 255" /> <!-- Menu bar background --> |
@@ -163,6 +162,9 @@ | |||
163 | <MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> | 162 | <MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> |
164 | <MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> | 163 | <MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> |
165 | <MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> | 164 | <MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> |
165 | <MapSelected value="255, 0, 0, 255" /> <!-- Selected avatars' glyph color --> | ||
166 | <MapImpDev value="90, 45, 101, 255" /> <!-- Imprudence developers glyph color --> | ||
167 | <MapPartner value="214, 40, 107, 255" /> <!-- (unused) Your avatar's partner's glyph color --> | ||
166 | 168 | ||
167 | <!-- MINI-MAP --> | 169 | <!-- MINI-MAP --> |
168 | <NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> | 170 | <NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> |
diff --git a/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png new file mode 100644 index 0000000..f9ea7a2 --- /dev/null +++ b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/html/en-us/loading/loading.html b/linden/indra/newview/skins/default/html/en-us/loading/loading.html index 1c62d2f..97174b0 100644 --- a/linden/indra/newview/skins/default/html/en-us/loading/loading.html +++ b/linden/indra/newview/skins/default/html/en-us/loading/loading.html | |||
@@ -2,7 +2,7 @@ | |||
2 | <table width="100%" height="100%" border="0"> | 2 | <table width="100%" height="100%" border="0"> |
3 | <tr> | 3 | <tr> |
4 | <td align="center" valign="middle" style="font-size:0.8em;"> | 4 | <td align="center" valign="middle" style="font-size:0.8em;"> |
5 | <img src="sl_logo_rotate_black.gif" align="absmiddle"><br/> loading... | 5 | <img src="imprudence_loading.png" align="absmiddle"><br/> loading... |
6 | </td> | 6 | </td> |
7 | </tr> | 7 | </tr> |
8 | </table> | 8 | </table> |
diff --git a/linden/indra/newview/skins/default/textures/arrow_left.tga b/linden/indra/newview/skins/default/textures/arrow_left.tga new file mode 100644 index 0000000..68e6280 --- /dev/null +++ b/linden/indra/newview/skins/default/textures/arrow_left.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/arrow_right.tga b/linden/indra/newview/skins/default/textures/arrow_right.tga new file mode 100644 index 0000000..7a5a30e --- /dev/null +++ b/linden/indra/newview/skins/default/textures/arrow_right.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_32.tga new file mode 100644 index 0000000..aebeab4 --- /dev/null +++ b/linden/indra/newview/skins/default/textures/map_avatar_32.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga new file mode 100644 index 0000000..65bd056 --- /dev/null +++ b/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga new file mode 100644 index 0000000..496c44b --- /dev/null +++ b/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga new file mode 100644 index 0000000..782207e --- /dev/null +++ b/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/default/textures/textures.xml b/linden/indra/newview/skins/default/textures/textures.xml index 34c9dea..0a3aee7 100644 --- a/linden/indra/newview/skins/default/textures/textures.xml +++ b/linden/indra/newview/skins/default/textures/textures.xml | |||
@@ -150,7 +150,6 @@ | |||
150 | 150 | ||
151 | <texture name="map_avatar_16.tga"/> | 151 | <texture name="map_avatar_16.tga"/> |
152 | <texture name="map_avatar_8.tga"/> | 152 | <texture name="map_avatar_8.tga"/> |
153 | <texture name="map_avatar_you_8.tga"/> | ||
154 | <texture name="map_event.tga"/> | 153 | <texture name="map_event.tga"/> |
155 | <texture name="map_event_mature.tga"/> | 154 | <texture name="map_event_mature.tga"/> |
156 | <texture name="map_home.tga"/> | 155 | <texture name="map_home.tga"/> |
@@ -365,6 +364,9 @@ | |||
365 | <texture name="icn_label_music.tga"/> | 364 | <texture name="icn_label_music.tga"/> |
366 | <texture name="icn_label_media.tga"/> | 365 | <texture name="icn_label_media.tga"/> |
367 | <texture name="arrow_down.tga"/> | 366 | <texture name="arrow_down.tga"/> |
367 | <texture name="arrow_up.tga"/> | ||
368 | <texture name="arrow_left.tga"/> | ||
369 | <texture name="arrow_right.tga"/> | ||
368 | <texture name="cloud-particle.j2c" use_mips="true"/> | 370 | <texture name="cloud-particle.j2c" use_mips="true"/> |
369 | 371 | ||
370 | <texture name="skin_thumbnail_default.png" preload="true" /> | 372 | <texture name="skin_thumbnail_default.png" preload="true" /> |
diff --git a/linden/indra/newview/skins/default/xui/de/floater_about.xml b/linden/indra/newview/skins/default/xui/de/floater_about.xml index 28785c6..1f7518a 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about.xml | |||
@@ -1,7 +1,24 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater name="floater_about" title="Über Second Life"> | 2 | <floater name="floater_about" title="Über Second Life"> |
3 | <text_editor name="credits_editor"> | 3 | <text_editor name="credits_editor"> |
4 | Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl und vielen anderen. | 4 | The Imprudence Viewer was rocked hard by: |
5 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | ||
6 | http://www.imprudenceviewer.org | ||
7 | |||
8 | Imprudence is so awesome thanks to contributions from many generous people: | ||
9 | |||
10 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. | ||
11 | |||
12 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. | ||
13 | |||
14 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. | ||
15 | |||
16 | For a complete list of who did what, read the release notes! | ||
17 | |||
18 | |||
19 | Second Life Copyright (C) 1999-2009 Linden Research Inc. | ||
20 | |||
21 | Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les und vielen anderen. | ||
5 | 22 | ||
6 | Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar | 23 | Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar |
7 | 24 | ||
diff --git a/linden/indra/newview/skins/default/xui/de/floater_choose_group.xml b/linden/indra/newview/skins/default/xui/de/floater_choose_group.xml index dd29aa7..327cb02 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_choose_group.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_choose_group.xml | |||
@@ -5,4 +5,7 @@ | |||
5 | </text> | 5 | </text> |
6 | <button label="OK" label_selected="OK" name="OK" /> | 6 | <button label="OK" label_selected="OK" name="OK" /> |
7 | <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" /> | 7 | <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" /> |
8 | <string name="none"> | ||
9 | keine | ||
10 | </string> | ||
8 | </floater> | 11 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/de/panel_groups.xml b/linden/indra/newview/skins/default/xui/de/panel_groups.xml index 95a2ef1..a7d6f98 100644 --- a/linden/indra/newview/skins/default/xui/de/panel_groups.xml +++ b/linden/indra/newview/skins/default/xui/de/panel_groups.xml | |||
@@ -12,4 +12,7 @@ | |||
12 | <button label="Verlassen" name="Leave" /> | 12 | <button label="Verlassen" name="Leave" /> |
13 | <button label="Erstellen..." name="Create" /> | 13 | <button label="Erstellen..." name="Create" /> |
14 | <button label="Suchen..." name="Search..." /> | 14 | <button label="Suchen..." name="Search..." /> |
15 | <string name="none"> | ||
16 | keine | ||
17 | </string> | ||
15 | </panel> | 18 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/alerts.xml b/linden/indra/newview/skins/default/xui/en-us/alerts.xml index 4a36636..abf45cc 100644 --- a/linden/indra/newview/skins/default/xui/en-us/alerts.xml +++ b/linden/indra/newview/skins/default/xui/en-us/alerts.xml | |||
@@ -1,6 +1,2893 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <alerts> | 2 | <alerts> |
3 | <alert modal="true" name="ConfirmTeleportHome"> | 3 | <!-- TODO: Make sure all the Imprudence <= 1.2 alerts get pulled out before this file goes bye-bye. --> |
4 | <alert modal="true" name="AddFriendWithMessage" title="Add Friend"> | ||
5 | <message name="message"> | ||
6 | Friends can give permissions to track each | ||
7 | other on the map and receive online status updates. | ||
8 | |||
9 | Offer friendship to [NAME]? | ||
10 | </message> | ||
11 | <editline name="editline"> | ||
12 | Would you be my friend? | ||
13 | </editline> | ||
14 | <option name="Offer"> | ||
15 | OK | ||
16 | </option> | ||
17 | <option name="Cancel"> | ||
18 | Cancel | ||
19 | </option> | ||
20 | </alert> | ||
21 | <alert modal="true" name="RemoveFromFriends"> | ||
22 | <message name="message"> | ||
23 | Do you want to remove [FIRST_NAME] [LAST_NAME] from your Friends List? | ||
24 | </message> | ||
25 | <option name="Remove"> | ||
26 | OK | ||
27 | </option> | ||
28 | <option name="Cancel"> | ||
29 | Cancel | ||
30 | </option> | ||
31 | </alert> | ||
32 | <alert modal="true" name="RemoveMultipleFromFriends"> | ||
33 | <message name="message"> | ||
34 | Do you want to remove multiple friends from your Friends list? | ||
35 | </message> | ||
36 | <option name="Remove"> | ||
37 | OK | ||
38 | </option> | ||
39 | <option name="Cancel"> | ||
40 | Cancel | ||
41 | </option> | ||
42 | </alert> | ||
43 | <alert modal="true" name="GodDeleteAllScriptedPublicObjectsByUser"> | ||
44 | <message name="message"> | ||
45 | Are you sure you want to delete all scripted objects owned by | ||
46 | ** [AVATAR_NAME] ** | ||
47 | on all others land in this sim? | ||
48 | </message> | ||
49 | <option name="DELETE!!"> | ||
50 | OK | ||
51 | </option> | ||
52 | <option default="true" name="Cancel"> | ||
53 | Cancel | ||
54 | </option> | ||
55 | </alert> | ||
56 | <alert modal="true" name="GodDeleteAllScriptedObjectsByUser"> | ||
57 | <message name="message"> | ||
58 | Are you sure you want to DELETE ALL scripted objects owned by | ||
59 | ** [AVATAR_NAME] ** | ||
60 | on ALL LAND in this sim? | ||
61 | </message> | ||
62 | <option name="!!DELETEALL!!"> | ||
63 | OK | ||
64 | </option> | ||
65 | <option default="true" name="Cancel"> | ||
66 | Cancel | ||
67 | </option> | ||
68 | </alert> | ||
69 | <alert modal="true" name="GodDeleteAllObjectsByUser"> | ||
70 | <message name="message"> | ||
71 | Are you sure you want to DELETE ALL objects (scripted or not) | ||
72 | owned by | ||
73 | ** [AVATAR_NAME] ** | ||
74 | on ALL LAND in this sim? | ||
75 | </message> | ||
76 | <option name="!!DELETEALL!!"> | ||
77 | OK | ||
78 | </option> | ||
79 | <option default="true" name="Cancel"> | ||
80 | Cancel | ||
81 | </option> | ||
82 | </alert> | ||
83 | <alert modal="true" name="PublishGroupInfoToWeb"> | ||
84 | <message name="message"> | ||
85 | Selecting the "Publish on the Web" option allows us to publish | ||
86 | the group name, insignia, charter, titles, and founder on the | ||
87 | [SECOND_LIFE] website. You are responsible for indicating if any | ||
88 | of the above content is considered Mature according to the | ||
89 | Community Standards. | ||
90 | </message> | ||
91 | </alert> | ||
92 | <alert modal="true" name="BlankClassifiedName"> | ||
93 | <message name="message"> | ||
94 | You must specify a name for your classified. | ||
95 | </message> | ||
96 | </alert> | ||
97 | <alert modal="true" name="MinClassifiedPrice"> | ||
98 | <message name="message"> | ||
99 | Price to pay for listing must be at least L$[MIN_PRICE]. | ||
100 | |||
101 | Please enter a higher price. | ||
102 | </message> | ||
103 | </alert> | ||
104 | <alert modal="true" name="CantLoadVertexShaders"> | ||
105 | <message name="message"> | ||
106 | Unable to load Vertex Shaders. | ||
107 | </message> | ||
108 | </alert> | ||
109 | <alert modal="true" name="ConfirmObjectDeleteLock"> | ||
110 | <message name="message"> | ||
111 | At least one of the items you have selected is locked. | ||
112 | |||
113 | Are you sure you want to delete these items? | ||
114 | </message> | ||
115 | <option name="Yes"> | ||
116 | OK | ||
117 | </option> | ||
118 | <option name="No"> | ||
119 | Cancel | ||
120 | </option> | ||
121 | </alert> | ||
122 | <alert modal="true" name="ConfirmObjectDeleteNoCopy"> | ||
123 | <message name="message"> | ||
124 | At least one of the items you have selected is not copyable. | ||
125 | |||
126 | Are you sure you want to delete these items? | ||
127 | </message> | ||
128 | <option name="Yes"> | ||
129 | OK | ||
130 | </option> | ||
131 | <option name="No"> | ||
132 | Cancel | ||
133 | </option> | ||
134 | </alert> | ||
135 | <alert modal="true" name="ConfirmObjectDeleteNoOwn"> | ||
136 | <message name="message"> | ||
137 | You do not own least one of the items you have selected . | ||
138 | |||
139 | Are you sure you want to delete these items? | ||
140 | </message> | ||
141 | <option name="Yes"> | ||
142 | OK | ||
143 | </option> | ||
144 | <option name="No"> | ||
145 | Cancel | ||
146 | </option> | ||
147 | </alert> | ||
148 | <alert modal="true" name="ConfirmObjectDeleteLockNoCopy"> | ||
149 | <message name="message"> | ||
150 | At least one object is locked. | ||
151 | At least one object is not copyable. | ||
152 | |||
153 | Are you sure you want to delete these items? | ||
154 | </message> | ||
155 | <option name="Yes"> | ||
156 | OK | ||
157 | </option> | ||
158 | <option name="No"> | ||
159 | Cancel | ||
160 | </option> | ||
161 | </alert> | ||
162 | <alert modal="true" name="ConfirmObjectDeleteLockNoOwn"> | ||
163 | <message name="message"> | ||
164 | At least one object is locked. | ||
165 | You do not own least one object. | ||
166 | |||
167 | Are you sure you want to delete these items? | ||
168 | </message> | ||
169 | <option name="Yes"> | ||
170 | OK | ||
171 | </option> | ||
172 | <option name="No"> | ||
173 | Cancel | ||
174 | </option> | ||
175 | </alert> | ||
176 | <alert modal="true" name="ConfirmObjectDeleteNoCopyNoOwn"> | ||
177 | <message name="message"> | ||
178 | At least one object is not copyable. | ||
179 | You do not own least one object. | ||
180 | |||
181 | Are you sure you want to delete these items? | ||
182 | </message> | ||
183 | <option name="Yes"> | ||
184 | OK | ||
185 | </option> | ||
186 | <option name="No"> | ||
187 | Cancel | ||
188 | </option> | ||
189 | </alert> | ||
190 | <alert modal="true" name="ConfirmObjectDeleteLockNoCopyNoOwn"> | ||
191 | <message name="message"> | ||
192 | At least one object is locked. | ||
193 | At least one object is not copyable. | ||
194 | You do not own least one object. | ||
195 | |||
196 | Are you sure you want to delete these items? | ||
197 | </message> | ||
198 | <option name="Yes"> | ||
199 | OK | ||
200 | </option> | ||
201 | <option name="No"> | ||
202 | cancel | ||
203 | </option> | ||
204 | </alert> | ||
205 | <alert modal="true" name="ConfirmObjectTakeLock"> | ||
206 | <message name="message"> | ||
207 | At least one object is locked. | ||
208 | |||
209 | Are you sure you want to take these items? | ||
210 | </message> | ||
211 | <option name="Yes"> | ||
212 | OK | ||
213 | </option> | ||
214 | <option default="true" name="No"> | ||
215 | Cancel | ||
216 | </option> | ||
217 | </alert> | ||
218 | <alert modal="true" name="ConfirmObjectTakeNoOwn"> | ||
219 | <message name="message"> | ||
220 | You do not own all of the objects you are taking. | ||
221 | If you continue, next owner permissions will be | ||
222 | applied and possibly restrict your | ||
223 | ability to modify or copy them. | ||
224 | |||
225 | Are you sure you want to take these items? | ||
226 | </message> | ||
227 | <option name="Yes"> | ||
228 | OK | ||
229 | </option> | ||
230 | <option default="true" name="No"> | ||
231 | Cancel | ||
232 | </option> | ||
233 | </alert> | ||
234 | <alert modal="true" name="ConfirmObjectTakeLockNoOwn"> | ||
235 | <message name="message"> | ||
236 | At least one object is locked. | ||
237 | You do not own all of the objects you are taking. | ||
238 | If you continue, next owner permissions will be | ||
239 | applied and possibly restrict your | ||
240 | ability to modify or copy them. | ||
241 | However, you can take the current selection. | ||
242 | |||
243 | Are you sure you want to take these items? | ||
244 | </message> | ||
245 | <option name="Yes"> | ||
246 | OK | ||
247 | </option> | ||
248 | <option default="true" name="No"> | ||
249 | Cancel | ||
250 | </option> | ||
251 | </alert> | ||
252 | <alert modal="true" name="CantBuyLandAcrossMultipleRegions"> | ||
253 | <message name="message"> | ||
254 | Unable to buy land because selection spans multiple regions. | ||
255 | |||
256 | Please select a smaller area and try again. | ||
257 | </message> | ||
258 | </alert> | ||
259 | <alert modal="true" name="DeedLandToGroup"> | ||
260 | <message name="message"> | ||
261 | By deeding this parcel, the group will be required | ||
262 | to have and maintain sufficient land use credits. | ||
263 | The purchase price of the land is not refunded to | ||
264 | the owner. If a deeded parcel is sold, the sale | ||
265 | price will be divided evenly among group members. | ||
266 | |||
267 | Deed this [AREA] m2 of land to the group | ||
268 | '[GROUP_NAME]'? | ||
269 | </message> | ||
270 | <option name="Deed"> | ||
271 | OK | ||
272 | </option> | ||
273 | <option name="Cancel"> | ||
274 | Cancel | ||
275 | </option> | ||
276 | </alert> | ||
277 | <alert modal="true" name="DeedLandToGroupWithContribution"> | ||
278 | <message name="message"> | ||
279 | By deeding this parcel, the group will be required | ||
280 | to have and maintain sufficient land use credits. | ||
281 | The deed will include a simultaneous land | ||
282 | contribution to the group from '[FIRST_NAME] [LAST_NAME]'. | ||
283 | The purchase price of the land is not refunded to | ||
284 | the owner. If a deeded parcel is sold, the sale | ||
285 | price will be divided evenly among group members. | ||
286 | |||
287 | Deed this [AREA] m2 of land to the group | ||
288 | '[GROUP_NAME]'? | ||
289 | </message> | ||
290 | <option name="Deed"> | ||
291 | OK | ||
292 | </option> | ||
293 | <option name="Cancel"> | ||
294 | Cancel | ||
295 | </option> | ||
296 | </alert> | ||
297 | <alert modal="true" name="DisplaySetToSafe"> | ||
298 | <message name="message"> | ||
299 | Display settings have been set to safe levels | ||
300 | because you have specified the -safe option. | ||
301 | </message> | ||
302 | </alert> | ||
303 | <alert modal="true" name="DisplaySetToRecommended"> | ||
304 | <message name="message"> | ||
305 | Display settings have been set to recommended levels | ||
306 | based on your system configuration. | ||
307 | </message> | ||
308 | </alert> | ||
309 | <alert modal="true" name="UnableToConnect"> | ||
310 | <message name="message"> | ||
311 | Unable to connect to server. | ||
312 | Could not request domain name: [HOST_NAME] | ||
313 | </message> | ||
314 | </alert> | ||
315 | <alert modal="true" name="CanNotFindServer"> | ||
316 | <message name="message"> | ||
317 | Unable to find the server domain name. | ||
318 | This could be the result of a lost network connection | ||
319 | or a server problem. | ||
320 | |||
321 | Please try again in a few minutes, or click Help | ||
322 | for advice and a link to the system status web page. | ||
323 | </message> | ||
324 | <option name="OK"> | ||
325 | OK | ||
326 | </option> | ||
327 | <option name="Help"> | ||
328 | Help | ||
329 | </option> | ||
330 | </alert> | ||
331 | <alert modal="true" name="PleaseSelectServer"> | ||
332 | <message name="message"> | ||
333 | Please select a server. | ||
334 | Unable to connect to [IP_ADDRESS] | ||
335 | </message> | ||
336 | </alert> | ||
337 | <alert modal="true" name="SystemMayBeDown"> | ||
338 | <message name="message"> | ||
339 | Unable to connect to [SECOND_LIFE] | ||
340 | The system may be down. | ||
341 | |||
342 | Please try again in a few minutes, or click Help | ||
343 | for advice and a link to the system status web page. | ||
344 | </message> | ||
345 | <option name="OK"> | ||
346 | OK | ||
347 | </option> | ||
348 | <option name="Help"> | ||
349 | Help | ||
350 | </option> | ||
351 | </alert> | ||
352 | <alert modal="true" name="ErrorMessage"> | ||
353 | <message name="message"> | ||
354 | [ERROR_MESSAGE] | ||
355 | </message> | ||
356 | </alert> | ||
357 | <alert modal="true" name="QuickTimeOutOfDate"> | ||
358 | <ignore name="ignore"> | ||
359 | When QuickTime is disabled because it is out of date | ||
360 | </ignore> | ||
361 | <message name="message"> | ||
362 | Streaming video has been disabled because the version of | ||
363 | QuickTime installed on your system is out of date. | ||
364 | |||
365 | Visit http://www.apple.com/quicktime/ and download an update. | ||
366 | </message> | ||
367 | </alert> | ||
368 | <alert modal="true" name="AvatarMoved"> | ||
369 | <message name="message"> | ||
370 | Your [TYPE] location is not currently available. [HELP] | ||
371 | You have been moved into a nearby region. | ||
372 | </message> | ||
373 | </alert> | ||
374 | <alert modal="true" name="ClothingLoading"> | ||
375 | <message name="message"> | ||
376 | Your clothing is still downloading. | ||
377 | You can use [SECOND_LIFE] normally and other users will see you correctly. | ||
378 | </message> | ||
379 | <ignore name="ignore"> | ||
380 | When clothing is taking a long time to download | ||
381 | </ignore> | ||
382 | </alert> | ||
383 | <alert modal="true" name="FirstRun"> | ||
384 | <message name="message"> | ||
385 | [SECOND_LIFE] installation is complete. | ||
386 | |||
387 | If this is your first time using [SECOND_LIFE], you will need to create | ||
388 | an account before you can log on. | ||
389 | Return to www.secondlife.com to create a new account? | ||
390 | </message> | ||
391 | <option name="NewAccount..."> | ||
392 | New Account... | ||
393 | </option> | ||
394 | <option name="Continue"> | ||
395 | Continue | ||
396 | </option> | ||
397 | </alert> | ||
398 | <alert modal="true" name="SetByHostFail"> | ||
399 | <message name="message"> | ||
400 | Unable to connect to server. | ||
401 | Could not resolve domain name: [HOST_NAME] | ||
402 | |||
403 | Please check your network connection. | ||
404 | </message> | ||
405 | </alert> | ||
406 | <alert modal="true" name="LoginPacketNeverReceived"> | ||
407 | <message name="message"> | ||
408 | We're having trouble connecting. There may be a problem with your internet connection or the Second Life servers. | ||
409 | |||
410 | You can either check your internet connection and try again in a few minutes, click Help to connect to our support site, or click Teleport to attempt to teleport home. | ||
411 | </message> | ||
412 | <option name="OK"> | ||
413 | OK | ||
414 | </option> | ||
415 | <option name="Help"> | ||
416 | Help | ||
417 | </option> | ||
418 | <option name="Teleport"> | ||
419 | Teleport | ||
420 | </option> | ||
421 | </alert> | ||
422 | <alert modal="true" name="WelcomeNoClothes"> | ||
423 | <message name="message"> | ||
424 | Your character will appear in a moment. | ||
425 | |||
426 | Use arrow keys to walk. | ||
427 | Press the F1 key at any time for help or | ||
428 | to learn more about [SECOND_LIFE]. | ||
429 | </message> | ||
430 | </alert> | ||
431 | <alert modal="true" name="WelcomeChooseSex" nodefault="true"> | ||
432 | <message name="message"> | ||
433 | Your character will appear in a moment. | ||
434 | |||
435 | Use arrow keys to walk. | ||
436 | Press the F1 key at any time for help or | ||
437 | to learn more about [SECOND_LIFE]. | ||
438 | Please choose the male or female avatar. | ||
439 | You can change your mind later. | ||
440 | </message> | ||
441 | <option name="Male"> | ||
442 | Male | ||
443 | </option> | ||
444 | <option name="Female"> | ||
445 | Female | ||
446 | </option> | ||
447 | </alert> | ||
448 | <alert modal="true" name="NotEnoughCurrency"> | ||
449 | <message name="message"> | ||
450 | [NAME] L$ [PRICE] You don't have enough L$ to do that. | ||
451 | </message> | ||
452 | </alert> | ||
453 | <alert modal="true" name="GrantedModifyRights"> | ||
454 | <message name="message"> | ||
455 | You have been granted the privilege to modify [FIRST_NAME] [LAST_NAME]'s objects. | ||
456 | </message> | ||
457 | </alert> | ||
458 | <alert modal="true" name="RevokedModifyRights"> | ||
459 | <message name="message"> | ||
460 | Your privilege to modify [FIRST_NAME] [LAST_NAME]'s objects has been revoked | ||
461 | </message> | ||
462 | </alert> | ||
463 | <alert modal="true" name="FlushMapVisibilityCaches"> | ||
464 | <message name="message"> | ||
465 | This will flush the map caches on this region. | ||
466 | This is really only useful for debugging. | ||
467 | (In production, wait 5 minutes, then everyone's map will | ||
468 | update after they relog.) | ||
469 | </message> | ||
470 | <option name="OK"> | ||
471 | OK | ||
472 | </option> | ||
473 | <option name="Cancel"> | ||
474 | Cancel | ||
475 | </option> | ||
476 | </alert> | ||
477 | <alert modal="true" name="OnlyCopyContentsOfSingleItem"> | ||
478 | <message name="message"> | ||
479 | Unable to copy the contents of more than one item at a time. | ||
480 | Please select only one object and try again. | ||
481 | </message> | ||
482 | <option name="OK"> | ||
483 | OK | ||
484 | </option> | ||
485 | <option name="Cancel"> | ||
486 | Cancel | ||
487 | </option> | ||
488 | </alert> | ||
489 | <alert modal="true" name="KickUsersFromRegion"> | ||
490 | <message name="message"> | ||
491 | Teleport all Residents in this region home? | ||
492 | </message> | ||
493 | <option name="OK"> | ||
494 | OK | ||
495 | </option> | ||
496 | <option name="Cancel"> | ||
497 | Cancel | ||
498 | </option> | ||
499 | </alert> | ||
500 | <alert modal="true" name="EstateObjectReturn"> | ||
501 | <message name="message"> | ||
502 | Are you sure you want to return objects owned by | ||
503 | [USER_NAME] ? | ||
504 | </message> | ||
505 | <option name="Return"> | ||
506 | OK | ||
507 | </option> | ||
508 | <option default="true" name="Cancel"> | ||
509 | Cancel | ||
510 | </option> | ||
511 | </alert> | ||
512 | <alert modal="true" name="InvalidTerrainBitDepth"> | ||
513 | <message name="message"> | ||
514 | Couldn't set region textures: | ||
515 | Terrain texture [TEXTURE_NUM] has an invalid bit depth of [TEXTURE_BIT_DEPTH]. | ||
516 | |||
517 | Replace texture [TEXTURE_NUM] with a 24-bit 512x512 or smaller image | ||
518 | then click "Apply" again. | ||
519 | </message> | ||
520 | </alert> | ||
521 | <alert modal="true" name="InvalidTerrainSize"> | ||
522 | <message name="message"> | ||
523 | Couldn't set region textures: | ||
524 | Terrain texture [TEXTURE_NUM] is too large at [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]. | ||
525 | |||
526 | Replace texture [TEXTURE_NUM] with a 24-bit 512x512 or smaller image | ||
527 | then click "Apply" again. | ||
528 | </message> | ||
529 | </alert> | ||
530 | <alert modal="true" name="RawUploadStarted"> | ||
531 | <message name="message"> | ||
532 | Upload started. It may take up to two minutes, | ||
533 | depending on your connection speed. | ||
534 | </message> | ||
535 | </alert> | ||
536 | <alert modal="true" name="ConfirmBakeTerrain"> | ||
537 | <message name="message"> | ||
538 | Do you really want to bake the current terrain, | ||
539 | make it the center for terrain raise/lower limits | ||
540 | and the default for the 'Revert' tool? | ||
541 | </message> | ||
542 | <option name="Bake"> | ||
543 | OK | ||
544 | </option> | ||
545 | <option name="Cancel"> | ||
546 | Cancel | ||
547 | </option> | ||
548 | </alert> | ||
549 | <alert modal="true" name="MaxAllowedAgentOnRegion"> | ||
550 | <message name="message"> | ||
551 | You can only have [MAX_AGENTS] Allowed Residents. | ||
552 | </message> | ||
553 | </alert> | ||
554 | <alert modal="true" name="MaxBannedAgentsOnRegion"> | ||
555 | <message name="message"> | ||
556 | You can only have [MAX_BANNED] Banned Residents. | ||
557 | </message> | ||
558 | </alert> | ||
559 | <alert modal="true" name="MaxAgentOnRegionBatch"> | ||
560 | <message name="message"> | ||
561 | Failure while attempting to add [NUM_ADDED] agents: | ||
562 | Exceeds the [MAX_AGENTS] [LIST_TYPE] limit by [NUM_EXCESS]. | ||
563 | </message> | ||
564 | </alert> | ||
565 | |||
566 | <alert modal="true" name="MaxAllowedGroupsOnRegion"> | ||
567 | <message name="message"> | ||
568 | You can only have [MAX_GROUPS] Allowed Groups. | ||
569 | </message> | ||
570 | <option name="Bake"> | ||
571 | Bake | ||
572 | </option> | ||
573 | <option name="Cancel"> | ||
574 | Cancel | ||
575 | </option> | ||
576 | </alert> | ||
577 | <alert modal="true" name="MaxManagersOnRegion"> | ||
578 | <message name="message"> | ||
579 | You can only have [MAX_MANAGER] Estate Managers. | ||
580 | </message> | ||
581 | </alert> | ||
582 | <alert modal="true" name="OwnerCanNotBeDenied"> | ||
583 | <message name="message"> | ||
584 | Can't add estate owner to estate 'Banned Resident' list. | ||
585 | </message> | ||
586 | </alert> | ||
587 | <alert modal="true" name="CanNotChangeAppearanceUntilLoaded"> | ||
588 | <message name="message"> | ||
589 | Can't change appearance until clothing and shape are loaded. | ||
590 | </message> | ||
591 | </alert> | ||
592 | <alert modal="true" name="ClassifiedMustBeAlphanumeric"> | ||
593 | <message name="message"> | ||
594 | The name of your classified must start with a letter | ||
595 | from A to Z or a number. No punctuation is allowed. | ||
596 | </message> | ||
597 | </alert> | ||
598 | <alert modal="true" name="CantSetBuyObject"> | ||
599 | <message name="message"> | ||
600 | Can't set Buy Object, because the object is not for sale. | ||
601 | Please set the object for sale and try again. | ||
602 | </message> | ||
603 | </alert> | ||
604 | <alert modal="true" name="FinishedRawDownload"> | ||
605 | <message name="message"> | ||
606 | Finished download of raw terrain file to: | ||
607 | [DOWNLOAD_PATH]. | ||
608 | </message> | ||
609 | </alert> | ||
610 | <alert modal="true" name="DownloadWindowsMandatory"> | ||
611 | <message name="message"> | ||
612 | A new version of [SECOND_LIFE] is available. | ||
613 | [MESSAGE] | ||
614 | You must download this update to use [SECOND_LIFE]. | ||
615 | </message> | ||
616 | <option name="Download"> | ||
617 | Download | ||
618 | </option> | ||
619 | <option name="Quit"> | ||
620 | Quit | ||
621 | </option> | ||
622 | </alert> | ||
623 | <alert modal="true" name="DownloadWindows"> | ||
624 | <message name="message"> | ||
625 | An updated version of [SECOND_LIFE] is available. | ||
626 | [MESSAGE] | ||
627 | This update is not required, but we suggest you install it to improve performance and stability. | ||
628 | </message> | ||
629 | <option name="Download"> | ||
630 | Download | ||
631 | </option> | ||
632 | <option default="true" name="Continue"> | ||
633 | Continue | ||
634 | </option> | ||
635 | </alert> | ||
636 | <alert modal="true" name="DownloadWindowsReleaseForDownload"> | ||
637 | <message name="message"> | ||
638 | An updated version of [SECOND_LIFE] is available. | ||
639 | [MESSAGE] | ||
640 | This update is not required, but we suggest you install it to improve performance and stability. | ||
641 | </message> | ||
642 | <option name="Download"> | ||
643 | Download | ||
644 | </option> | ||
645 | <option name="Continue"> | ||
646 | Continue | ||
647 | </option> | ||
648 | </alert> | ||
649 | <alert modal="true" name="DownloadMacMandatory"> | ||
650 | <message name="message"> | ||
651 | A new version of [SECOND_LIFE] is available. | ||
652 | [MESSAGE] | ||
653 | You must download this update to use [SECOND_LIFE]. | ||
654 | |||
655 | Download to your Applications folder? | ||
656 | </message> | ||
657 | <option name="Download"> | ||
658 | Download | ||
659 | </option> | ||
660 | <option name="Quit"> | ||
661 | Quit | ||
662 | </option> | ||
663 | </alert> | ||
664 | <alert modal="true" name="DownloadMac"> | ||
665 | <message name="message"> | ||
666 | An updated version of [SECOND_LIFE] is available. | ||
667 | [MESSAGE] | ||
668 | This update is not required, but we suggest you install it to improve performance and stability. | ||
669 | |||
670 | Download to your Applications folder? | ||
671 | </message> | ||
672 | <option name="Download"> | ||
673 | Download | ||
674 | </option> | ||
675 | <option default="true" name="Continue"> | ||
676 | Continue | ||
677 | </option> | ||
678 | </alert> | ||
679 | <alert modal="true" name="DownloadMacReleaseForDownload"> | ||
680 | <message name="message"> | ||
681 | An updated version of [SECOND_LIFE] is available. | ||
682 | [MESSAGE] | ||
683 | This update is not required, but we suggest you install it to improve performance and stability. | ||
684 | |||
685 | Download to your Applications folder? | ||
686 | </message> | ||
687 | <option name="Download"> | ||
688 | Download | ||
689 | </option> | ||
690 | <option name="Continue"> | ||
691 | Continue | ||
692 | </option> | ||
693 | </alert> | ||
694 | <alert modal="true" name="DeedObjectToGroup"> | ||
695 | <message name="message"> | ||
696 | Deeding this object will cause the group to: | ||
697 | * Receive L$ paid into the object | ||
698 | </message> | ||
699 | <ignore name="ignore"> | ||
700 | When deeding objects to groups | ||
701 | </ignore> | ||
702 | <option name="Deed"> | ||
703 | Deed | ||
704 | </option> | ||
705 | <option name="Cancel"> | ||
706 | Cancel | ||
707 | </option> | ||
708 | </alert> | ||
709 | <alert modal="true" name="WebLaunchExternalTarget"> | ||
710 | <message name="message"> | ||
711 | Open your system Web browser to view this content? | ||
712 | </message> | ||
713 | <ignore name="ignore"> | ||
714 | When opening your system browser to view a Web page | ||
715 | </ignore> | ||
716 | <option name="Open"> | ||
717 | OK | ||
718 | </option> | ||
719 | <option name="Cancel"> | ||
720 | Cancel | ||
721 | </option> | ||
722 | </alert> | ||
723 | <alert modal="true" name="WebLaunchJoinNow"> | ||
724 | <message name="message"> | ||
725 | Go to www.secondlife.com to manage your account? | ||
726 | </message> | ||
727 | <ignore name="ignore"> | ||
728 | When launching web browser to manage your account | ||
729 | </ignore> | ||
730 | <option name="OK"> | ||
731 | OK | ||
732 | </option> | ||
733 | <option name="Cancel"> | ||
734 | Cancel | ||
735 | </option> | ||
736 | </alert> | ||
737 | <alert modal="true" name="WebLaunchBugReport101"> | ||
738 | <message name="message"> | ||
739 | Visit the [SECOND_LIFE] Wiki and Learn how to Report Bugs Correctly. | ||
740 | </message> | ||
741 | <ignore name="ignore"> | ||
742 | When launching web browser to view the Bug Reporting 101 Wiki | ||
743 | </ignore> | ||
744 | <option name="Gotopage"> | ||
745 | OK | ||
746 | </option> | ||
747 | <option name="Cancel"> | ||
748 | Cancel | ||
749 | </option> | ||
750 | </alert> | ||
751 | <alert modal="true" name="WebLaunchSecurityIssues"> | ||
752 | <message name="message"> | ||
753 | Visit the [SECOND_LIFE] Wiki for Details of How to Report a Security Issue. | ||
754 | </message> | ||
755 | <ignore name="ignore"> | ||
756 | When launching web browser to view Security Issues Wiki | ||
757 | </ignore> | ||
758 | <option name="Gotopage"> | ||
759 | OK | ||
760 | </option> | ||
761 | <option name="Cancel"> | ||
762 | Cancel | ||
763 | </option> | ||
764 | </alert> | ||
765 | <alert modal="true" name="WebLaunchQAWiki"> | ||
766 | <message name="message"> | ||
767 | Visit the [SECOND_LIFE] QA Wiki. | ||
768 | </message> | ||
769 | <ignore name="ignore"> | ||
770 | When launching web browser to view the QA Wiki | ||
771 | </ignore> | ||
772 | <option name="Gotopage"> | ||
773 | OK | ||
774 | </option> | ||
775 | <option name="Cancel"> | ||
776 | Cancel | ||
777 | </option> | ||
778 | </alert> | ||
779 | <alert modal="true" name="WebLaunchPublicIssue"> | ||
780 | <message name="message"> | ||
781 | Visit the [SECOND_LIFE] Public Issue Tracker, Where you can Report Bugs and other Issues. | ||
782 | </message> | ||
783 | <ignore name="ignore"> | ||
784 | When launching web browser to view the Public Issue Tracker | ||
785 | </ignore> | ||
786 | <option name="Gotopage"> | ||
787 | Go to page | ||
788 | </option> | ||
789 | <option name="Cancel"> | ||
790 | Cancel | ||
791 | </option> | ||
792 | </alert> | ||
793 | <alert modal="true" name="WebLaunchPublicIssueHelp"> | ||
794 | <message name="message"> | ||
795 | Visit the [SECOND_LIFE] Wiki for info on how to use the Public Issue Tracker. | ||
796 | </message> | ||
797 | <ignore name="ignore"> | ||
798 | When launching web browser to view Public Issue Tracker Wiki | ||
799 | </ignore> | ||
800 | <option name="Gotopage"> | ||
801 | Go to page | ||
802 | </option> | ||
803 | <option name="Cancel"> | ||
804 | Cancel | ||
805 | </option> | ||
806 | </alert> | ||
807 | <alert modal="true" name="WebLaunchForums"> | ||
808 | <message name="message"> | ||
809 | Search the [SECOND_LIFE] Knowledge Base for the latest tips and tricks. | ||
810 | </message> | ||
811 | <ignore name="ignore"> | ||
812 | When launching web browser to view the knowledge base | ||
813 | </ignore> | ||
814 | <option name="Gotopage"> | ||
815 | OK | ||
816 | </option> | ||
817 | <option name="Cancel"> | ||
818 | Cancel | ||
819 | </option> | ||
820 | </alert> | ||
821 | <alert modal="true" name="WebLaunchSupport"> | ||
822 | <message name="message"> | ||
823 | Contact [SECOND_LIFE] Support. | ||
824 | </message> | ||
825 | <ignore name="ignore"> | ||
826 | When launching web browser to contact support | ||
827 | </ignore> | ||
828 | <option name="Gotopage"> | ||
829 | OK | ||
830 | </option> | ||
831 | <option name="Cancel"> | ||
832 | Cancel | ||
833 | </option> | ||
834 | </alert> | ||
835 | <alert modal="true" name="WebLaunchImprudenceBlog"> | ||
836 | <message name="message"> | ||
837 | Go to the Official Imprudence Blog, for the Latest News and Information. | ||
838 | </message> | ||
839 | <ignore name="ignore"> | ||
840 | When launching web browser to view the blog | ||
841 | </ignore> | ||
842 | <option name="Gotopage"> | ||
843 | OK | ||
844 | </option> | ||
845 | <option name="Cancel"> | ||
846 | Cancel | ||
847 | </option> | ||
848 | </alert> | ||
849 | <alert modal="true" name="WebLaunchImprudenceForums"> | ||
850 | <message name="message"> | ||
851 | Go to the Official Imprudence Forums to discuss the Imprudence Project. | ||
852 | </message> | ||
853 | <ignore name="ignore"> | ||
854 | When launching web browser to view the forums | ||
855 | </ignore> | ||
856 | <option name="Gotopage"> | ||
857 | OK | ||
858 | </option> | ||
859 | <option name="Cancel"> | ||
860 | Cancel | ||
861 | </option> | ||
862 | </alert> | ||
863 | <alert modal="true" name="WebLaunchLSLGuide"> | ||
864 | <message name="message"> | ||
865 | Go to the Scripting Guide for scripting help? | ||
866 | </message> | ||
867 | <ignore name="ignore"> | ||
868 | When launching web browser to view the Scripting Guide | ||
869 | </ignore> | ||
870 | <option name="Gotopage"> | ||
871 | OK | ||
872 | </option> | ||
873 | <option name="Cancel"> | ||
874 | Cancel | ||
875 | </option> | ||
876 | </alert> | ||
877 | <alert modal="true" name="WebLaunchLSLWiki"> | ||
878 | <message name="message"> | ||
879 | Go to the LSL Portal for scripting help? | ||
880 | </message> | ||
881 | <ignore name="ignore"> | ||
882 | When launching web browser to view the LSL Portal | ||
883 | </ignore> | ||
884 | <option name="Gotopage"> | ||
885 | Go to page | ||
886 | </option> | ||
887 | <option name="Cancel"> | ||
888 | Cancel | ||
889 | </option> | ||
890 | </alert> | ||
891 | <alert modal="true" name="ReturnToOwner"> | ||
892 | <message name="message"> | ||
893 | Are you sure you want to return the selected | ||
894 | objects to their owners? Transferable deeded | ||
895 | objects will be returned to their previous owners. | ||
896 | |||
897 | *WARNING* No-transfer deeded objects will be deleted! | ||
898 | </message> | ||
899 | <ignore name="ignore"> | ||
900 | When returning objects to their owners | ||
901 | </ignore> | ||
902 | <option name="Return"> | ||
903 | OK | ||
904 | </option> | ||
905 | <option name="Cancel"> | ||
906 | Cancel | ||
907 | </option> | ||
908 | </alert> | ||
909 | <alert name="GroupLeaveConfirmOfficer"> | ||
910 | <message name="message"> | ||
911 | You are currently an officer of the group [GROUP]. | ||
912 | Leave Group? | ||
913 | </message> | ||
914 | <option name="Leave"> | ||
915 | OK | ||
916 | </option> | ||
917 | <option name="Cancel"> | ||
918 | Cancel | ||
919 | </option> | ||
920 | </alert> | ||
921 | <alert name="GroupLeaveConfirmMember"> | ||
922 | <message name="message"> | ||
923 | You are currently a member of the group [GROUP]. | ||
924 | Leave Group? | ||
925 | </message> | ||
926 | <option name="Leave"> | ||
927 | OK | ||
928 | </option> | ||
929 | <option name="Cancel"> | ||
930 | Cancel | ||
931 | </option> | ||
932 | </alert> | ||
933 | <alert name="ConfirmKick" unique="true"> | ||
934 | <message name="message"> | ||
935 | Do you REALLY want to kick all users off the grid? | ||
936 | </message> | ||
937 | <option name="Kick"> | ||
938 | Kick All Users | ||
939 | </option> | ||
940 | <option name="Cancel"> | ||
941 | Cancel | ||
942 | </option> | ||
943 | </alert> | ||
944 | <alert modal="true" name="MuteLinden"> | ||
945 | <message name="message"> | ||
946 | Sorry, you cannot mute a Linden. | ||
947 | </message> | ||
948 | <option name="OK"> | ||
949 | OK | ||
950 | </option> | ||
951 | </alert> | ||
952 | <alert modal="true" name="MuteByNameFailed" title="Mute object by name failed"> | ||
953 | <message name="message"> | ||
954 | You already have muted this name. | ||
955 | </message> | ||
956 | <option name="OK"> | ||
957 | OK | ||
958 | </option> | ||
959 | </alert> | ||
960 | <alert name="RemoveItemWarn"> | ||
961 | <message name="message"> | ||
962 | Though permitted, deleting contents may damage the | ||
963 | object. Do you want to delete that item? | ||
964 | </message> | ||
965 | <option name="Yes"> | ||
966 | OK | ||
967 | </option> | ||
968 | <option default="true" name="No"> | ||
969 | Cancel | ||
970 | </option> | ||
971 | </alert> | ||
972 | <alert name="CantRateOwnedByGroup"> | ||
973 | <message name="message"> | ||
974 | Can't rate this object's owner, object is owned by a group. | ||
975 | </message> | ||
976 | <option name="OK"> | ||
977 | OK | ||
978 | </option> | ||
979 | </alert> | ||
980 | <alert name="CantOfferCallingCard"> | ||
981 | <message name="message"> | ||
982 | Cannot offer a calling card at this time. Please try again in a moment. | ||
983 | </message> | ||
984 | <option name="OK"> | ||
985 | OK | ||
986 | </option> | ||
987 | </alert> | ||
988 | <alert name="CantOfferFriendship"> | ||
989 | <message name="message"> | ||
990 | Cannot offer friendship at this time. Please try again in a moment. | ||
991 | </message> | ||
992 | <option name="OK"> | ||
993 | OK | ||
994 | </option> | ||
995 | </alert> | ||
996 | <alert name="CantSetHome"> | ||
997 | <message name="message"> | ||
998 | Can't set home to here. | ||
999 | </message> | ||
1000 | <option name="OK"> | ||
1001 | OK | ||
1002 | </option> | ||
1003 | </alert> | ||
1004 | <alert name="BusyModeSet"> | ||
1005 | <message name="message"> | ||
1006 | Busy mode set. | ||
1007 | Chat and instant messages will be hidden. Instant | ||
1008 | messages will get your Busy mode response. All teleportation | ||
1009 | offers will be declined. All inventory offers will go to your | ||
1010 | Trash. | ||
1011 | </message> | ||
1012 | <ignore name="ignore"> | ||
1013 | When setting busy mode | ||
1014 | </ignore> | ||
1015 | <option name="OK"> | ||
1016 | OK | ||
1017 | </option> | ||
1018 | </alert> | ||
1019 | <alert name="NoPVPDetected"> | ||
1020 | <message name="message"> | ||
1021 | No player vs. player (PvP) abuse detected | ||
1022 | </message> | ||
1023 | <option name="OK"> | ||
1024 | OK | ||
1025 | </option> | ||
1026 | </alert> | ||
1027 | <alert name="NotecardAttachPermFail"> | ||
1028 | <message name="message"> | ||
1029 | Only items with unrestricted 'next owner' permissions | ||
1030 | can be attached to notecards. | ||
1031 | </message> | ||
1032 | <option name="OK"> | ||
1033 | OK | ||
1034 | </option> | ||
1035 | </alert> | ||
1036 | <alert name="JoinedTooManyGroupsMember"> | ||
1037 | <message name="message"> | ||
1038 | You are a member of too many groups to join | ||
1039 | another one. Please leave at least one group | ||
1040 | before joining this one, or decline the offer. | ||
1041 | To leave a group select the 'Groups..' option | ||
1042 | from the 'Edit' menu. | ||
1043 | [NAME] has invited you to join a group as a member. | ||
1044 | [INVITE] | ||
1045 | </message> | ||
1046 | <option name="Join"> | ||
1047 | Join | ||
1048 | </option> | ||
1049 | <option name="Decline"> | ||
1050 | Decline | ||
1051 | </option> | ||
1052 | </alert> | ||
1053 | <alert name="JoinedTooManyGroupsOfficer"> | ||
1054 | <message name="message"> | ||
1055 | You are a member of too many groups to join | ||
1056 | another one. Please leave at least one group | ||
1057 | before joining this one, or decline the offer. | ||
1058 | To leave a group select the 'Groups..' option | ||
1059 | from the 'Edit' menu. | ||
1060 | [NAME] has invited you to join a group as an officer. | ||
1061 | [INVITE] | ||
1062 | </message> | ||
1063 | <option name="Join"> | ||
1064 | Join | ||
1065 | </option> | ||
1066 | <option name="Decline"> | ||
1067 | Decline | ||
1068 | </option> | ||
1069 | </alert> | ||
1070 | <alert name="KickUser"> | ||
1071 | <message name="message"> | ||
1072 | Kick this user with what message? | ||
1073 | </message> | ||
1074 | <editline name="editline"> | ||
1075 | An administrator has logged you off. | ||
1076 | </editline> | ||
1077 | <option name="OK"> | ||
1078 | OK | ||
1079 | </option> | ||
1080 | <option name="Cancel"> | ||
1081 | Cancel | ||
1082 | </option> | ||
1083 | </alert> | ||
1084 | <alert name="KickAllUsers"> | ||
1085 | <message name="message"> | ||
1086 | Kick everyone currently on the grid with what message? | ||
1087 | </message> | ||
1088 | <editline name="editline"> | ||
1089 | An administrator has logged you off. | ||
1090 | </editline> | ||
1091 | <option name="OK"> | ||
1092 | OK | ||
1093 | </option> | ||
1094 | <option name="Cancel"> | ||
1095 | Cancel | ||
1096 | </option> | ||
1097 | </alert> | ||
1098 | <alert name="FreezeUser"> | ||
1099 | <message name="message"> | ||
1100 | Freeze this user with what message? | ||
1101 | </message> | ||
1102 | <editline name="editline"> | ||
1103 | You have been frozen. You cannot move or chat. An administrator will contact you via instant message (IM). | ||
1104 | </editline> | ||
1105 | <option name="OK"> | ||
1106 | OK | ||
1107 | </option> | ||
1108 | <option name="Cancel"> | ||
1109 | Cancel | ||
1110 | </option> | ||
1111 | </alert> | ||
1112 | <alert name="UnFreezeUser"> | ||
1113 | <message name="message"> | ||
1114 | Unfreeze this user with what message? | ||
1115 | </message> | ||
1116 | <editline name="editline"> | ||
1117 | You are no longer frozen. | ||
1118 | </editline> | ||
1119 | <option name="OK"> | ||
1120 | OK | ||
1121 | </option> | ||
1122 | <option name="Cancel"> | ||
1123 | Cancel | ||
1124 | </option> | ||
1125 | </alert> | ||
1126 | <alert name="ExpungeUser"> | ||
1127 | <message name="message"> | ||
1128 | Enter the agent id of a user to expunge | ||
1129 | </message> | ||
1130 | <editline /> | ||
1131 | <option name="OK"> | ||
1132 | OK | ||
1133 | </option> | ||
1134 | <option name="Cancel"> | ||
1135 | Cancel | ||
1136 | </option> | ||
1137 | </alert> | ||
1138 | <alert modal="true" name="OfferTeleport"> | ||
1139 | <message name="message"> | ||
1140 | Offer a teleport to your location with the following message? | ||
1141 | </message> | ||
1142 | <editline name="editline"> | ||
1143 | Join me in [REGION] | ||
1144 | </editline> | ||
1145 | <option name="OK"> | ||
1146 | OK | ||
1147 | </option> | ||
1148 | <option name="Cancel"> | ||
1149 | Cancel | ||
1150 | </option> | ||
1151 | </alert> | ||
1152 | <alert modal="true" name="OfferTeleportFromGod"> | ||
1153 | <message name="message"> | ||
1154 | God summon user to your location? | ||
1155 | </message> | ||
1156 | <editline name="editline"> | ||
1157 | Join me in [REGION] | ||
1158 | </editline> | ||
1159 | <option name="OK"> | ||
1160 | OK | ||
1161 | </option> | ||
1162 | <option name="Cancel"> | ||
1163 | Cancel | ||
1164 | </option> | ||
1165 | </alert> | ||
1166 | <alert modal="true" name="TeleportFromLandmark"> | ||
1167 | <message name="message"> | ||
1168 | Are you sure you want to teleport? | ||
1169 | </message> | ||
1170 | <ignore name="ignore"> | ||
1171 | When teleporting from a landmark in inventory | ||
1172 | </ignore> | ||
1173 | <option name="Teleport"> | ||
1174 | Teleport | ||
1175 | </option> | ||
1176 | <option name="Cancel"> | ||
1177 | Cancel | ||
1178 | </option> | ||
1179 | </alert> | ||
1180 | <alert name="MessageEstate" title="Message everyone in your Estate"> | ||
1181 | <message name="message"> | ||
1182 | Type a short announcement which will be | ||
1183 | sent to everyone currently in your estate. | ||
1184 | </message> | ||
1185 | <editline name="editline" /> | ||
1186 | <option name="OK"> | ||
1187 | OK | ||
1188 | </option> | ||
1189 | <option name="Cancel"> | ||
1190 | Cancel | ||
1191 | </option> | ||
1192 | </alert> | ||
1193 | <alert name="ChangeLindenEstate" title="Change Linden Estate"> | ||
1194 | <message name="message"> | ||
1195 | You are about to change a Linden owned estate (mainland, | ||
1196 | teen grid, orientation, etc.). | ||
1197 | |||
1198 | This is EXTREMELY DANGEROUS because it can fundamentally | ||
1199 | affect the user experience. On the mainland, it will change | ||
1200 | thousands of regions and make the spaceserver hiccup. | ||
1201 | |||
1202 | Proceed? | ||
1203 | </message> | ||
1204 | <option name="ChangeEstate"> | ||
1205 | OK | ||
1206 | </option> | ||
1207 | <option name="Cancel"> | ||
1208 | Cancel | ||
1209 | </option> | ||
1210 | </alert> | ||
1211 | <alert name="ChangeLindenAccess" title="Change Linden Estate Access"> | ||
1212 | <message name="message"> | ||
1213 | You are about to change the access list for a Linden owned | ||
1214 | estate (mainland, teen grid, orientation, etc.). | ||
1215 | |||
1216 | This is DANGEROUS and should only be done to invoke the | ||
1217 | hack allowing objects/L$ to be transfered in/out of | ||
1218 | a grid. | ||
1219 | It will change thousands of regions and make the | ||
1220 | spaceserver hiccup. | ||
1221 | </message> | ||
1222 | <option name="ChangeEstate"> | ||
1223 | OK | ||
1224 | </option> | ||
1225 | <option name="Cancel"> | ||
1226 | Cancel | ||
1227 | </option> | ||
1228 | </alert> | ||
1229 | <alert name="EstateAllowedAgentAdd" title="Select estate"> | ||
1230 | <message name="message"> | ||
1231 | Add to allowed list for this estate only or for [ALL_ESTATES]? | ||
1232 | </message> | ||
1233 | <option name="ThisEstate"> | ||
1234 | This Estate | ||
1235 | </option> | ||
1236 | <option name="AllEstates"> | ||
1237 | All Estates | ||
1238 | </option> | ||
1239 | <option name="Cancel"> | ||
1240 | Cancel | ||
1241 | </option> | ||
1242 | </alert> | ||
1243 | <alert name="EstateAllowedAgentRemove" title="Select estate"> | ||
1244 | <message name="message"> | ||
1245 | Remove from allowed list for this estate only or for [ALL_ESTATES]? | ||
1246 | </message> | ||
1247 | <option name="ThisEstate"> | ||
1248 | This Estate | ||
1249 | </option> | ||
1250 | <option name="AllEstates"> | ||
1251 | All Estates | ||
1252 | </option> | ||
1253 | <option name="Cancel"> | ||
1254 | Cancel | ||
1255 | </option> | ||
1256 | </alert> | ||
1257 | <alert name="EstateAllowedGroupAdd" title="Select estate"> | ||
1258 | <message name="message"> | ||
1259 | Add to group allowed list for this estate only or for [ALL_ESTATES]? | ||
1260 | </message> | ||
1261 | <option name="ThisEstate"> | ||
1262 | This Estate | ||
1263 | </option> | ||
1264 | <option name="AllEstates"> | ||
1265 | All Estates | ||
1266 | </option> | ||
1267 | <option name="Cancel"> | ||
1268 | Cancel | ||
1269 | </option> | ||
1270 | </alert> | ||
1271 | <alert name="EstateAllowedGroupRemove" title="Select estate"> | ||
1272 | <message name="message"> | ||
1273 | Remove from group allowed list for this estate only or [ALL_ESTATES]? | ||
1274 | </message> | ||
1275 | <option name="ThisEstate"> | ||
1276 | This Estate | ||
1277 | </option> | ||
1278 | <option name="AllEstates"> | ||
1279 | All Estates | ||
1280 | </option> | ||
1281 | <option name="Cancel"> | ||
1282 | Cancel | ||
1283 | </option> | ||
1284 | </alert> | ||
1285 | <alert name="EstateBannedAgentAdd" title="Select estate"> | ||
1286 | <message name="message"> | ||
1287 | Deny access for this estate only or for [ALL_ESTATES]? | ||
1288 | </message> | ||
1289 | <option name="ThisEstate"> | ||
1290 | This Estate | ||
1291 | </option> | ||
1292 | <option name="AllEstates"> | ||
1293 | All Estates | ||
1294 | </option> | ||
1295 | <option name="Cancel"> | ||
1296 | Cancel | ||
1297 | </option> | ||
1298 | </alert> | ||
1299 | <alert name="EstateBannedAgentRemove" title="Select estate"> | ||
1300 | <message name="message"> | ||
1301 | Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]? | ||
1302 | </message> | ||
1303 | <option name="ThisEstate"> | ||
1304 | This Estate | ||
1305 | </option> | ||
1306 | <option name="AllEstates"> | ||
1307 | All Estates | ||
1308 | </option> | ||
1309 | <option name="Cancel"> | ||
1310 | Cancel | ||
1311 | </option> | ||
1312 | </alert> | ||
1313 | <alert name="EstateManagerAdd" title="Select estate"> | ||
1314 | <message name="message"> | ||
1315 | Add estate manager for this estate only or for [ALL_ESTATES]? | ||
1316 | </message> | ||
1317 | <option name="ThisEstate"> | ||
1318 | This Estate | ||
1319 | </option> | ||
1320 | <option name="AllEstates"> | ||
1321 | All Estates | ||
1322 | </option> | ||
1323 | <option name="Cancel"> | ||
1324 | Cancel | ||
1325 | </option> | ||
1326 | </alert> | ||
1327 | <alert name="EstateManagerRemove" title="Select estate"> | ||
1328 | <message name="message"> | ||
1329 | Remove estate manager for this estate only or for [ALL_ESTATES]? | ||
1330 | </message> | ||
1331 | <option name="ThisEstate"> | ||
1332 | This Estate | ||
1333 | </option> | ||
1334 | <option name="AllEstates"> | ||
1335 | All Estates | ||
1336 | </option> | ||
1337 | <option name="Cancel"> | ||
1338 | Cancel | ||
1339 | </option> | ||
1340 | </alert> | ||
1341 | <alert name="EstateCovenantChange" title="Select estate"> | ||
1342 | <message name="message"> | ||
1343 | Change Covenant Message for this estate only or for [ALL_ESTATES]? | ||
1344 | </message> | ||
1345 | <option name="ThisEstate"> | ||
1346 | This Estate | ||
1347 | </option> | ||
1348 | <option name="AllEstates"> | ||
1349 | All Estates | ||
1350 | </option> | ||
1351 | <option name="Cancel"> | ||
1352 | Cancel | ||
1353 | </option> | ||
1354 | </alert> | ||
1355 | <alert name="EstateKickUser" title="Confirm Kick"> | ||
1356 | <message name="message"> | ||
1357 | Kick [EVIL_USER] from this estate? | ||
1358 | </message> | ||
1359 | <option name="Kick"> | ||
1360 | OK | ||
1361 | </option> | ||
1362 | <option name="Cancel"> | ||
1363 | Cancel | ||
1364 | </option> | ||
1365 | </alert> | ||
1366 | <alert modal="true" name="EstateChangeCovenant"> | ||
1367 | <message name="message"> | ||
1368 | Are you sure you want to change the Estate Covenant? | ||
1369 | </message> | ||
1370 | <option name="Change"> | ||
1371 | OK | ||
1372 | </option> | ||
1373 | <option name="Cancel"> | ||
1374 | Cancel | ||
1375 | </option> | ||
1376 | </alert> | ||
1377 | <alert modal="true" name="ProblemImportingEstateCovenant"> | ||
1378 | <message name="message"> | ||
1379 | Problem importing estate covenant. | ||
1380 | </message> | ||
1381 | <option name="OK"> | ||
1382 | OK | ||
1383 | </option> | ||
1384 | </alert> | ||
1385 | <alert modal="true" name="ProblemAddingEstateManager"> | ||
1386 | <message name="message"> | ||
1387 | Problems adding a new estate manager. One or more estates may have a full manager list. | ||
1388 | </message> | ||
1389 | </alert> | ||
1390 | <alert modal="true" name="ProblemAddingEstateGeneric"> | ||
1391 | <message name="message"> | ||
1392 | Problems adding to this estate list. One or more estates may have a full list. | ||
1393 | </message> | ||
1394 | </alert> | ||
1395 | <alert modal="true" name="UnableToLoadNotecard"> | ||
1396 | <message name="message"> | ||
1397 | Unable to load notecard's asset at this time. | ||
1398 | </message> | ||
1399 | <option name="OK"> | ||
1400 | OK | ||
1401 | </option> | ||
1402 | </alert> | ||
1403 | <alert modal="true" name="NotAllowedToViewNotecard"> | ||
1404 | <message name="message"> | ||
1405 | Insufficient permissions to view notecard associated with asset ID requested. | ||
1406 | </message> | ||
1407 | <option name="OK"> | ||
1408 | OK | ||
1409 | </option> | ||
1410 | </alert> | ||
1411 | <alert modal="true" name="MissingNotecardAssetID"> | ||
1412 | <message name="message"> | ||
1413 | Asset ID for notecard is missing from database. | ||
1414 | </message> | ||
1415 | <option name="OK"> | ||
1416 | OK | ||
1417 | </option> | ||
1418 | </alert> | ||
1419 | <alert name="PublishClassified"> | ||
1420 | <message name="message"> | ||
1421 | Remember: Classified ad fees are non-refundable. | ||
1422 | |||
1423 | Publish this classified now for L$[AMOUNT]? | ||
1424 | </message> | ||
1425 | <option name="Publish"> | ||
1426 | OK | ||
1427 | </option> | ||
1428 | <option name="Cancel"> | ||
1429 | Cancel | ||
1430 | </option> | ||
1431 | </alert> | ||
1432 | <alert name="SetClassifiedMature"> | ||
1433 | <message name="message"> | ||
1434 | Does this classified contain Mature content? | ||
1435 | </message> | ||
1436 | <option name="Mature"> | ||
1437 | Yes | ||
1438 | </option> | ||
1439 | <option name="Not Mature"> | ||
1440 | No | ||
1441 | </option> | ||
1442 | <option name="Cancel"> | ||
1443 | Cancel | ||
1444 | </option> | ||
1445 | </alert> | ||
1446 | <alert name="SetGroupMature"> | ||
1447 | <message name="message"> | ||
1448 | Does this group contain Mature content? | ||
1449 | </message> | ||
1450 | <option name="Mature"> | ||
1451 | Yes | ||
1452 | </option> | ||
1453 | <option name="Not Mature"> | ||
1454 | No | ||
1455 | </option> | ||
1456 | <option name="Cancel"> | ||
1457 | Cancel | ||
1458 | </option> | ||
1459 | </alert> | ||
1460 | <alert name="ConfirmRestart" title="Confirm restart"> | ||
1461 | <message name="message"> | ||
1462 | Do you really want to restart this region in 2 minutes? | ||
1463 | </message> | ||
1464 | <option name="Restart"> | ||
1465 | OK | ||
1466 | </option> | ||
1467 | <option name="Cancel"> | ||
1468 | Cancel | ||
1469 | </option> | ||
1470 | </alert> | ||
1471 | <alert name="MessageRegion" title="Message everyone in this region"> | ||
1472 | <message name="message"> | ||
1473 | Type a short announcement which will be | ||
1474 | sent to everyone in this region. | ||
1475 | </message> | ||
1476 | <editline name="editline" /> | ||
1477 | <option name="OK"> | ||
1478 | OK | ||
1479 | </option> | ||
1480 | <option name="Cancel"> | ||
1481 | Cancel | ||
1482 | </option> | ||
1483 | </alert> | ||
1484 | <alert modal="true" name="HelpRegionBlockTerraform" title="Block Terraform"> | ||
1485 | <message name="message"> | ||
1486 | If this box is checked, land owners will not be able to terraform | ||
1487 | their land regardless of the per-parcel 'Edit Terrain' setting. | ||
1488 | |||
1489 | Default: off | ||
1490 | </message> | ||
1491 | </alert> | ||
1492 | <alert modal="true" name="HelpRegionBlockFly" title="Block Fly"> | ||
1493 | <message name="message"> | ||
1494 | If this box is checked, people will not be able to fly in this region | ||
1495 | regardless of the per-parcel 'Fly' setting. | ||
1496 | |||
1497 | Default: off | ||
1498 | </message> | ||
1499 | </alert> | ||
1500 | <alert modal="true" name="HelpRegionAllowDamage" title="Allow Damage"> | ||
1501 | <message name="message"> | ||
1502 | If this box is checked, the health system across all parcels | ||
1503 | regardless of individual parcel settings. If this box is left | ||
1504 | unchecked, individual parcel owners will still be able to | ||
1505 | activate the health system on their parcels. | ||
1506 | |||
1507 | Default: off | ||
1508 | </message> | ||
1509 | </alert> | ||
1510 | <alert modal="true" name="HelpRegionAgentLimit" title="Agent Limit"> | ||
1511 | <message name="message"> | ||
1512 | Sets the maximum number of avatars allowed in this region. | ||
1513 | Performance may vary depending on the | ||
1514 | number avatars present. | ||
1515 | |||
1516 | Default: 40 | ||
1517 | </message> | ||
1518 | </alert> | ||
1519 | <alert modal="true" name="HelpRegionObjectBonus" title="Object Bonus"> | ||
1520 | <message name="message"> | ||
1521 | The Object Bonus is a multiplier for primitives allowed on any given | ||
1522 | parcel. The range allowed is 1 to 10. Set at '1', each 512m2 parcel | ||
1523 | is allowed 117 objects. Set at '2', each 512m2 parcel is | ||
1524 | allowed 234, or twice as many, and so on. The max number of objects | ||
1525 | allowed per region remains 15,000 no matter what the | ||
1526 | Object Bonus is. Once set, be aware that lowering the Object Bonus may cause objects to be returned or deleted. | ||
1527 | |||
1528 | Default: 1.0 | ||
1529 | </message> | ||
1530 | </alert> | ||
1531 | <alert modal="true" name="HelpRegionMaturity" title="Maturity"> | ||
1532 | <message name="message"> | ||
1533 | Sets the maturity of the region, as shown at the top | ||
1534 | of the screen and in pop-up tips on the map. This setting | ||
1535 | also affects search results - Residents can choose not to find | ||
1536 | content in Mature regions. | ||
1537 | |||
1538 | It may take some time for this change to be reflected | ||
1539 | on the map. | ||
1540 | |||
1541 | Default: PG | ||
1542 | </message> | ||
1543 | </alert> | ||
1544 | <alert modal="true" name="HelpRegionRestrictPushObject" title="Restrict Pushing"> | ||
1545 | <message name="message"> | ||
1546 | This checkbox sets the full region to restricted push permissions. | ||
1547 | When enabled, Residents may only be pushed by themselves | ||
1548 | or by the parcel's owner. | ||
1549 | (Push refers to the llPushObject() LSL function.) | ||
1550 | |||
1551 | Default: Off | ||
1552 | </message> | ||
1553 | </alert> | ||
1554 | <alert modal="true" name="HelpParcelChanges" title="Parcel Join/Subdivide"> | ||
1555 | <message name="message"> | ||
1556 | This checkbox sets whether or not parcels not owned by the estate owner | ||
1557 | can be joined or subdivided. | ||
1558 | If this option is unchecked: | ||
1559 | * Only estate owners or managers can join or subdivide parcels. | ||
1560 | * They may only join or subdivide parcels belonging to the owner, | ||
1561 | or to a group where they have the appropriate group powers. | ||
1562 | If this option is checked: | ||
1563 | * All parcel owners can join or subdivide the parcels they own. | ||
1564 | * For group owned parcels, those with appropriate group powers | ||
1565 | may join or subdivide parcels. | ||
1566 | |||
1567 | Default: Checked | ||
1568 | </message> | ||
1569 | </alert> | ||
1570 | <alert modal="true" name="HelpRegionSearch" title="Do Not Show In Search"> | ||
1571 | <message name="message"> | ||
1572 | Checking this box will block parcel owners from listing their parcels in search | ||
1573 | Default: Off | ||
1574 | </message> | ||
1575 | </alert> | ||
1576 | <alert modal="true" name="HelpParcelSearch" title="Do Not Show In Search"> | ||
1577 | <message name="message"> | ||
1578 | Checking this box will show: | ||
1579 | - this parcel in search results | ||
1580 | - this parcel's public objects | ||
1581 | </message> | ||
1582 | </alert> | ||
1583 | <alert modal="true" name="RegionMaturityChange" title="Changed Region Maturity"> | ||
1584 | <message name="message"> | ||
1585 | The maturity rating for this region has been updated. | ||
1586 | It may take some time for the change to be | ||
1587 | reflected on the map. | ||
1588 | </message> | ||
1589 | </alert> | ||
1590 | <alert modal="true" name="HelpRegionLandResell" title="Land Resale"> | ||
1591 | <message name="message"> | ||
1592 | Estate owners and managers can sell any land owned by the estate owner. | ||
1593 | If this option is left unchecked, buyers cannot resell their land in this region. | ||
1594 | If this option is checked, buyers can resell their land in this region. | ||
1595 | |||
1596 | Default: Disallow | ||
1597 | </message> | ||
1598 | </alert> | ||
1599 | <alert modal="true" name="HelpEstateCovenantID" title="Covenant Asset ID"> | ||
1600 | <message name="message"> | ||
1601 | Sets the notecard asset ID for the Estate Covenant belonging to this | ||
1602 | estate. | ||
1603 | |||
1604 | Default: 00000000-0000-0000-0000-000000000000 or none | ||
1605 | </message> | ||
1606 | </alert> | ||
1607 | <alert modal="true" name="HelpRegionDisableScripts" title="Disable Scripts"> | ||
1608 | <message name="message"> | ||
1609 | When sim performance is poor, a script may be to blame. Open the | ||
1610 | Statistics Bar (Ctrl-Shift-1). Look at the Simulator Physics FPS. | ||
1611 | If it is lower than 45, open the Time panel located at the | ||
1612 | bottom of the Stats Bar. If Script Time reads 25 ms or higher, click | ||
1613 | the Get Top Scripts button. You will be given the name and location | ||
1614 | of scripts that may be causing poor performance. | ||
1615 | |||
1616 | Checking the Disable Scripts box and then pressing the Apply | ||
1617 | button will temporarily disable all scripts in this region. You may | ||
1618 | need to do this in order to travel to the location of a noted | ||
1619 | 'top script'. Once you have arrived at the location, investigate the | ||
1620 | script to determine if it is causing the problem. You may want to | ||
1621 | contact the owner of the script or delete or return the object. | ||
1622 | Uncheck the Disable Script box and then Apply to reactivate | ||
1623 | the scripts in the region. | ||
1624 | |||
1625 | Default: off | ||
1626 | </message> | ||
1627 | </alert> | ||
1628 | <alert modal="true" name="HelpRegionDisableCollisions" title="Disable Collisions"> | ||
1629 | <message name="message"> | ||
1630 | When sim performance is poor, physical objects may be to blame. | ||
1631 | Open the Statistics Bar (Ctrl-Shift-1). Look at the Simulator | ||
1632 | Physics FPS. If it is lower than 45, open the Time panel | ||
1633 | located at the bottom of the Stats Bar. If Sim Time (Physics) | ||
1634 | reads 20 ms or higher, click the Get Top Colliders button. | ||
1635 | You will be given the name and location of physical objects | ||
1636 | that may be causing poor performance. | ||
1637 | |||
1638 | Checking the Disable Collisions box and then pressing the Apply | ||
1639 | button will temporarily disable object-object collisions. You may | ||
1640 | need to do this in order to travel to the location of a noted | ||
1641 | 'top collider'. Once you have arrived at the location, investigate the | ||
1642 | object - is it constantly colliding with other objects? You may want to | ||
1643 | contact the owner of the object or delete or return the object. | ||
1644 | Uncheck the Disable Collisions box and then Apply to reactivate | ||
1645 | collisions in the region. | ||
1646 | |||
1647 | Default: off | ||
1648 | </message> | ||
1649 | </alert> | ||
1650 | <alert modal="true" name="HelpRegionDisablePhysics" title="Disable Physics"> | ||
1651 | <message name="message"> | ||
1652 | Disable Physics is similar to Disable Collisions, except all | ||
1653 | physics simulation is disabled. This means that not only will | ||
1654 | objects stop colliding, but avatars will be unable to move. | ||
1655 | |||
1656 | This should only be used when Disable Collisions does not | ||
1657 | give back enough performance to the region to investigate | ||
1658 | a physics problem or Top Collider. | ||
1659 | |||
1660 | Be sure to re-enable physics when you are done, or avatars | ||
1661 | will continue to be unable to move. | ||
1662 | |||
1663 | Default: off | ||
1664 | </message> | ||
1665 | </alert> | ||
1666 | <alert modal="true" name="HelpRegionTopColliders" title="Top Colliders"> | ||
1667 | <message name="message"> | ||
1668 | Show a list of objects experiencing the greatest number | ||
1669 | of potential object-object collisions. These objects can | ||
1670 | slow performance. Select View > Statistics Bar and | ||
1671 | look under Simulator > Time > Sim Time (Physics) to see | ||
1672 | if more than 20 ms is being spent in physics. | ||
1673 | </message> | ||
1674 | </alert> | ||
1675 | <alert modal="true" name="HelpRegionTopScripts" title="Top Scripts"> | ||
1676 | <message name="message"> | ||
1677 | Show a list of objects spending the most time running | ||
1678 | LSL scripts. These objects can slow performance. | ||
1679 | Select View > Statistics Bar and look under | ||
1680 | Simulator > Time > Script Time to see if more than | ||
1681 | 25 ms is being spent in scripts. | ||
1682 | </message> | ||
1683 | </alert> | ||
1684 | <alert modal="true" name="HelpRegionRestart" title="Restart Region"> | ||
1685 | <message name="message"> | ||
1686 | Restart the server process running this region after a | ||
1687 | two minute warning. All Residents in the region will be | ||
1688 | disconnected. The region will save its data, and should | ||
1689 | come back up within 90 seconds. | ||
1690 | |||
1691 | Restarting the region will not fix most performance | ||
1692 | problems, and should usually be used only when directed. | ||
1693 | </message> | ||
1694 | </alert> | ||
1695 | <alert modal="true" name="HelpRegionWaterHeight" title="Water Height"> | ||
1696 | <message name="message"> | ||
1697 | This is the height in meters where water appears. If | ||
1698 | this setting is anything other than 20 and you have | ||
1699 | water that is adjacent to the edge of world or 'void' | ||
1700 | water, there will be a visible gap. | ||
1701 | |||
1702 | Default: 20 | ||
1703 | </message> | ||
1704 | </alert> | ||
1705 | <alert modal="true" name="HelpRegionTerrainRaise" title="Terrain Raise"> | ||
1706 | <message name="message"> | ||
1707 | This is the distance in meters that parcel owners can raise | ||
1708 | their terrain above the 'baked' terrain default | ||
1709 | height. | ||
1710 | |||
1711 | Default: 4 | ||
1712 | </message> | ||
1713 | </alert> | ||
1714 | <alert modal="true" name="HelpRegionTerrainLower" title="Terrain Lower"> | ||
1715 | <message name="message"> | ||
1716 | This is the distance in meters that parcel owners can lower | ||
1717 | their terrain below the 'baked' terrain default | ||
1718 | height. | ||
1719 | |||
1720 | Default: -4 | ||
1721 | </message> | ||
1722 | </alert> | ||
1723 | <alert modal="true" name="HelpRegionUploadRaw" title="Upload RAW Terrain"> | ||
1724 | <message name="message"> | ||
1725 | This button uploads a .RAW file to the region you are in. | ||
1726 | The file must have the correct dimensions (RGB, 256x256) | ||
1727 | and 13 channels. The best way to create a | ||
1728 | terrain file is to download the existing RAW file. A good | ||
1729 | first step is to modify the red channel (land height), | ||
1730 | and upload it. | ||
1731 | |||
1732 | The upload can take up to 45 seconds. Note that uploading a | ||
1733 | terrain file *will not* move the objects that are on the land, | ||
1734 | only the terrain itself and the permissions associated with the | ||
1735 | parcels. This can result in objects going underground. | ||
1736 | |||
1737 | For more information on editing region height fields, consult F1 Help. | ||
1738 | </message> | ||
1739 | </alert> | ||
1740 | <alert modal="true" name="HelpRegionDownloadRaw" title="Download RAW Terrain"> | ||
1741 | <message name="message"> | ||
1742 | This button downloads a file containing the height field data, | ||
1743 | parcel dimensions, parcel for sale status and some parcel permissions | ||
1744 | for this region. When opening the file in a program such as | ||
1745 | Photoshop you must specify the document's dimensions which | ||
1746 | are: RGB, 256x256 with 13 channels. This terrain file cannot | ||
1747 | be opened in any other way. | ||
1748 | |||
1749 | For more information on editing region height fields, consult F1 help. | ||
1750 | </message> | ||
1751 | </alert> | ||
1752 | <alert modal="true" name="HelpRegionUseEstateSun" title="Use Estate Sun"> | ||
1753 | <message name="message"> | ||
1754 | This checkbox makes the sun position in this region the | ||
1755 | same as the sun position in the rest of the estate. | ||
1756 | |||
1757 | Default: on | ||
1758 | </message> | ||
1759 | </alert> | ||
1760 | <alert modal="true" name="HelpRegionFixedSun" title="Fixed Sun"> | ||
1761 | <message name="message"> | ||
1762 | This checkbox sets the sun position to the position | ||
1763 | in the Phase slider and stops the sun from moving. | ||
1764 | |||
1765 | Default: off | ||
1766 | </message> | ||
1767 | </alert> | ||
1768 | <alert modal="true" name="HelpRegionBakeTerrain" title="Bake Terrain"> | ||
1769 | <message name="message"> | ||
1770 | This button saves the current shape of the terrain as the | ||
1771 | new default for the region. Once baked, the land can revert | ||
1772 | to the saved shape whenever you or others use the Edit Terrain | ||
1773 | 'Revert' option. The baked terrain is also the middle | ||
1774 | point for the terrain raise and lower limits. | ||
1775 | </message> | ||
1776 | </alert> | ||
1777 | <alert modal="true" name="HelpEstateEstateManager" title="Estate Managers"> | ||
1778 | <message name="message"> | ||
1779 | An estate manager is a Resident to whom you have delegated | ||
1780 | control of region and estate settings. An estate manager | ||
1781 | can change any setting in these panels, except for uploading, | ||
1782 | downloading, and baking terrain. In particular, they can | ||
1783 | allow or ban Residents from your estate. | ||
1784 | |||
1785 | Estate managers can only be added or removed by the owner | ||
1786 | of the estate, not by each other. Please only choose | ||
1787 | Residents you trust as estate managers, as you will be | ||
1788 | ultimately responsible for their actions. | ||
1789 | </message> | ||
1790 | </alert> | ||
1791 | <alert modal="true" name="HelpEstateUseGlobalTime" title="Use Global Time"> | ||
1792 | <message name="message"> | ||
1793 | This checkbox makes the sun in your estate follow | ||
1794 | the same position as on the Linden-owned 'mainland' | ||
1795 | estates. | ||
1796 | |||
1797 | Default: on | ||
1798 | </message> | ||
1799 | </alert> | ||
1800 | <alert modal="true" name="HelpEstateFixedSun" title="Fixed Sun"> | ||
1801 | <message name="message"> | ||
1802 | This checkbox sets the sun position to the position | ||
1803 | in the Phase slider and stops the sun from moving. | ||
1804 | </message> | ||
1805 | </alert> | ||
1806 | <alert modal="true" name="HelpEstateExternallyVisible" title="Public Access"> | ||
1807 | <message name="message"> | ||
1808 | This checkbox sets whether Residents who are on other estates can enter this | ||
1809 | estate without being on an access list. | ||
1810 | |||
1811 | Default: on | ||
1812 | </message> | ||
1813 | </alert> | ||
1814 | <alert modal="true" name="HelpEstateAllowDirectTeleport" title="Allow Direct Teleport"> | ||
1815 | <message name="message"> | ||
1816 | When checked, allows Residents to directly teleport to any | ||
1817 | point in your estate. When unchecked, Residents teleport | ||
1818 | to the nearest telehub. | ||
1819 | |||
1820 | Default: off | ||
1821 | </message> | ||
1822 | </alert> | ||
1823 | <alert modal="true" name="HelpEstateAllowResident" title="Allow Access"> | ||
1824 | <message name="message"> | ||
1825 | Access to this estate will be limited to Residents | ||
1826 | listed here and any groups below. This setting is | ||
1827 | only available when Public Access is | ||
1828 | unchecked. | ||
1829 | </message> | ||
1830 | </alert> | ||
1831 | <alert modal="true" name="HelpEstateAllowGroup" title="Allow Group Access"> | ||
1832 | <message name="message"> | ||
1833 | Access to this estate will be limited to groups | ||
1834 | listed here and any Residents above. This setting is | ||
1835 | only available when Public Access is | ||
1836 | unchecked. | ||
1837 | </message> | ||
1838 | </alert> | ||
1839 | <alert modal="true" name="HelpEstateAbuseEmailAddress" title="Abuse Email Address"> | ||
1840 | <message name="message"> | ||
1841 | Setting this to a valid email address will cause | ||
1842 | abuse reports on this estate to be sent to that address. | ||
1843 | Setting it blank will cause abuse reports to be sent | ||
1844 | only to Linden Lab. | ||
1845 | </message> | ||
1846 | </alert> | ||
1847 | <alert modal="true" name="HelpEstateBanResident" title="Deny Access"> | ||
1848 | <message name="message"> | ||
1849 | Residents on this list are denied access to your estate, | ||
1850 | regardless of any other settings. | ||
1851 | </message> | ||
1852 | </alert> | ||
1853 | <alert modal="true" name="HelpEstateVoiceChat" title="Allow Voice Chat"> | ||
1854 | <message name="message"> | ||
1855 | Parcels in this estate are allowed to have their own voice | ||
1856 | channels in which residents may hear and talk with others | ||
1857 | nearby. | ||
1858 | |||
1859 | Default: off | ||
1860 | </message> | ||
1861 | </alert> | ||
1862 | <alert modal="true" name="VoiceVersionMismatch" title="Voice Version Mismatch"> | ||
1863 | <message name="message"> | ||
1864 | This version of Second Life is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update Second Life. | ||
1865 | </message> | ||
1866 | </alert> | ||
1867 | <alert modal="true" name="HelpEstateCovenant" title="Estate Covenant"> | ||
1868 | <message name="message"> | ||
1869 | Setting an estate covenant enables you to sell parcels | ||
1870 | within that estate. If a covenant is not set, you cannot | ||
1871 | sell the land. The notecard for your covenant can be empty | ||
1872 | if you do not wish to apply any rules or advise buyers of | ||
1873 | anything in relation to the land before they buy it. | ||
1874 | |||
1875 | A covenant can be used to communicate rules, guidelines, | ||
1876 | cultural information or simply your own expectations to the | ||
1877 | prospective buyer. This can include zoning, building regulations, | ||
1878 | payment options or any other information you feel it is | ||
1879 | important for the new owner to have seen and to have agreed | ||
1880 | to before they purchase. | ||
1881 | |||
1882 | The buyer must agree to the covenant by ticking the check box | ||
1883 | before they will be able to finish the purchase. Estate | ||
1884 | covenants are always visible in the About Land dialog for | ||
1885 | any parcels that have one set. | ||
1886 | </message> | ||
1887 | </alert> | ||
1888 | <alert modal="true" name="BuyObjectOneOnly" title="Can't Buy Objects"> | ||
1889 | <message name="message"> | ||
1890 | Unable to buy more than one object at a time. | ||
1891 | Please select only one object and try again. | ||
1892 | </message> | ||
1893 | </alert> | ||
1894 | <alert modal="true" name="BuyObjectOneOwner" title="Can't Buy Objects"> | ||
1895 | <message name="message"> | ||
1896 | Cannot buy objects from different owners at the same time. | ||
1897 | Please select only one object and try again. | ||
1898 | </message> | ||
1899 | </alert> | ||
1900 | <alert modal="true" name="BuyContentsOneOnly" title="Can't Buy Contents"> | ||
1901 | <message name="message"> | ||
1902 | Unable to buy the contents of more than one object at a time. | ||
1903 | Please select only one object and try again. | ||
1904 | </message> | ||
1905 | </alert> | ||
1906 | <alert modal="true" name="BuyContentsOneOwner" title="Can't Buy Contents"> | ||
1907 | <message name="message"> | ||
1908 | Cannot buy objects from different owners at the same time. | ||
1909 | Please select only one object and try again. | ||
1910 | </message> | ||
1911 | </alert> | ||
1912 | <alert name="PermYes"> | ||
1913 | <message name="message"> | ||
1914 | Yes | ||
1915 | </message> | ||
1916 | </alert> | ||
1917 | <alert name="PermNo"> | ||
1918 | <message name="message"> | ||
1919 | No | ||
1920 | </message> | ||
1921 | </alert> | ||
1922 | <alert modal="true" name="BuyOriginal"> | ||
1923 | <message name="message"> | ||
1924 | Buy original object from [OWNER] for L$[PRICE]? | ||
1925 | You will become the owner of this object. | ||
1926 | You will be able to: | ||
1927 | Modify: [MODIFYPERM] | ||
1928 | Copy: [COPYPERM] | ||
1929 | Resell or Give Away: [RESELLPERM] | ||
1930 | </message> | ||
1931 | <option name="Buy"> | ||
1932 | OK | ||
1933 | </option> | ||
1934 | <option name="Cancel"> | ||
1935 | Cancel | ||
1936 | </option> | ||
1937 | </alert> | ||
1938 | <alert modal="true" name="BuyOriginalNoOwner"> | ||
1939 | <message name="message"> | ||
1940 | Buy original object for L$[PRICE]? | ||
1941 | You will become the owner of this object. | ||
1942 | You will be able to: | ||
1943 | Modify: [MODIFYPERM] | ||
1944 | Copy: [COPYPERM] | ||
1945 | Resell or Give Away: [RESELLPERM] | ||
1946 | </message> | ||
1947 | <option name="Buy"> | ||
1948 | OK | ||
1949 | </option> | ||
1950 | <option name="Cancel"> | ||
1951 | Cancel | ||
1952 | </option> | ||
1953 | </alert> | ||
1954 | <alert modal="true" name="BuyCopy"> | ||
1955 | <message name="message"> | ||
1956 | Buy a copy from [OWNER] for L$[PRICE]? | ||
1957 | The object will be copied to your inventory. | ||
1958 | You will be able to: | ||
1959 | Modify: [MODIFYPERM] | ||
1960 | Copy: [COPYPERM] | ||
1961 | Resell or Give Away: [RESELLPERM] | ||
1962 | </message> | ||
1963 | <option name="Buy"> | ||
1964 | OK | ||
1965 | </option> | ||
1966 | <option name="Cancel"> | ||
1967 | Cancel | ||
1968 | </option> | ||
1969 | </alert> | ||
1970 | <alert modal="true" name="BuyCopyNoOwner"> | ||
1971 | <message name="message"> | ||
1972 | Buy a copy for L$[PRICE]? | ||
1973 | The object will be copied to your inventory. | ||
1974 | You will be able to: | ||
1975 | Modify: [MODIFYPERM] | ||
1976 | Copy: [COPYPERM] | ||
1977 | Resell or Give Away: [RESELLPERM] | ||
1978 | </message> | ||
1979 | <option name="Buy"> | ||
1980 | OK | ||
1981 | </option> | ||
1982 | <option name="Cancel"> | ||
1983 | Cancel | ||
1984 | </option> | ||
1985 | </alert> | ||
1986 | <alert modal="true" name="BuyContents"> | ||
1987 | <message name="message"> | ||
1988 | Buy contents from [OWNER] for L$[PRICE]? | ||
1989 | They will be copied to your inventory. | ||
1990 | </message> | ||
1991 | <option name="Buy"> | ||
1992 | OK | ||
1993 | </option> | ||
1994 | <option name="Cancel"> | ||
1995 | Cancel | ||
1996 | </option> | ||
1997 | </alert> | ||
1998 | <alert modal="true" name="BuyContentsNoOwner"> | ||
1999 | <message name="message"> | ||
2000 | Buy contents for L$[PRICE]? | ||
2001 | They will be copied to your inventory. | ||
2002 | </message> | ||
2003 | <option name="Buy"> | ||
2004 | OK | ||
2005 | </option> | ||
2006 | <option name="Cancel"> | ||
2007 | Cancel | ||
2008 | </option> | ||
2009 | </alert> | ||
2010 | <alert modal="true" name="ConfirmPurchase" nodefault="true"> | ||
2011 | <message name="message"> | ||
2012 | This transaction will: | ||
2013 | [ACTION] | ||
2014 | |||
2015 | Are you sure you want to proceed with this purchase? | ||
2016 | </message> | ||
2017 | <option name="Confirm"> | ||
2018 | OK | ||
2019 | </option> | ||
2020 | <option name="Cancel"> | ||
2021 | Cancel | ||
2022 | </option> | ||
2023 | </alert> | ||
2024 | <alert modal="true" name="ConfirmPurchasePassword" nodefault="true"> | ||
2025 | <message name="message"> | ||
2026 | This transaction will: | ||
2027 | [ACTION] | ||
2028 | |||
2029 | Are you sure you want to proceed with this purchase? | ||
2030 | Please re-enter your password and click OK. | ||
2031 | </message> | ||
2032 | <editline /> | ||
2033 | <option name="ConfirmPurchase"> | ||
2034 | OK | ||
2035 | </option> | ||
2036 | <option name="Cancel"> | ||
2037 | Cancel | ||
2038 | </option> | ||
2039 | </alert> | ||
2040 | <alert name="SetPickLocation"> | ||
2041 | <message name="message"> | ||
2042 | Note: | ||
2043 | You have updated the location | ||
2044 | of this pick but the other details | ||
2045 | will retain their original values. | ||
2046 | </message> | ||
2047 | <option name="OK"> | ||
2048 | OK | ||
2049 | </option> | ||
2050 | </alert> | ||
2051 | <alert modal="true" name="MoveInventoryFromObject"> | ||
2052 | <message name="message"> | ||
2053 | You have selected 'no copy' inventory items. | ||
2054 | These items will be moved to your inventory, not copied. | ||
2055 | |||
2056 | Move the inventory item(s)? | ||
2057 | </message> | ||
2058 | <ignore name="ignore"> | ||
2059 | When moving no-copy inventory from objects | ||
2060 | </ignore> | ||
2061 | <option name="Move"> | ||
2062 | OK | ||
2063 | </option> | ||
2064 | <option name="Don'tMove"> | ||
2065 | Cancel | ||
2066 | </option> | ||
2067 | </alert> | ||
2068 | <alert modal="true" name="MoveInventoryFromScriptedObject"> | ||
2069 | <message name="message"> | ||
2070 | You have selected 'no copy' inventory items. These items | ||
2071 | will be moved to your inventory, not copied. | ||
2072 | Because this object is scripted, moving these items | ||
2073 | to your inventory may cause the script to malfunction. | ||
2074 | |||
2075 | Move the inventory item(s)? | ||
2076 | </message> | ||
2077 | <ignore name="ignore"> | ||
2078 | When moving no-copy inventory from scripted objects | ||
2079 | </ignore> | ||
2080 | <option name="Move"> | ||
2081 | OK | ||
2082 | </option> | ||
2083 | <option name="Don'tMove"> | ||
2084 | Cancel | ||
2085 | </option> | ||
2086 | </alert> | ||
2087 | <alert name="ClickActionNotPayable"> | ||
2088 | <message name="message"> | ||
2089 | Warning: The Pay Object click action has been set, but it | ||
2090 | will only work if a script is added with a money() event. | ||
2091 | </message> | ||
2092 | <ignore name="ignore"> | ||
2093 | When Setting 'Pay' on objects without money() events | ||
2094 | </ignore> | ||
2095 | </alert> | ||
2096 | <alert modal="true" name="OpenObjectCannotCopy"> | ||
2097 | <message name="message"> | ||
2098 | There are no items in this object that you are allowed to copy. | ||
2099 | </message> | ||
2100 | </alert> | ||
2101 | <alert modal="true" name="WebLaunchAccountHistory"> | ||
2102 | <message name="message"> | ||
2103 | Go to the Second Life web site to see your account history? | ||
2104 | </message> | ||
2105 | <ignore name="ignore"> | ||
2106 | When loading account history web page | ||
2107 | </ignore> | ||
2108 | <option name="Gotopage"> | ||
2109 | Go to page | ||
2110 | </option> | ||
2111 | <option name="Cancel"> | ||
2112 | Cancel | ||
2113 | </option> | ||
2114 | </alert> | ||
2115 | <alert modal="true" name="ClickOpenF1Help"> | ||
2116 | <message name="message"> | ||
2117 | Visit the Second Life Support Web site? (note: this is not an Imprudence Help site) | ||
2118 | </message> | ||
2119 | <ignore name="ignore"> | ||
2120 | When visiting the Second Life Support Website. | ||
2121 | </ignore> | ||
2122 | <option name="Gotopage"> | ||
2123 | Go | ||
2124 | </option> | ||
2125 | <option name="Cancel"> | ||
2126 | Cancel | ||
2127 | </option> | ||
2128 | </alert> | ||
2129 | <alert modal="true" name="RetryFetchInventoryDescendents"> | ||
2130 | <message name="message"> | ||
2131 | Inventory fetch from server timed out. Retry? | ||
2132 | </message> | ||
2133 | <ignore name="ignore"> | ||
2134 | Retry Fetch Inventory Descendents | ||
2135 | </ignore> | ||
2136 | <option name="Retry"> | ||
2137 | Retry | ||
2138 | </option> | ||
2139 | <option name="Cancel"> | ||
2140 | Cancel | ||
2141 | </option> | ||
2142 | </alert> | ||
2143 | <alert modal="true" name="ConfirmQuit"> | ||
2144 | <message name="message"> | ||
2145 | Are you sure you want to quit? | ||
2146 | </message> | ||
2147 | <ignore name="ignore"> | ||
2148 | When Quitting Second Life. | ||
2149 | </ignore> | ||
2150 | <option name="Quit"> | ||
2151 | Quit | ||
2152 | </option> | ||
2153 | <option name="Continue"> | ||
2154 | Continue | ||
2155 | </option> | ||
2156 | </alert> | ||
2157 | <alert modal="true" name="HelpReportAbuseEmailLL"> | ||
2158 | <message name="message"> | ||
2159 | Use this tool to report violations of the Terms of Service | ||
2160 | and Community Standards. See: | ||
2161 | |||
2162 | http://secondlife.com/corporate/tos.php | ||
2163 | http://secondlife.com/corporate/cs.php | ||
2164 | |||
2165 | All reported abuses of the Terms of Service and Community Standards | ||
2166 | are investigated and resolved. You can view the incident | ||
2167 | resolution on the Incident Report at: | ||
2168 | |||
2169 | http://secondlife.com/support/incidentreport.php | ||
2170 | </message> | ||
2171 | </alert> | ||
2172 | <alert modal="true" name="HelpReportAbuseEmailEO"> | ||
2173 | <message name="message"> | ||
2174 | IMPORTANT: This report will go to the owner of the | ||
2175 | region you are currently in and not to Linden Lab. | ||
2176 | |||
2177 | As a service to residents and visitors, the owner of | ||
2178 | the region you are in has elected to receive and resolve | ||
2179 | all reports originating in this region. Linden Lab will | ||
2180 | not investigate reports you file from this location. | ||
2181 | |||
2182 | The region owner will resolve reports based on the local | ||
2183 | rules of this region as outlined in the estate Covenant. | ||
2184 | (View covenants by going to the World menu and selecting | ||
2185 | About Land.) | ||
2186 | |||
2187 | The resolution of this report applies only to this Region; | ||
2188 | Residents access to other areas of Second Life will not be | ||
2189 | affected by the outcome of this report. Only Linden Lab can | ||
2190 | restrict access to the entirety of Second Life. | ||
2191 | </message> | ||
2192 | </alert> | ||
2193 | <alert modal="true" name="HelpReportBug"> | ||
2194 | <message name="message"> | ||
2195 | Use this tool to *only* report technical features that do not perform | ||
2196 | as described or expected, please provide as much detail as possible, | ||
2197 | You may reply to the auto-response email to add more details to your | ||
2198 | report. | ||
2199 | |||
2200 | All bug reports are investigated and assessed. No email response will be sent. | ||
2201 | |||
2202 | If you are having a technical difficulty, please contact Support at: | ||
2203 | |||
2204 | http://secondlife.com/community/support.php | ||
2205 | |||
2206 | Note: Incomplete reports will not be investigated | ||
2207 | </message> | ||
2208 | </alert> | ||
2209 | <alert modal="true" name="HelpReportAbuseSelectCategory"> | ||
2210 | <message name="message"> | ||
2211 | Please select a category for this abuse report. | ||
2212 | Selecting a category helps us file and process abuse reports. | ||
2213 | </message> | ||
2214 | </alert> | ||
2215 | <alert modal="true" name="HelpReportBugSelectCategory"> | ||
2216 | <message name="message"> | ||
2217 | Please select a category for this bug. | ||
2218 | Selecting a category helps us file and process bug reports. | ||
2219 | </message> | ||
2220 | </alert> | ||
2221 | <alert modal="true" name="HelpReportAbuseAbuserNameEmpty"> | ||
2222 | <message name="message"> | ||
2223 | Please enter the name of the abuser. | ||
2224 | Entering an accurate value helps us file and process abuse reports. | ||
2225 | </message> | ||
2226 | </alert> | ||
2227 | <alert modal="true" name="HelpReportAbuseAbuserLocationEmpty"> | ||
2228 | <message name="message"> | ||
2229 | Please enter the location where the abuse took place. | ||
2230 | Entering an accurate value helps us file and process abuse reports. | ||
2231 | </message> | ||
2232 | </alert> | ||
2233 | <alert modal="true" name="HelpReportAbuseSummaryEmpty"> | ||
2234 | <message name="message"> | ||
2235 | Please enter a summary of the abuse that took place. | ||
2236 | Entering an accurate summary helps us file and process abuse reports. | ||
2237 | </message> | ||
2238 | </alert> | ||
2239 | <alert modal="true" name="HelpReportBugSummaryEmpty"> | ||
2240 | <message name="message"> | ||
2241 | Please enter a summary of the bug. | ||
2242 | Entering an accurate summary helps us file and process bug reports. | ||
2243 | </message> | ||
2244 | </alert> | ||
2245 | <alert modal="true" name="HelpReportAbuseDetailsEmpty"> | ||
2246 | <message name="message"> | ||
2247 | Please enter a detailed description of the abuse that took place. | ||
2248 | Be as specific as you can, including names and the details of the | ||
2249 | incident you are reporting. | ||
2250 | Entering an accurate description helps us file and process abuse reports. | ||
2251 | </message> | ||
2252 | </alert> | ||
2253 | <alert modal="true" name="HelpReportBugDetailsEmpty"> | ||
2254 | <message name="message"> | ||
2255 | Please enter a detailed description of the bug. | ||
2256 | Be as specific as you can, including steps to reproduce the bug | ||
2257 | if possible. | ||
2258 | Entering an accurate description helps us file and process bug reports. | ||
2259 | </message> | ||
2260 | </alert> | ||
2261 | <alert modal="true" name="HelpReportAbuseContainsCopyright"> | ||
2262 | <message name="message"> | ||
2263 | Dear Resident, | ||
2264 | |||
2265 | You appear to be reporting intellectual property infringement. Please make sure you are reporting it correctly: | ||
2266 | |||
2267 | (1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the Second Life permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the Second Life Community Standards or Terms of Service. However, the Abuse Team does not handle and will not respond to requests to remove content from the Second Life world. | ||
2268 | |||
2269 | (2) The DMCA or Content Removal Process. To request removal of content from Second Life, you MUST submit a valid notification of infringement as provided in our DMCA Policy at http://secondlife.com/corporate/dmca.php. | ||
2270 | |||
2271 | If you still wish to continue with the abuse process, please close this window and finish submitting your report. You may need to select the specific category 'CopyBot or Permissions Exploit'. | ||
2272 | |||
2273 | Thank you, | ||
2274 | |||
2275 | Linden Lab | ||
2276 | </message> | ||
2277 | </alert> | ||
2278 | <alert modal="true" name="FailedRequirementsCheck"> | ||
2279 | <message name="message"> | ||
2280 | The following required components are missing from [FLOATER]: | ||
2281 | [COMPONENTS] | ||
2282 | </message> | ||
2283 | </alert> | ||
2284 | <alert name="ReplaceAttachment" title="Replace Existing Attachment"> | ||
2285 | <message name="message"> | ||
2286 | There is already an object attached to this point on your body. | ||
2287 | Do you want to replace it with the selected object? | ||
2288 | </message> | ||
2289 | <ignore name="ignore" save_option="true"> | ||
2290 | When replacing existing attachments | ||
2291 | </ignore> | ||
2292 | <option ignore="Replace Automatically" name="Yes"> | ||
2293 | OK | ||
2294 | </option> | ||
2295 | <option ignore="Never Replace" name="No"> | ||
2296 | Cancel | ||
2297 | </option> | ||
2298 | </alert> | ||
2299 | <alert name="BusyModePay" title="Busy Mode Warning"> | ||
2300 | <message name="message"> | ||
2301 | You are in Busy Mode, which means you will not | ||
2302 | receive any items offered in exchange for | ||
2303 | this payment. | ||
2304 | |||
2305 | Would you like to leave Busy Mode before | ||
2306 | completing this transaction? | ||
2307 | </message> | ||
2308 | <ignore name="ignore" save_option="true"> | ||
2309 | When paying a person or object in busy mode | ||
2310 | </ignore> | ||
2311 | <option ignore="Always leave Busy Mode" name="Yes"> | ||
2312 | OK | ||
2313 | </option> | ||
2314 | <option ignore="Never leave Busy Mode" name="No"> | ||
2315 | Cancel | ||
2316 | </option> | ||
2317 | </alert> | ||
2318 | <alert modal="true" name="ConfirmEmptyTrash"> | ||
2319 | <message name="message"> | ||
2320 | Are you sure you want to permanently remove | ||
2321 | the contents of your Trash folder? | ||
2322 | </message> | ||
2323 | <ignore name="ignore"> | ||
2324 | When emptying your inventory trash folder | ||
2325 | </ignore> | ||
2326 | <option default="true" name="Yes"> | ||
2327 | OK | ||
2328 | </option> | ||
2329 | <option name="No"> | ||
2330 | Cancel | ||
2331 | </option> | ||
2332 | </alert> | ||
2333 | <alert modal="true" name="ConfirmClearBrowserCache"> | ||
2334 | <message name="message"> | ||
2335 | Are you sure you want to clear your browser cache? | ||
2336 | </message> | ||
2337 | <option default="true" name="Yes"> | ||
2338 | Yes | ||
2339 | </option> | ||
2340 | <option name="No"> | ||
2341 | Cancel | ||
2342 | </option> | ||
2343 | </alert> | ||
2344 | <alert modal="true" name="ConfirmClearCookies"> | ||
2345 | <message name="message"> | ||
2346 | Are you sure you want to clear your cookies? | ||
2347 | </message> | ||
2348 | <option default="true" name="Yes"> | ||
2349 | Yes | ||
2350 | </option> | ||
2351 | <option name="No"> | ||
2352 | Cancel | ||
2353 | </option> | ||
2354 | </alert> | ||
2355 | <alert modal="true" name="ConfirmClearMediaUrlList"> | ||
2356 | <message name="message"> | ||
2357 | Are you sure you want to clear your list of saved URLs? | ||
2358 | </message> | ||
2359 | <option default="true" name="Yes"> | ||
2360 | Yes | ||
2361 | </option> | ||
2362 | <option name="No"> | ||
2363 | Cancel | ||
2364 | </option> | ||
2365 | </alert> | ||
2366 | <alert modal="true" name="ConfirmEmptyLostAndFound"> | ||
2367 | <message name="message"> | ||
2368 | Are you sure you want to permanently remove | ||
2369 | the contents of your Lost And Found folder? | ||
2370 | </message> | ||
2371 | <ignore name="ignore"> | ||
2372 | When emptying your inventory Lost And Found folder | ||
2373 | </ignore> | ||
2374 | <option default="true" name="Yes"> | ||
2375 | Yes | ||
2376 | </option> | ||
2377 | <option name="No"> | ||
2378 | No | ||
2379 | </option> | ||
2380 | </alert> | ||
2381 | <alert modal="true" name="CopySLURL"> | ||
2382 | <message name="message"> | ||
2383 | The following SLURL has been copied to your clipboard: | ||
2384 | [SLURL] | ||
2385 | |||
2386 | Put it in a web page to give others easy access to this location or | ||
2387 | try it out yourself by pasting it into the address bar of your web browser. | ||
2388 | </message> | ||
2389 | <ignore name="ignore"> | ||
2390 | When copying a SLURL to your clipboard | ||
2391 | </ignore> | ||
2392 | </alert> | ||
2393 | <alert modal="true" name="GraphicsPreferencesHelp"> | ||
2394 | <message name="message"> | ||
2395 | This panel controls window size and resolution and the quality of the client's graphics. The Preferences > Graphics interface allows you to choose between four graphics levels: Low, Mid, High, and Ultra. You may also customize your graphics settings by checking the Custom checkbox and manipulating the following settings: | ||
2396 | |||
2397 | Shaders: Enable or disable various types of pixel shaders. | ||
2398 | |||
2399 | Reflection Detail: Sets the types of objects that water can reflect. | ||
2400 | |||
2401 | Avatar Rendering: Sets options that affect how the client renders avatars. | ||
2402 | |||
2403 | Draw Distance: Affects how far out from your viewpoint objects will be rendered in the scene. | ||
2404 | |||
2405 | Max Particle Count: Sets the maximum number of particles you are able to see on your screen at once. | ||
2406 | |||
2407 | Post Process Quality: Sets the resolution with which Glow is rendered. | ||
2408 | |||
2409 | Mesh Detail: Sets the amount of detail or number of triangles used in rendering certain objects. A higher value takes longer to render, but makes these objects appear with more detail. | ||
2410 | |||
2411 | Lighting Detail: Selects what types of lights you would like to render. | ||
2412 | |||
2413 | Terrain Detail: Sets the amount of detail you would like to see for the terrain texture. | ||
2414 | </message> | ||
2415 | </alert> | ||
2416 | <alert modal="true" name="WLSavePresetAlert"> | ||
2417 | <message name="message"> | ||
2418 | Do you wish to overwrite the saved preset? | ||
2419 | </message> | ||
2420 | <option name="Save"> | ||
2421 | Yes | ||
2422 | </option> | ||
2423 | <option name="Cancel"> | ||
2424 | No | ||
2425 | </option> | ||
2426 | </alert> | ||
2427 | <alert modal="true" name="WLDeletePresetAlert"> | ||
2428 | <message name="message"> | ||
2429 | Do you wish to delete [SKY]? | ||
2430 | </message> | ||
2431 | <option name="Delete"> | ||
2432 | Yes | ||
2433 | </option> | ||
2434 | <option name="Cancel"> | ||
2435 | No | ||
2436 | </option> | ||
2437 | </alert> | ||
2438 | <alert modal="true" name="WLNoEditDefault"> | ||
2439 | <message name="message"> | ||
2440 | You cannot edit or delete a default preset. | ||
2441 | </message> | ||
2442 | </alert> | ||
2443 | <alert modal="true" name="WLMissingSky"> | ||
2444 | <message name="message"> | ||
2445 | This day cycle file references a missing sky file: [SKY]. | ||
2446 | </message> | ||
2447 | </alert> | ||
2448 | <alert modal="true" name="PPSaveEffectAlert"> | ||
2449 | <message name="message"> | ||
2450 | PostProcess Effect exists. Do you still wish overwrite it? | ||
2451 | </message> | ||
2452 | <option name="Save"> | ||
2453 | Yes | ||
2454 | </option> | ||
2455 | <option name="Cancel"> | ||
2456 | No | ||
2457 | </option> | ||
2458 | </alert> | ||
2459 | <alert modal="true" name="HelpEditSky"> | ||
2460 | <message name="message"> | ||
2461 | Edit the WindLight sliders to create and save a set of skies. | ||
2462 | </message> | ||
2463 | </alert> | ||
2464 | <alert modal="true" name="HelpEditDayCycle"> | ||
2465 | <message name="message"> | ||
2466 | Set which skies to turn to throughout the day. | ||
2467 | </message> | ||
2468 | </alert> | ||
2469 | <alert modal="true" name="EnvSettingsHelpButton"> | ||
2470 | <message name="message"> | ||
2471 | These settings adjust the way the environment looks locally on your computer. Your graphics card needs to support atmospheric shaders in order to have access to all of the settings. | ||
2472 | |||
2473 | Adjust the "Time of Day" slider to change the day's phase locally on the viewer. | ||
2474 | |||
2475 | Adjust the "Cloud Cover" slider to control how much the clouds cover the sky. | ||
2476 | |||
2477 | Pick a color in the "Water Color" color picker to change the color of the water. | ||
2478 | |||
2479 | Adjust the "Water Fog" slider to control how dense the fog is underwater. | ||
2480 | |||
2481 | Click "Use Estate Time" to reset the time of day to the region's current time of day and remain linked to it. | ||
2482 | |||
2483 | Click "Advanced Sky" to bring up an editor with more advanced settings for the sky. | ||
2484 | |||
2485 | Click "Advanced Water" to bring up an editor with more advanced settings for the water. | ||
2486 | </message> | ||
2487 | </alert> | ||
2488 | <alert modal="true" name="HelpDayCycle"> | ||
2489 | <message name="message"> | ||
2490 | The Day Cycle Editor gives you control over the sky during Second Life's day/night cycle. This is the cycle that is used by the Basic Environment Editor's Time of Day slider. | ||
2491 | |||
2492 | The Day Cycle Editor works by setting keyframes. These are nodes (represented by the gray blips on the time graph) that have Sky Presets associated with them. As the Time of Day progresses, the WindLight sky "animates" as it interpolates between these keyframes. | ||
2493 | |||
2494 | The yellow arrow above the timeline represents your current view, based on Time of Day. Click and drag it to see how your day will animate. You may add or delete keyframes by pressing the Add Key and Delete Key buttons to the right of the timeline. | ||
2495 | |||
2496 | You can set the time position of a keyframe by either dragging it along the timeline, or by setting its value manually in the Key Frame Settings frame. Within the Key Frame Settings frame, you'll be able to associate the keyframe with its respective WindLight preset. | ||
2497 | |||
2498 | Length of Cycle dictates the overall duration of a "day". Setting this to a low value (for instance, 2 min.) will mean your entire 24-hour timeline will animate in only two real minutes! Once you are satisfied with your timeline and keyframe cycle, use the Play and Stop buttons to preview the results. Remember- you can also move the yellow time-indicator arrow above the timeline to see the cycle animate interactively. Using the Use Estate Time button will synchronize your day length and time of day with the Estate's day cycle. | ||
2499 | |||
2500 | Once you are pleased with your Day Cycle, you can save and load it with the Save Test Day and Load Test Day buttons. Note that, for now, we only allow one Day Cycle. | ||
2501 | </message> | ||
2502 | </alert> | ||
2503 | <alert modal="true" name="HelpBlueHorizon"> | ||
2504 | <message name="message"> | ||
2505 | Use the Red/Green/Blue (RGB) sliders to adjust the color of the sky. You can use the Intensity (I) slider to move all three RGB sliders in unison. | ||
2506 | </message> | ||
2507 | </alert> | ||
2508 | <alert modal="true" name="HelpHazeHorizon"> | ||
2509 | <message name="message"> | ||
2510 | Haze Horizon is one of the most useful parameters for | ||
2511 | adjusting overall light exposure in the scene. It is | ||
2512 | effective for simulating many exposure settings, | ||
2513 | such as white-outs from the sun and darker, | ||
2514 | closed-iris settings. | ||
2515 | </message> | ||
2516 | </alert> | ||
2517 | <alert modal="true" name="HelpBlueDensity"> | ||
2518 | <message name="message"> | ||
2519 | Blue Density affects the overall color saturation of the sky and fog. If you move the Intensity (I) slider to the right, colors will become brighter and more vibrant. If you move it all the way to the left, the colors will become duller, eventually fading to black and white. If you want to fine-tune the sky's color balance, you can control individual elements of saturation by using the Red/Green/Blue (RGB) sliders. | ||
2520 | </message> | ||
2521 | </alert> | ||
2522 | <alert modal="true" name="HelpHazeDensity"> | ||
2523 | <message name="message"> | ||
2524 | Haze Density controls the level of dull, gray | ||
2525 | haze in the atmosphere. It is effective for | ||
2526 | simulating scenes with high levels of smoke | ||
2527 | and man-made pollutants. It is also effective | ||
2528 | for simulating fog and mist. | ||
2529 | </message> | ||
2530 | </alert> | ||
2531 | <alert modal="true" name="HelpDensityMult"> | ||
2532 | <message name="message"> | ||
2533 | The Density Multiplier can be used to affect the overall atmospheric density. At lower settings, it creates a feeling of "thin air", and at higher settings, it creates a very heavy, smoggy effect. | ||
2534 | </message> | ||
2535 | </alert> | ||
2536 | <alert modal="true" name="HelpDistanceMult"> | ||
2537 | <message name="message"> | ||
2538 | Adjusts WindLight's perceived distance. A value of | ||
2539 | zero effectively turns off WindLight's influence | ||
2540 | on terrain and objects. Values greater than 1 simulate | ||
2541 | greater distances for thicker atmospheric effects. | ||
2542 | </message> | ||
2543 | </alert> | ||
2544 | <alert modal="true" name="HelpMaxAltitude"> | ||
2545 | <message name="message"> | ||
2546 | Max Altitude adjusts the altitude calculations WindLight | ||
2547 | performs when computing its atmospheric lighting. At | ||
2548 | later times of day, it is useful for adjusting how | ||
2549 | "deep" the sunset appears. | ||
2550 | </message> | ||
2551 | </alert> | ||
2552 | <alert modal="true" name="HelpSunlightColor"> | ||
2553 | <message name="message"> | ||
2554 | Adjusts the color and intensity of the direct light in the scene. | ||
2555 | </message> | ||
2556 | </alert> | ||
2557 | <alert modal="true" name="HelpSunAmbient"> | ||
2558 | <message name="message"> | ||
2559 | Adjusts the color and intensity of ambient atmospheric light in the scene. | ||
2560 | </message> | ||
2561 | </alert> | ||
2562 | <alert modal="true" name="HelpSunGlow"> | ||
2563 | <message name="message"> | ||
2564 | The Size slider controls the size of the sun. | ||
2565 | The Focus slider controls how blurred the sun | ||
2566 | is over the sky. | ||
2567 | </message> | ||
2568 | </alert> | ||
2569 | <alert modal="true" name="HelpSceneGamma"> | ||
2570 | <message name="message"> | ||
2571 | Adjust the screen's distribution of light and dark. | ||
2572 | </message> | ||
2573 | </alert> | ||
2574 | <alert modal="true" name="HelpStarBrightness"> | ||
2575 | <message name="message"> | ||
2576 | Adjusts the brightness of the stars in the sky. | ||
2577 | </message> | ||
2578 | </alert> | ||
2579 | <alert modal="true" name="HelpTimeOfDay"> | ||
2580 | <message name="message"> | ||
2581 | Controls the location of the sun in the sky. | ||
2582 | Similar to elevation. | ||
2583 | </message> | ||
2584 | </alert> | ||
2585 | <alert modal="true" name="HelpEastAngle"> | ||
2586 | <message name="message"> | ||
2587 | Controls the location of the sun in the sky. | ||
2588 | Similar to azimuth. | ||
2589 | </message> | ||
2590 | </alert> | ||
2591 | <alert modal="true" name="HelpCloudColor"> | ||
2592 | <message name="message"> | ||
2593 | Edits the color of the clouds. It is generally | ||
2594 | recommended to keep it whitish, | ||
2595 | but hey, have fun if you want. | ||
2596 | </message> | ||
2597 | </alert> | ||
2598 | <alert modal="true" name="HelpCloudDetail"> | ||
2599 | <message name="message"> | ||
2600 | Controls the detail image layered on top | ||
2601 | of the main cloud image. X and Y control | ||
2602 | its position. D (Density) controls how puffy or | ||
2603 | fractured the clouds appear. | ||
2604 | </message> | ||
2605 | </alert> | ||
2606 | <alert modal="true" name="HelpCloudDensity"> | ||
2607 | <message name="message"> | ||
2608 | Allows you to control the position of the clouds | ||
2609 | with the X and Y sliders and how dense they are | ||
2610 | with the the D slider. | ||
2611 | </message> | ||
2612 | </alert> | ||
2613 | <alert modal="true" name="HelpCloudCoverage"> | ||
2614 | <message name="message"> | ||
2615 | Controls how much the clouds cover the sky. | ||
2616 | </message> | ||
2617 | </alert> | ||
2618 | <alert modal="true" name="HelpCloudScale"> | ||
2619 | <message name="message"> | ||
2620 | Controls the scaling of the cloud image on the sky dome. | ||
2621 | </message> | ||
2622 | </alert> | ||
2623 | <alert modal="true" name="HelpCloudScrollX"> | ||
2624 | <message name="message"> | ||
2625 | Controls the speed of the clouds as they move in the X direction. | ||
2626 | </message> | ||
2627 | </alert> | ||
2628 | <alert modal="true" name="HelpCloudScrollY"> | ||
2629 | <message name="message"> | ||
2630 | Controls the speed of the clouds as they move in the Y direction. | ||
2631 | </message> | ||
2632 | </alert> | ||
2633 | <alert modal="true" name="HelpClassicClouds"> | ||
2634 | <message name="message"> | ||
2635 | Check this box to enable rendering of Second Life's older classic clouds in addition to WindLight's clouds. | ||
2636 | </message> | ||
2637 | </alert> | ||
2638 | <alert modal="true" name="HelpWaterFogColor"> | ||
2639 | <message name="message"> | ||
2640 | Chooses the color of the underwater fog. | ||
2641 | </message> | ||
2642 | </alert> | ||
2643 | <alert modal="true" name="HelpWaterFogDensity"> | ||
2644 | <message name="message"> | ||
2645 | Controls how dense the water fog is and how far you can see underwater. | ||
2646 | </message> | ||
2647 | </alert> | ||
2648 | <alert modal="true" name="HelpUnderWaterFogMod"> | ||
2649 | <message name="message"> | ||
2650 | Modifies the effect of the Fog Density Exponent to control how far you can see when your avatar is underwater. | ||
2651 | </message> | ||
2652 | </alert> | ||
2653 | <alert modal="true" name="HelpWaterGlow"> | ||
2654 | <message name="message"> | ||
2655 | Controls how much the surface of the water glows. | ||
2656 | </message> | ||
2657 | </alert> | ||
2658 | <alert modal="true" name="HelpWaterNormalScale"> | ||
2659 | <message name="message"> | ||
2660 | Controls the scaling of the three wavelets that make up the water. | ||
2661 | </message> | ||
2662 | </alert> | ||
2663 | <alert modal="true" name="HelpWaterFresnelScale"> | ||
2664 | <message name="message"> | ||
2665 | Controls how much light is reflected at different angles. | ||
2666 | </message> | ||
2667 | </alert> | ||
2668 | <alert modal="true" name="HelpWaterFresnelOffset"> | ||
2669 | <message name="message"> | ||
2670 | Controls how much light intensity is reflected. | ||
2671 | </message> | ||
2672 | </alert> | ||
2673 | <alert modal="true" name="HelpWaterScaleAbove"> | ||
2674 | <message name="message"> | ||
2675 | Controls how much light is refracted from looking above the surface of the water. | ||
2676 | </message> | ||
2677 | </alert> | ||
2678 | <alert modal="true" name="HelpWaterScaleBelow"> | ||
2679 | <message name="message"> | ||
2680 | Controls how much light is refracted from looking from below the surface of the water. | ||
2681 | </message> | ||
2682 | </alert> | ||
2683 | <alert modal="true" name="HelpWaterBlurMultiplier"> | ||
2684 | <message name="message"> | ||
2685 | Controls how waves and reflections are mixed. | ||
2686 | </message> | ||
2687 | </alert> | ||
2688 | <alert modal="true" name="HelpWaterNormalMap"> | ||
2689 | <message name="message"> | ||
2690 | Controls what normal map is layered across the water to determine reflections/refractions. | ||
2691 | </message> | ||
2692 | </alert> | ||
2693 | <alert modal="true" name="HelpWaterWave1"> | ||
2694 | <message name="message"> | ||
2695 | Controls where and how fast the large scaled version of the normal map moves in the X and Y direction. | ||
2696 | </message> | ||
2697 | </alert> | ||
2698 | <alert modal="true" name="HelpWaterWave2"> | ||
2699 | <message name="message"> | ||
2700 | Controls where and how fast the the small scaled version of the normal map moves in the X and Y direction. | ||
2701 | </message> | ||
2702 | </alert> | ||
2703 | <alert name="NewSkyPreset"> | ||
2704 | <message name="message"> | ||
2705 | Give me a name for the new sky. | ||
2706 | </message> | ||
2707 | <editline name="editline"> | ||
2708 | New Preset | ||
2709 | </editline> | ||
2710 | <option name="OK"> | ||
2711 | OK | ||
2712 | </option> | ||
2713 | <option name="Cancel"> | ||
2714 | Cancel | ||
2715 | </option> | ||
2716 | </alert> | ||
2717 | <alert modal="true" name="ExistsSkyPresetAlert"> | ||
2718 | <message name="message"> | ||
2719 | Preset already exists! | ||
2720 | </message> | ||
2721 | </alert> | ||
2722 | <alert name="NewWaterPreset"> | ||
2723 | <message name="message"> | ||
2724 | Give me a name for the new water preset. | ||
2725 | </message> | ||
2726 | <editline name="editline"> | ||
2727 | New Preset | ||
2728 | </editline> | ||
2729 | <option name="OK"> | ||
2730 | OK | ||
2731 | </option> | ||
2732 | <option name="Cancel"> | ||
2733 | Cancel | ||
2734 | </option> | ||
2735 | </alert> | ||
2736 | <alert modal="true" name="ExistsWaterPresetAlert"> | ||
2737 | <message name="message"> | ||
2738 | Preset already exists! | ||
2739 | </message> | ||
2740 | </alert> | ||
2741 | <alert modal="true" name="WaterNoEditDefault"> | ||
2742 | <message name="message"> | ||
2743 | You cannot edit or delete a default preset. | ||
2744 | </message> | ||
2745 | </alert> | ||
2746 | <alert modal="true" name="ChatterBoxSessionStartError"> | ||
2747 | <message name="message"> | ||
2748 | Unable to start a new chat session with [RECIPIENT]. | ||
2749 | [REASON] | ||
2750 | </message> | ||
2751 | <option default="true" name="OK"> | ||
2752 | OK | ||
2753 | </option> | ||
2754 | </alert> | ||
2755 | <alert modal="true" name="ChatterBoxSessionEventError"> | ||
2756 | <message name="message"> | ||
2757 | [EVENT] | ||
2758 | [REASON] | ||
2759 | </message> | ||
2760 | <option default="true" name="OK"> | ||
2761 | OK | ||
2762 | </option> | ||
2763 | </alert> | ||
2764 | <alert modal="true" name="ForceCloseChatterBoxSession"> | ||
2765 | <message name="message"> | ||
2766 | Your chat session with [NAME] must close. | ||
2767 | [REASON] | ||
2768 | </message> | ||
2769 | <option default="true" name="OK"> | ||
2770 | OK | ||
2771 | </option> | ||
2772 | </alert> | ||
2773 | <alert modal="true" name="Cannot_Purchase_an_Attachment"> | ||
2774 | <message name="message"> | ||
2775 | Items may not be purchased while | ||
2776 | they are part of an attachment. | ||
2777 | </message> | ||
2778 | </alert> | ||
2779 | <alert modal="true" name="DebitPermissionDetails" | ||
2780 | title="About Requests for the Debit Permission"> | ||
2781 | <message name="message"> | ||
2782 | Granting this request gives a script ongoing permission to take Linden dollars (L$) from your account. To revoke this permission, the object owner must delete the object or reset the scripts in the object. | ||
2783 | </message> | ||
2784 | <option default="true" name="OK"> | ||
2785 | OK | ||
2786 | </option> | ||
2787 | </alert> | ||
2788 | <alert modal="true" name="AutoWearNewClothing"> | ||
2789 | <message name="message"> | ||
2790 | Would you like to automatically wear the clothing item you create? | ||
2791 | </message> | ||
2792 | <ignore name="ignore"> | ||
2793 | Automatically wear new clothing | ||
2794 | </ignore> | ||
2795 | <option name="Yes"> | ||
2796 | Yes | ||
2797 | </option> | ||
2798 | <option name="No"> | ||
2799 | No | ||
2800 | </option> | ||
2801 | </alert> | ||
2802 | <alert modal="true" name="BadURL"> | ||
2803 | <message name="message"> | ||
2804 | Second Life doesn't know how to handle the link: | ||
2805 | [SLURL] | ||
2806 | Most links are similar to this: | ||
2807 | |||
2808 | secondlife:///app/agent/0e346d8b-4433-4d66-a6b0- | ||
2809 | fd37083abc4c/about | ||
2810 | |||
2811 | Please check the spelling and try again. | ||
2812 | </message> | ||
2813 | </alert> | ||
2814 | <alert modal="true" name="NotAgeVerified"> | ||
2815 | <message name="message"> | ||
2816 | You need to be age-verified in order to access this parcel. | ||
2817 | Would you like to visit the Second Life website to verify your age? | ||
2818 | |||
2819 | [_URL] | ||
2820 | </message> | ||
2821 | <ignore name="ignore"> | ||
2822 | Warn about lack of age verification | ||
2823 | </ignore> | ||
2824 | <option name="Yes"> | ||
2825 | Yes | ||
2826 | </option> | ||
2827 | <option name="No"> | ||
2828 | No | ||
2829 | </option> | ||
2830 | <url option="0"> | ||
2831 | https://secondlife.com/account/verification.php | ||
2832 | </url> | ||
2833 | </alert> | ||
2834 | <alert modal="true" name="Cannot enter parcel: no payment info on file"> | ||
2835 | <message name="message"> | ||
2836 | This parcel requires that you have payment information on file before you can access it. | ||
2837 | Would you like to visit the Second Life website to set this up? | ||
2838 | |||
2839 | [_URL] | ||
2840 | </message> | ||
2841 | <ignore name="ignore"> | ||
2842 | Warn about lack of payment info | ||
2843 | </ignore> | ||
2844 | <option name="Yes"> | ||
2845 | Yes | ||
2846 | </option> | ||
2847 | <option name="No"> | ||
2848 | No | ||
2849 | </option> | ||
2850 | <url option="0"> | ||
2851 | https://secondlife.com/account/ | ||
2852 | </url> | ||
2853 | </alert> | ||
2854 | <alert modal="true" name="MissingString"> | ||
2855 | <message name="message"> | ||
2856 | The string [STRING_NAME] is missing from strings.xml | ||
2857 | </message> | ||
2858 | </alert> | ||
2859 | |||
2860 | <alert modal="true" name="ConfirmAutoPilot"> | ||
2861 | <message name="message"> | ||
2862 | Are you sure you want to move here? | ||
2863 | </message> | ||
2864 | <ignore name="ignore"> | ||
2865 | When using auto-pilot | ||
2866 | </ignore> | ||
2867 | <option name="Move"> | ||
2868 | Move | ||
2869 | </option> | ||
2870 | <option name="Cancel"> | ||
2871 | Cancel | ||
2872 | </option> | ||
2873 | </alert> | ||
2874 | |||
2875 | <alert modal="true" name="ConfirmDoubleClickTP"> | ||
2876 | <message name="message"> | ||
2877 | Are you sure you want to teleport here? | ||
2878 | </message> | ||
2879 | <ignore name="ignore"> | ||
2880 | When double-click teleporting | ||
2881 | </ignore> | ||
2882 | <option name="Teleport"> | ||
2883 | Teleport | ||
2884 | </option> | ||
2885 | <option name="Cancel"> | ||
2886 | Cancel | ||
2887 | </option> | ||
2888 | </alert> | ||
2889 | |||
2890 | <alert modal="true" name="ConfirmTeleportHome"> | ||
4 | <message name="message"> | 2891 | <message name="message"> |
5 | Are you sure you want to teleport home? | 2892 | Are you sure you want to teleport home? |
6 | </message> | 2893 | </message> |
@@ -98,5 +2985,31 @@ WARNING: Don't restore if you aren't sure where the object will go! | |||
98 | Cancel | 2985 | Cancel |
99 | </option> | 2986 | </option> |
100 | </alert> | 2987 | </alert> |
2988 | <alert modal="true" name="IMLogNotFound"> | ||
2989 | <message name="message"> | ||
2990 | IM history could not be found for [NAME]. | ||
2991 | </message> | ||
2992 | <option name="OK"> | ||
2993 | OK | ||
2994 | </option> | ||
2995 | </alert> | ||
2996 | |||
2997 | <!-- [RLVa:KB] --> | ||
2998 | <alert modal="true" name="FirstRLVGiveToRLV"> | ||
2999 | <message name="message"> | ||
3000 | Folders starting with '#RLV/~' can automatically be placed under your #RLV shared folder after you accept the inventory offer. | ||
3001 | |||
3002 | Please note that - if enabled - the accepted inventory items will instantly be available to scripts and will have full use of the RLV API which may cause unexpected or undesirable situations. | ||
3003 | |||
3004 | Do you want to enable this feature? | ||
3005 | </message> | ||
3006 | <option name="Yes"> | ||
3007 | Yes | ||
3008 | </option> | ||
3009 | <option name="No"> | ||
3010 | No | ||
3011 | </option> | ||
3012 | </alert> | ||
3013 | <!-- [/RLVa:KB] --> | ||
101 | </alerts> | 3014 | </alerts> |
102 | <!-- This file is no longer used. Please see notifications.xml and make your changes there. --> | 3015 | <!-- This file is no longer used. Please see notifications.xml and make your changes there. --> |
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 5418364..c26d7ae 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 | |||
@@ -7,7 +7,24 @@ | |||
7 | follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6" | 7 | follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6" |
8 | max_length="65536" mouse_opaque="true" name="credits_editor" width="458" | 8 | max_length="65536" mouse_opaque="true" name="credits_editor" width="458" |
9 | word_wrap="true"> | 9 | word_wrap="true"> |
10 | Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others. | 10 | The Imprudence Viewer was rocked hard by: |
11 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | ||
12 | http://www.imprudenceviewer.org | ||
13 | |||
14 | Imprudence is so awesome thanks to contributions from many generous people: | ||
15 | |||
16 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. | ||
17 | |||
18 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. | ||
19 | |||
20 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. | ||
21 | |||
22 | For a complete list of who did what, read the release notes! | ||
23 | |||
24 | |||
25 | Second Life Copyright (C) 1999-2009 Linden Research Inc. | ||
26 | |||
27 | Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. | ||
11 | 28 | ||
12 | Thank you to the following residents for helping to ensure that this is the best version yet: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, | 29 | Thank you to the following residents for helping to ensure that this is the best version yet: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, |
13 | Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, | 30 | Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, |
@@ -39,7 +56,11 @@ Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft | |||
39 | Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) | 56 | Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) |
40 | 57 | ||
41 | 58 | ||
59 | I get by with a little help from my friends. --Richard Starkey</text_editor> | ||
42 | To be a success in business, be daring, be first, be different. --Henry Marchant</text_editor> | 60 | To be a success in business, be daring, be first, be different. --Henry Marchant</text_editor> |
61 | Begin, be bold and venture to be wise. -- Horace | ||
62 | |||
63 | If you don't like something, change it. If you can't change it, change your attitude. -- Maya Angelou </text_editor> | ||
43 | 64 | ||
44 | <text_editor bottom_delta="174" embedded_items="false" | 65 | <text_editor bottom_delta="174" embedded_items="false" |
45 | follows="left|top|right|bottom" font="SansSerif" height="238" left="6" | 66 | follows="left|top|right|bottom" font="SansSerif" height="238" left="6" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml b/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml new file mode 100644 index 0000000..be7de86 --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml | |||
@@ -0,0 +1,74 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes"?> | ||
2 | <floater | ||
3 | name="animation list" | ||
4 | title="Animation List" | ||
5 | can_resize="true" | ||
6 | can_minimize="true" | ||
7 | can_close="true" | ||
8 | can_drag_on_left="false" | ||
9 | rect_control="FloaterAnimationListRect" | ||
10 | min_width="1000" | ||
11 | min_height="275" | ||
12 | > | ||
13 | <scroll_list | ||
14 | name="animation_list" | ||
15 | left="10" | ||
16 | right="-10" | ||
17 | top="-20" | ||
18 | bottom="100" | ||
19 | column_padding="0" | ||
20 | can_resize="true" | ||
21 | follows="left|top|bottom|right" | ||
22 | draw_heading="true" | ||
23 | multi_select="true" | ||
24 | search_column="1" | ||
25 | tool_tip="Hold shift or control while clicking to select multiple thingers" | ||
26 | > | ||
27 | <!-- Icons relating to the avatar, currently: tracking, and marked --> | ||
28 | <column name="Anim Name" label="Anim Name" width="250"/> | ||
29 | <column name="Animation UUID" label="Animation UUID" width="250"/> | ||
30 | <!--<column name="object_name" label="Distance" dynamicwidth="true"/>--> | ||
31 | <column name="Source Object UUID" label="Source Object UUID" width="250"/> | ||
32 | <column name="Source Owner" label="Source Owner" width="250"/> | ||
33 | <!-- What the avatar is doing: producing sounds, rezzing, particles, etc --> | ||
34 | </scroll_list> | ||
35 | <panel | ||
36 | name="options" | ||
37 | left="10" | ||
38 | right="-10" | ||
39 | top="90" | ||
40 | bottom="10" | ||
41 | border="true" | ||
42 | mouse_opaque="true" | ||
43 | bevel_style="in" | ||
44 | background_visible="true" | ||
45 | background_opaque="true" | ||
46 | follows="left|right|bottom" | ||
47 | bg_opaque_color="0,0,0,0.3" | ||
48 | bg_alpha_color="blue" | ||
49 | can_resize="false" | ||
50 | > | ||
51 | </panel> | ||
52 | |||
53 | <button bottom="55" follows="left|bottom" font="SansSerifSmall" halign="center" | ||
54 | height="20" label="Stop Selected" left_delta="5" | ||
55 | mouse_opaque="true" name="Stop Selected" | ||
56 | tool_tip="Stop selected animations" width="150" /> | ||
57 | <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center" | ||
58 | height="20" label="Revoke Selected" left_delta="155" | ||
59 | mouse_opaque="true" name="Revoke Selected" | ||
60 | tool_tip="Revokes animation permissions for object associated with the selections" width="150" /> | ||
61 | <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center" | ||
62 | height="20" label="Stop+Revoke Selected" left_delta="155" | ||
63 | mouse_opaque="true" name="Stop+Revoke Selected" | ||
64 | tool_tip="Revokes animation permissions for object(s) associated with the selections, as well as stopping the anim" width="150" /> | ||
65 | <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center" | ||
66 | height="20" label="Open Owner Profile" left_delta="155" | ||
67 | mouse_opaque="true" name="Open Owner Profile" | ||
68 | tool_tip="Opens profile of the owner(s) of object(s) associated with the selections" width="150" /> | ||
69 | <button bottom_delta="-25" enabled="false" follows="left|bottom" font="SansSerifSmall" halign="center" | ||
70 | height="20" label="Return Object" left_delta="-465" | ||
71 | mouse_opaque="true" name="Return Object" | ||
72 | tool_tip="Returns object(s) selected, if you have land powers" width="150" /> | ||
73 | |||
74 | </floater> \ No newline at end of file | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml b/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml new file mode 100644 index 0000000..13c6b6c --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml | |||
@@ -0,0 +1,29 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | |||
3 | <floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="true" | ||
4 | can_resize="true" enabled="true" follows="left|bottom" height="620" | ||
5 | hidden="false" left="300" min_height="420" min_width="630" | ||
6 | mouse_opaque="true" name="asset browser" title="Asset Browser" width="720"> | ||
7 | |||
8 | <inventory_panel allow_multi_select="false" border="true" bottom="-299" enabled="true" | ||
9 | follows="left|top" height="280" hidden="false" left="10" | ||
10 | mouse_opaque="true" name="inventory panel" | ||
11 | sort_order="TexturePickerSortOrder" width="231"/> | ||
12 | |||
13 | <button bottom="-350" follows="left|top" font="SansSerifSmall" | ||
14 | halign="center" height="20" hidden="false" label="Next >>" | ||
15 | left="160" mouse_opaque="true" name="button next" scale_image="TRUE" | ||
16 | width="80"/> | ||
17 | |||
18 | <button bottom_delta="-30" follows="left|top" font="SansSerifSmall" | ||
19 | halign="center" height="20" hidden="false" label="<< Previous" | ||
20 | left_delta="0" mouse_opaque="true" name="button previous" scale_image="TRUE" | ||
21 | width="80"/> | ||
22 | |||
23 | <button bottom_delta="-30" follows="left|top" font="SansSerifSmall" | ||
24 | halign="center" height="20" hidden="false" label="Refresh" | ||
25 | left_delta="0" mouse_opaque="true" name="button refresh" scale_image="TRUE" | ||
26 | width="80"/> | ||
27 | |||
28 | </floater> | ||
29 | |||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml index 2a60a3b..e86bf71 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml | |||
@@ -1,5 +1,5 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater bottom="27" can_close="true" can_drag_on_left="false" can_minimize="false" | 2 | <floater bottom="27" can_close="true" can_drag_on_left="false" can_minimize="true" |
3 | can_resize="true" can_tear_off="true" enabled="true" height="270" left="15" | 3 | can_resize="true" can_tear_off="true" enabled="true" height="270" left="15" |
4 | min_height="150" min_width="425" mouse_opaque="true" name="chat floater" | 4 | min_height="150" min_width="425" mouse_opaque="true" name="chat floater" |
5 | rect_control="FloaterChatRect" title="Local Chat" width="435"> | 5 | rect_control="FloaterChatRect" title="Local Chat" width="435"> |
@@ -100,10 +100,14 @@ | |||
100 | <panel bottom="5" follows="left|right|bottom" left="5" name="chat_panel" right="-5" | 100 | <panel bottom="5" follows="left|right|bottom" left="5" name="chat_panel" right="-5" |
101 | tab_group="1" top="25"> | 101 | tab_group="1" top="25"> |
102 | <string name="gesture_label">Gestures</string> | 102 | <string name="gesture_label">Gestures</string> |
103 | <spinner bottom="-22" decimal_digits="0" follows="left|bottom" height="20" | ||
104 | increment="1.00" initial_val="0" label="Channel" label_width="50" left="0" | ||
105 | max_val="2147483647" min_val="0" mouse_opaque="true" name="channel_control" | ||
106 | width="100" tool_tip="Set the default channel for inworld chat"/> | ||
103 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0" | 107 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0" |
104 | enabled="true" follows="left|right|bottom" font="SansSerif" | 108 | enabled="true" follows="left|right|bottom" font="SansSerif" |
105 | handle_edit_keys_directly="false" height="20" label="Click here to chat." | 109 | handle_edit_keys_directly="false" height="20" label="Click here to chat." |
106 | left="0" max_length="254" mouse_opaque="true" name="Chat Editor" | 110 | left="105" max_length="254" mouse_opaque="true" name="Chat Editor" |
107 | right="-70" select_all_on_focus_received="false" select_on_focus="false" | 111 | right="-70" select_all_on_focus_received="false" select_on_focus="false" |
108 | tab_group="1" /> | 112 | tab_group="1" /> |
109 | <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65" | 113 | <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_chatterbox_vertical.xml b/linden/indra/newview/skins/default/xui/en-us/floater_chatterbox_vertical.xml new file mode 100644 index 0000000..8b1f41b --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_chatterbox_vertical.xml | |||
@@ -0,0 +1,14 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <multi_floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" | ||
3 | height="390" name="floater_chatterbox" | ||
4 | rect_control="ChatterboxRect" title="Communicate" width="392"> | ||
5 | <tab_container bottom="2" follows="left|right|top|bottom" height="370" left="0" | ||
6 | name="chatterbox_tabs" tab_position="left" tab_width="126" width="395" /> | ||
7 | <string name="unread_count_string_singular"> | ||
8 | Unread IM | ||
9 | </string> | ||
10 | <string name="unread_count_string_plural"> | ||
11 | Unread IMs | ||
12 | </string> | ||
13 | </multi_floater> | ||
14 | |||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_choose_group.xml b/linden/indra/newview/skins/default/xui/en-us/floater_choose_group.xml index 02001e9..f438262 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_choose_group.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_choose_group.xml | |||
@@ -18,4 +18,7 @@ | |||
18 | <button bottom="-236" font="SansSerif" halign="center" height="20" label="Cancel" | 18 | <button bottom="-236" font="SansSerif" halign="center" height="20" label="Cancel" |
19 | label_selected="Cancel" left_delta="88" mouse_opaque="true" name="Cancel" | 19 | label_selected="Cancel" left_delta="88" mouse_opaque="true" name="Cancel" |
20 | width="80" /> | 20 | width="80" /> |
21 | <string name="none"> | ||
22 | none | ||
23 | </string> | ||
21 | </floater> | 24 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml b/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml index b97b1e4..a8f699a 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml | |||
@@ -1121,4 +1121,27 @@ scratch and wear it. | |||
1121 | height="20" label="Make Outfit..." label_selected="Make Outfit..." | 1121 | height="20" label="Make Outfit..." label_selected="Make Outfit..." |
1122 | mouse_opaque="true" name="Make Outfit" left="100" scale_image="true" | 1122 | mouse_opaque="true" name="Make Outfit" left="100" scale_image="true" |
1123 | width="100" /> | 1123 | width="100" /> |
1124 | |||
1125 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
1126 | bottom="-400" drop_shadow_visible="true" follows="left|top" | ||
1127 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
1128 | left="8" mouse_opaque="true" name="AvatarHeightText" v_pad="0" width="140"> | ||
1129 | Avatar Height: | ||
1130 | </text> | ||
1131 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
1132 | bottom_delta="-18" drop_shadow_visible="true" follows="left|top" | ||
1133 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
1134 | left="8" mouse_opaque="true" name="HeightText" v_pad="0" width="140"> | ||
1135 | Avatar Height | ||
1136 | </text> | ||
1137 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
1138 | bottom_delta="-18" drop_shadow_visible="true" follows="left|top" | ||
1139 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
1140 | left="8" mouse_opaque="true" name="HeightText2" v_pad="0" width="140"> | ||
1141 | Avatar Height2 | ||
1142 | </text> | ||
1143 | |||
1144 | <button bottom="-536" follows="right|bottom" font="SansSerif" halign="center" height="20" hidden="false" label="Export" label_selected="Export" right="-280" mouse_opaque="true" name="Export" scale_image="true" width="80" /> | ||
1145 | <button bottom="-536" follows="right|bottom" font="SansSerif" halign="center" height="20" hidden="false" label="Import" label_selected="Import" right="-370" mouse_opaque="true" name="Import" scale_image="true" width="80" /> | ||
1146 | |||
1124 | </floater> | 1147 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml index df9657c..a600c86 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml | |||
@@ -1,11 +1,11 @@ | |||
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" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" |
3 | can_resize="true" height="570" min_height="570" min_width="780" | 3 | can_resize="true" height="590" min_height="590" min_width="780" |
4 | name="directory" rect_control="FloaterFindRect2" title="Search Second Life" | 4 | name="directory" rect_control="FloaterFindRect2" title="Search Second Life" |
5 | width="780"> | 5 | width="780"> |
6 | <tab_container bottom="-570" follows="left|top|right|bottom" height="550" left="0" | 6 | <tab_container bottom="-590" follows="left|top|right|bottom" height="570" left="0" |
7 | mouse_opaque="false" name="Directory Tabs" tab_position="top" width="780"> | 7 | mouse_opaque="false" name="Directory Tabs" tab_position="top" width="780"> |
8 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 8 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
9 | label="All" left="1" mouse_opaque="false" name="find_all_panel" width="778"> | 9 | label="All" left="1" mouse_opaque="false" name="find_all_panel" width="778"> |
10 | <string name="searching_text"> | 10 | <string name="searching_text"> |
11 | Searching... | 11 | Searching... |
@@ -84,7 +84,7 @@ | |||
84 | </string> | 84 | </string> |
85 | <string name="default_search_page">"http://secondlife.com/app/search/index.php?"</string> | 85 | <string name="default_search_page">"http://secondlife.com/app/search/index.php?"</string> |
86 | </panel> | 86 | </panel> |
87 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 87 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
88 | label="Classifieds" left="1" left_delta="68" mouse_opaque="false" | 88 | label="Classifieds" left="1" left_delta="68" mouse_opaque="false" |
89 | name="classified_panel" width="778"> | 89 | name="classified_panel" width="778"> |
90 | <string name="searching_text"> | 90 | <string name="searching_text"> |
@@ -159,7 +159,7 @@ | |||
159 | <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" | 159 | <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" |
160 | height="20" label="Delete" label_selected="Delete" left="80" | 160 | height="20" label="Delete" label_selected="Delete" left="80" |
161 | mouse_opaque="true" name="Delete" width="80" /> | 161 | mouse_opaque="true" name="Delete" width="80" /> |
162 | <scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true" | 162 | <scroll_list background_visible="true" bottom="-533" column_padding="0" draw_border="true" |
163 | draw_heading="true" follows="left|top|right|bottom" height="450" left="4" | 163 | draw_heading="true" follows="left|top|right|bottom" height="450" left="4" |
164 | mouse_opaque="true" multi_select="false" name="results" search_column="2" width="339"> | 164 | mouse_opaque="true" multi_select="false" name="results" search_column="2" width="339"> |
165 | <column label="" name="icon" width="24" /> | 165 | <column label="" name="icon" width="24" /> |
@@ -178,8 +178,8 @@ | |||
178 | height="20" label="< Prev" label_selected="< Prev" | 178 | height="20" label="< Prev" label_selected="< Prev" |
179 | mouse_opaque="true" name="< Prev" right="258" width="80" /> | 179 | mouse_opaque="true" name="< Prev" right="258" width="80" /> |
180 | </panel> | 180 | </panel> |
181 | <panel border="true" bottom="-549" default_tab_group="1" | 181 | <panel border="true" bottom="-569" default_tab_group="1" |
182 | follows="left|top|right|bottom" height="533" label="Events" left="1" | 182 | follows="left|top|right|bottom" height="553" label="Events" left="1" |
183 | mouse_opaque="false" name="events_panel" width="778"> | 183 | mouse_opaque="false" name="events_panel" width="778"> |
184 | <string name="searching_text"> | 184 | <string name="searching_text"> |
185 | Searching... | 185 | Searching... |
@@ -285,8 +285,8 @@ | |||
285 | <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" | 285 | <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" |
286 | height="20" label="Delete" label_selected="Delete" left="80" | 286 | height="20" label="Delete" label_selected="Delete" left="80" |
287 | mouse_opaque="true" name="Delete" width="80" /> | 287 | mouse_opaque="true" name="Delete" width="80" /> |
288 | <scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true" draw_heading="true" | 288 | <scroll_list background_visible="true" bottom="-533" column_padding="0" draw_border="true" draw_heading="true" |
289 | follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true" | 289 | follows="left|top|right|bottom" height="484" left="4" mouse_opaque="true" |
290 | multi_select="false" name="results" search_column="2" width="339"> | 290 | multi_select="false" name="results" search_column="2" width="339"> |
291 | <column label="" name="icon" width="24" /> | 291 | <column label="" name="icon" width="24" /> |
292 | <column label="" name="type" width="-1" /> | 292 | <column label="" name="type" width="-1" /> |
@@ -306,7 +306,7 @@ | |||
306 | height="20" label="< Prev" label_selected="< Prev" | 306 | height="20" label="< Prev" label_selected="< Prev" |
307 | mouse_opaque="true" name="< Prev" right="258" width="80" /> | 307 | mouse_opaque="true" name="< Prev" right="258" width="80" /> |
308 | </panel> | 308 | </panel> |
309 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 309 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
310 | label="Showcase" left="1" mouse_opaque="false" name="showcase_panel" | 310 | label="Showcase" left="1" mouse_opaque="false" name="showcase_panel" |
311 | width="778"> | 311 | width="778"> |
312 | <string name="searching_text">Searching...</string> | 312 | <string name="searching_text">Searching...</string> |
@@ -338,7 +338,7 @@ | |||
338 | <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string> | 338 | <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string> |
339 | <string name="default_search_page">"http://secondlife.com/app/showcase/index.php?"</string> | 339 | <string name="default_search_page">"http://secondlife.com/app/showcase/index.php?"</string> |
340 | </panel> | 340 | </panel> |
341 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 341 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
342 | label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel" | 342 | label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel" |
343 | width="778" default_tab_group="1"> | 343 | width="778" default_tab_group="1"> |
344 | <string name="searching_text"> | 344 | <string name="searching_text"> |
@@ -411,8 +411,8 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
411 | <button bottom="-48" follows="left|top" font="SansSerif" halign="center" height="20" | 411 | <button bottom="-48" follows="left|top" font="SansSerif" halign="center" height="20" |
412 | label="Search" label_selected="Search" left="208" mouse_opaque="true" | 412 | label="Search" label_selected="Search" left="208" mouse_opaque="true" |
413 | name="Search" tab_group="5" width="70" /> | 413 | name="Search" tab_group="5" width="70" /> |
414 | <scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true" draw_heading="true" | 414 | <scroll_list background_visible="true" bottom="-533" column_padding="0" draw_border="true" draw_heading="true" |
415 | follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true" | 415 | follows="left|top|right|bottom" height="484" left="4" mouse_opaque="true" |
416 | multi_select="false" name="results" search_column="2" tab_group="10" width="387"> | 416 | multi_select="false" name="results" search_column="2" tab_group="10" width="387"> |
417 | <column label="" name="icon" width="24" /> | 417 | <column label="" name="icon" width="24" /> |
418 | <column label="" name="type" width="-1" /> | 418 | <column label="" name="type" width="-1" /> |
@@ -433,7 +433,7 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
433 | height="20" label="< Prev" label_selected="< Prev" | 433 | height="20" label="< Prev" label_selected="< Prev" |
434 | mouse_opaque="true" name="< Prev" right="258" width="80" /> | 434 | mouse_opaque="true" name="< Prev" right="258" width="80" /> |
435 | </panel> | 435 | </panel> |
436 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 436 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
437 | label="Places" left="1" mouse_opaque="false" name="places_panel" | 437 | label="Places" left="1" mouse_opaque="false" name="places_panel" |
438 | width="778"> | 438 | width="778"> |
439 | <string name="searching_text"> | 439 | <string name="searching_text"> |
@@ -550,10 +550,10 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
550 | <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20" | 550 | <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20" |
551 | label="Search" label_selected="Search" left="121" mouse_opaque="true" | 551 | label="Search" label_selected="Search" left="121" mouse_opaque="true" |
552 | name="Search" width="95" /> | 552 | name="Search" width="95" /> |
553 | <scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true" | 553 | <scroll_list background_visible="true" bottom="-533" column_padding="0" draw_border="true" |
554 | draw_heading="true" | 554 | draw_heading="true" |
555 | 555 | ||
556 | follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true" | 556 | follows="left|top|right|bottom" height="484" left="4" mouse_opaque="true" |
557 | multi_select="false" name="results" search_column="2" width="339"> | 557 | multi_select="false" name="results" search_column="2" width="339"> |
558 | <column label="" name="icon" width="24" /> | 558 | <column label="" name="icon" width="24" /> |
559 | <column label="" name="type" width="-1" /> | 559 | <column label="" name="type" width="-1" /> |
@@ -571,7 +571,7 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
571 | height="20" label="< Prev" label_selected="< Prev" | 571 | height="20" label="< Prev" label_selected="< Prev" |
572 | mouse_opaque="true" name="< Prev" right="258" width="80" /> | 572 | mouse_opaque="true" name="< Prev" right="258" width="80" /> |
573 | </panel> | 573 | </panel> |
574 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 574 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
575 | label="People" left="1" mouse_opaque="false" name="people_panel" | 575 | label="People" left="1" mouse_opaque="false" name="people_panel" |
576 | width="778"> | 576 | width="778"> |
577 | <string name="searching_text"> | 577 | <string name="searching_text"> |
@@ -592,10 +592,10 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
592 | <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20" | 592 | <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20" |
593 | label="Search" label_selected="Search" left="121" mouse_opaque="true" | 593 | label="Search" label_selected="Search" left="121" mouse_opaque="true" |
594 | name="Search" width="95" /> | 594 | name="Search" width="95" /> |
595 | <scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true" | 595 | <scroll_list background_visible="true" bottom="-533" column_padding="0" draw_border="true" |
596 | draw_heading="true" | 596 | draw_heading="true" |
597 | 597 | ||
598 | follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true" | 598 | follows="left|top|right|bottom" height="484" left="4" mouse_opaque="true" |
599 | multi_select="false" name="results" search_column="2" width="326"> | 599 | multi_select="false" name="results" search_column="2" width="326"> |
600 | <column label="" name="icon" width="24" /> | 600 | <column label="" name="icon" width="24" /> |
601 | <column label="" name="type" width="-1" /> | 601 | <column label="" name="type" width="-1" /> |
@@ -612,7 +612,7 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
612 | height="20" label="< Prev" label_selected="< Prev" | 612 | height="20" label="< Prev" label_selected="< Prev" |
613 | mouse_opaque="true" name="< Prev" right="244" width="80" /> | 613 | mouse_opaque="true" name="< Prev" right="244" width="80" /> |
614 | </panel> | 614 | </panel> |
615 | <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" | 615 | <panel border="true" bottom="-569" follows="left|top|right|bottom" height="553" |
616 | label="Groups" left="1" mouse_opaque="false" | 616 | label="Groups" left="1" mouse_opaque="false" |
617 | name="groups_panel" | 617 | name="groups_panel" |
618 | width="778"> | 618 | width="778"> |
@@ -683,15 +683,15 @@ To buy direct, visit the land and click on the place name in the title bar. | |||
683 | <string name="default_search_page">"http://secondlife.com/app/search/index_groups.php?"</string> | 683 | <string name="default_search_page">"http://secondlife.com/app/search/index_groups.php?"</string> |
684 | </panel> | 684 | </panel> |
685 | </tab_container> | 685 | </tab_container> |
686 | <panel bottom="-560" follows="right|top" height="470" left="340" | 686 | <panel bottom="-580" follows="right|top" height="490" left="340" |
687 | name="classified_details_panel" width="440" /> | 687 | name="classified_details_panel" width="440" /> |
688 | <panel bottom="-560" follows="right|top" height="486" left="350" name="Panel Avatar" | 688 | <panel bottom="-580" follows="right|top" height="506" left="350" name="Panel Avatar" |
689 | width="430" /> | 689 | width="430" /> |
690 | <panel bottom="-560" follows="right|top" height="470" left="340" | 690 | <panel bottom="-560" follows="right|top" height="490" left="340" |
691 | name="event_details_panel" width="440" /> | 691 | name="event_details_panel" width="440" /> |
692 | <panel bottom="-580" follows="right|top" height="515" left="350" | 692 | <panel bottom="-600" follows="right|top" height="535" left="350" |
693 | name="group_details_panel_holder" width="430"> | 693 | name="group_details_panel_holder" width="430"> |
694 | <panel bottom="0" follows="right|top" height="470" left="0" name="group_details_panel" | 694 | <panel bottom="0" follows="right|top" height="490" left="0" name="group_details_panel" |
695 | width="430" /> | 695 | width="430" /> |
696 | </panel> | 696 | </panel> |
697 | <panel bottom="-560" follows="right|top" height="470" left="340" | 697 | <panel bottom="-560" follows="right|top" height="470" left="340" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml index 6fef552..be8508f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml | |||
@@ -49,6 +49,8 @@ | |||
49 | image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" | 49 | image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" |
50 | label="End Call" left_delta="0" name="end_call_btn" pad_right="10" | 50 | label="End Call" left_delta="0" name="end_call_btn" pad_right="10" |
51 | visible="false" width="100" /> | 51 | visible="false" width="100" /> |
52 | <button bottom="-40" follows="left|top" halign="center" height="20" label="History" left_delta="105" | ||
53 | name="history_btn" visible="true" width="85" /> | ||
52 | <text bottom_delta="0" left="-240" height="14" width="230" name="inventory_send" halign="right" | 54 | <text bottom_delta="0" left="-240" height="14" width="230" name="inventory_send" halign="right" |
53 | text_color="LabelTextColor" follows="right|top" drop_shadow_visible="true" | 55 | text_color="LabelTextColor" follows="right|top" drop_shadow_visible="true" |
54 | bg_visible="false" border_drop_shadow_visible="false" border_visible="false"> | 56 | bg_visible="false" border_drop_shadow_visible="false" border_visible="false"> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml index af60c11..2e97d64 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml | |||
@@ -49,11 +49,13 @@ | |||
49 | <button bottom_delta="0" enabled="false" follows="left|top" halign="right" height="20" | 49 | <button bottom_delta="0" enabled="false" follows="left|top" halign="right" height="20" |
50 | image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" | 50 | image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" |
51 | label="Join Call" left_delta="85" name="start_call_btn" pad_right="12" | 51 | label="Join Call" left_delta="85" name="start_call_btn" pad_right="12" |
52 | width="80" /> | 52 | width="92" /> |
53 | <button bottom_delta="0" follows="left|top" halign="right" height="20" | 53 | <button bottom_delta="0" follows="left|top" halign="right" height="20" |
54 | image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" | 54 | image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" |
55 | label="End Call" left_delta="0" name="end_call_btn" pad_right="12" | 55 | label="End Call" left_delta="0" name="end_call_btn" pad_right="12" |
56 | visible="false" width="80" /> | 56 | visible="false" width="92" /> |
57 | <button bottom="-20" follows="left|top" halign="center" height="20" label="History" left_delta="97" | ||
58 | name="history_btn" visible="true" width="85" /> | ||
57 | <button bottom_delta="0" follows="right|top" height="20" label="< <" | 59 | <button bottom_delta="0" follows="right|top" height="20" label="< <" |
58 | label_selected="> >" left="143" name="toggle_active_speakers_btn" | 60 | label_selected="> >" left="143" name="toggle_active_speakers_btn" |
59 | right="176" | 61 | right="176" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml index 3d1c569..103a11e 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml | |||
@@ -205,5 +205,27 @@ | |||
205 | <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" /> | 205 | <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" /> |
206 | </menu_item_check> | 206 | </menu_item_check> |
207 | </menu> | 207 | </menu> |
208 | <menu bottom_delta="64" drop_shadow="true" height="49" | ||
209 | label="Search" left="0" mouse_opaque="false" name="Search" opaque="true" | ||
210 | tear_off="true" width="118"> | ||
211 | <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByName" height="18" | ||
212 | label="By Name" left="0" mouse_opaque="true" name="By Name" width="118"> | ||
213 | <on_click filter="" function="Inventory.SetSearchBy" userdata="name" /> | ||
214 | </menu_item_check> | ||
215 | <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByCreator" height="18" | ||
216 | label="By Creator" left="0" mouse_opaque="true" name="By Creator" width="118"> | ||
217 | <on_click filter="" function="Inventory.SetSearchBy" userdata="creator" /> | ||
218 | </menu_item_check> | ||
219 | <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByDesc" height="18" | ||
220 | label="By Description" left="0" mouse_opaque="true" name="By Description" width="118"> | ||
221 | <on_click filter="" function="Inventory.SetSearchBy" userdata="desc" /> | ||
222 | </menu_item_check> | ||
223 | <menu_item_separator bottom_delta="-8" height="8" left="0" mouse_opaque="true" name="separator" | ||
224 | width="118" /> | ||
225 | <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByAll" height="18" | ||
226 | label="By All" left="0" mouse_opaque="true" name="By All" width="118"> | ||
227 | <on_click filter="" function="Inventory.SetSearchBy" userdata="all" /> | ||
228 | </menu_item_check> | ||
229 | </menu> | ||
208 | </menu_bar> | 230 | </menu_bar> |
209 | </floater> | 231 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_login.xml b/linden/indra/newview/skins/default/xui/en-us/floater_login.xml new file mode 100644 index 0000000..96e2aa3 --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_login.xml | |||
@@ -0,0 +1,260 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <floater can_close="false" can_drag_on_left="false" can_minimize="false" | ||
3 | can_resize="true" height="400" min_height="400" min_width="600" | ||
4 | name="floater_login" title="plasticwuzhere" width="600"> | ||
5 | |||
6 | <!-- Grid Selector --> | ||
7 | <text type="string" length="1" enabled="true" name="grid_selector_label" | ||
8 | height="10" width="100" left="5" top="-20" | ||
9 | h_pad="0" v_pad="0" halign="left" | ||
10 | font="SansSerif" | ||
11 | follows="left|top" bg_visible="false" border_visible="false" mouse_opaque="true" | ||
12 | drop_shadow_visible="true" border_drop_shadow_visible="false"> | ||
13 | Select a grid: | ||
14 | </text> | ||
15 | |||
16 | <scroll_list background_visible="true" bottom_delta="25" draw_border="true" | ||
17 | draw_stripes="false" | ||
18 | follows="top|left|bottom" height="340" left="5" multi_select="false" | ||
19 | name="grid_selector" width="170"> | ||
20 | <column label="" name="grid" width="200" /> | ||
21 | </scroll_list> | ||
22 | |||
23 | <!-- Grid Selector Buttons --> | ||
24 | <button label="Add" label_selected="Delete" enabled="true" name="btn_add" | ||
25 | height="18" width="55" left="5" bottom_delta="-20" | ||
26 | halign="center" | ||
27 | follows="left|bottom" scale_image="true" | ||
28 | font="SansSerifSmall" mouse_opaque="true" /> | ||
29 | <button label="Copy" label_selected="Add" enabled="true" name="btn_copy" | ||
30 | height="18" width="55" left_delta="58" bottom_delta="0" | ||
31 | halign="center" | ||
32 | follows="left|bottom" scale_image="true" | ||
33 | font="SansSerifSmall" mouse_opaque="true" /> | ||
34 | <button label="Delete" label_selected="Copy" enabled="true" name="btn_delete" | ||
35 | height="18" width="55" left_delta="58" bottom_delta="0" | ||
36 | halign="center" | ||
37 | follows="left|bottom" scale_image="true" | ||
38 | font="SansSerifSmall" mouse_opaque="true" /> | ||
39 | |||
40 | <!-- Grid Details --> | ||
41 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
42 | top="-25" drop_shadow_visible="true" follows="left|top" | ||
43 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
44 | left_delta="60" mouse_opaque="true" name="gridnick_text" v_pad="0" width="120"> | ||
45 | Grid Name: | ||
46 | </text> | ||
47 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="360" | ||
48 | follows="left|top|right" font="SansSerif" handle_edit_keys_directly="true" | ||
49 | height="20" left_delta="90" max_length="40" mouse_opaque="true" | ||
50 | name="gridnick" select_all_on_focus_received="true" width="200" /> | ||
51 | |||
52 | |||
53 | <!-- | ||
54 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
55 | bottom_delta="-23" drop_shadow_visible="true" follows="left|top" | ||
56 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
57 | left_delta="-90" mouse_opaque="true" name="first_name_text" v_pad="0" width="100"> | ||
58 | First Name: | ||
59 | </text> | ||
60 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
61 | follows="left|top|right" font="SansSerif" handle_edit_keys_directly="true" | ||
62 | height="20" left_delta="90" max_length="45" mouse_opaque="true" | ||
63 | name="first_name" select_all_on_focus_received="true" width="200" /> | ||
64 | |||
65 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
66 | bottom_delta="-23" drop_shadow_visible="true" follows="left|top" | ||
67 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
68 | left_delta="-90" mouse_opaque="true" name="last_name_text" v_pad="0" width="100"> | ||
69 | Last Name: | ||
70 | </text> | ||
71 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
72 | follows="left|top|right" font="SansSerif" handle_edit_keys_directly="true" | ||
73 | height="20" left_delta="90" max_length="45" mouse_opaque="true" | ||
74 | name="last_name" select_all_on_focus_received="true" width="200" /> | ||
75 | |||
76 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
77 | bottom_delta="-23" drop_shadow_visible="true" follows="left|top" | ||
78 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
79 | left_delta="-90" mouse_opaque="true" name="avatar_password_text" v_pad="0" width="120"> | ||
80 | Password: | ||
81 | </text> | ||
82 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
83 | follows="left|top|right" font="SansSerif" handle_edit_keys_directly="true" | ||
84 | height="20" left_delta="90" max_length="16" mouse_opaque="true" | ||
85 | name="avatar_password" select_all_on_focus_received="true" width="200" /> | ||
86 | |||
87 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
88 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
89 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
90 | left_delta="-90" mouse_opaque="true" name="start_location_text" v_pad="0" | ||
91 | width="95"> | ||
92 | Start Location: | ||
93 | </text> | ||
94 | <combo_box allow_text_entry="true" bottom_delta="0" follows="left|top|right" height="18" | ||
95 | left_delta="90" max_chars="128" mouse_opaque="true" | ||
96 | name="start_location_combo" width="180"> | ||
97 | <combo_item name="MyHome" value="My Home"> | ||
98 | My Home | ||
99 | </combo_item> | ||
100 | <combo_item name="MyLastLocation" value="My Last Location"> | ||
101 | My Last Location | ||
102 | </combo_item> | ||
103 | <combo_item name="Typeregionname" value="<Type region name>"> | ||
104 | <Type region name> | ||
105 | </combo_item> | ||
106 | </combo_box> | ||
107 | --> | ||
108 | |||
109 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
110 | bottom_delta="-23" drop_shadow_visible="true" follows="left|top" | ||
111 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
112 | left_delta="-90" mouse_opaque="true" name="loginuri_text" v_pad="0" width="120"> | ||
113 | Login URI: | ||
114 | </text> | ||
115 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
116 | follows="left|top|right" font="SansSerif" handle_edit_keys_directly="true" | ||
117 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
118 | name="loginuri" select_all_on_focus_received="true" width="320" /> | ||
119 | |||
120 | <button label="Get Grid Info" label_selected="Get Grid Info" enabled="true" name="btn_gridinfo" | ||
121 | height="18" width="100" bottom_delta="-22" | ||
122 | halign="center" | ||
123 | follows="left|top" scale_image="true" | ||
124 | font="SansSerifSmall" mouse_opaque="true" /> | ||
125 | |||
126 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
127 | bottom_delta="-50" drop_shadow_visible="true" follows="left|top" | ||
128 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
129 | left="182" mouse_opaque="true" name="loginpage_text" v_pad="0" width="120"> | ||
130 | Optional Fields | ||
131 | </text> | ||
132 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
133 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
134 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
135 | left_delta="0" mouse_opaque="true" name="loginpage_text" v_pad="0" width="120"> | ||
136 | Login Page: | ||
137 | </text> | ||
138 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
139 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
140 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
141 | name="loginpage" select_all_on_focus_received="true" width="320" /> | ||
142 | |||
143 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
144 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
145 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
146 | left_delta="-90" mouse_opaque="true" name="helperuri_text" v_pad="0" width="120"> | ||
147 | Helper URI: | ||
148 | </text> | ||
149 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
150 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
151 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
152 | name="helperuri" select_all_on_focus_received="true" width="320" /> | ||
153 | |||
154 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
155 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
156 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
157 | left_delta="-90" mouse_opaque="true" name="website_text" v_pad="0" width="120"> | ||
158 | Website: | ||
159 | </text> | ||
160 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
161 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
162 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
163 | name="website" select_all_on_focus_received="true" width="320" /> | ||
164 | |||
165 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
166 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
167 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
168 | left_delta="-90" mouse_opaque="true" name="support_text" v_pad="0" width="120"> | ||
169 | Support URL: | ||
170 | </text> | ||
171 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
172 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
173 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
174 | name="support" select_all_on_focus_received="true" width="320" /> | ||
175 | |||
176 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
177 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
178 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
179 | left_delta="-90" mouse_opaque="true" name="register_text" v_pad="0" width="120"> | ||
180 | Account URL: | ||
181 | </text> | ||
182 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
183 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
184 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
185 | name="register" select_all_on_focus_received="true" width="320" /> | ||
186 | |||
187 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
188 | bottom_delta="-22" drop_shadow_visible="true" follows="left|top" | ||
189 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
190 | left_delta="-90" mouse_opaque="true" name="password_text" v_pad="0" width="120"> | ||
191 | Password URL: | ||
192 | </text> | ||
193 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" | ||
194 | follows="left|top|right" font="SansSerifSmall" handle_edit_keys_directly="true" | ||
195 | height="20" left_delta="90" max_length="255" mouse_opaque="true" | ||
196 | name="password" select_all_on_focus_received="true" width="320" /> | ||
197 | |||
198 | <view_border bevel_style="none" border_thickness="1" bottom_delta="-4" follows="top|left" height="155" left_delta="-93" name="OptionalPrefsBorder" width="417" /> | ||
199 | |||
200 | <!-- Combo box for multi avatar grid manager avatar name | ||
201 | <combo_box allow_text_entry="true" bevel_style="in" border_style="line" border_thickness="1" | ||
202 | bottom_delta="0" follows="left|top" font="SansSerif" handle_edit_keys_directly="true" | ||
203 | height="20" left="290" max_length="45" mouse_opaque="true" | ||
204 | name="name_combo" select_all_on_focus_received="true" width="185" /> | ||
205 | --> | ||
206 | <!-- Buttons for mutli avatar grid manager | ||
207 | <button bottom="159" follows="top|right" font="SansSerif" halign="center" | ||
208 | height="20" label="New" label_selected="New" | ||
209 | left="480" mouse_opaque="true" name="new_btn" scale_image="TRUE" | ||
210 | width="70" /> | ||
211 | --> | ||
212 | <!-- | ||
213 | <button bottom="134" follows="top|right" font="SansSerif" halign="center" | ||
214 | height="20" label="Remove" label_selected="Remove" | ||
215 | left="480" mouse_opaque="true" name="remove_btn" scale_image="TRUE" | ||
216 | width="70" /> | ||
217 | --> | ||
218 | |||
219 | <!-- Checkbox for selecting a global avatar (for when combo box avatar selector works) | ||
220 | <check_box bottom="85" follows="left|top" font="SansSerifSmall" height="16" | ||
221 | initial_value="false" label="Global Avatar" | ||
222 | left_delta="0" mouse_opaque="true" name="global_check" width="138" /> | ||
223 | |||
224 | <check_box bottom="10" follows="left|bottom" font="SansSerifSmall" height="16" | ||
225 | initial_value="false" label="Remember password" | ||
226 | left_delta="165" mouse_opaque="true" name="remember_check" width="138" /> | ||
227 | |||
228 | <check_box bottom="10" follows="left|bottom" font="SansSerifSmall" height="16" | ||
229 | initial_value="false" label="secret level" | ||
230 | left_delta="165" mouse_opaque="true" name="gawd_mode" width="138" /> | ||
231 | --> | ||
232 | |||
233 | <!-- Cancel/Connect Buttons --> | ||
234 | |||
235 | <!-- | ||
236 | <button bottom="-44" follows="right|top" font="SansSerif" halign="center" | ||
237 | height="24" label="Set as Default" label_selected="Set as Default" | ||
238 | left="470" mouse_opaque="true" name="set_default" scale_image="TRUE" | ||
239 | width="110" /> | ||
240 | --> | ||
241 | |||
242 | <!-- <button bottom="28" follows="right|bottom" font="SansSerif" halign="center" | ||
243 | height="24" label="Connect" label_selected="Connect" | ||
244 | left="280" mouse_opaque="true" name="connect_btn" scale_image="TRUE" | ||
245 | width="100" /> --> | ||
246 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
247 | height="24" label="Ok" label_selected="Apply" left="280" | ||
248 | mouse_opaque="true" name="btn_ok" scale_image="TRUE" width="100" /> | ||
249 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
250 | height="24" label="Apply" label_selected="Apply" left="385" | ||
251 | mouse_opaque="true" name="btn_apply" scale_image="TRUE" width="100" /> | ||
252 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
253 | height="24" label="Undo" label_selected="Undo" left="490" | ||
254 | mouse_opaque="true" name="btn_cancel" scale_image="TRUE" width="100" /> | ||
255 | <!-- | ||
256 | <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18" | ||
257 | left_delta="135" max_chars="40" mouse_opaque="true" | ||
258 | name="server_combo" width="200" /> | ||
259 | --> | ||
260 | </floater> | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml index 1a43be7..fca0379 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml | |||
@@ -1,8 +1,8 @@ | |||
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="true" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" |
3 | height="440" min_height="140" min_width="467" name="floater_about" | 3 | height="440" min_height="140" min_width="467" name="floater_about" |
4 | rect_control="FloaterMediaRect" title="Media Browser" width="820"> | 4 | rect_control="FloaterMediaRect" title="Web Browser" width="560"> |
5 | <layout_stack name="stack1" bottom="0" follows="left|right|top|bottom" left="10" top="-20" width="800"> | 5 | <layout_stack name="stack1" bottom="0" follows="left|right|top|bottom" left="10" top="-20" width="540"> |
6 | <layout_panel auto_resize="false" bottom="0" height="20" left="0" name="nav_controls" user_resize="false" | 6 | <layout_panel auto_resize="false" bottom="0" height="20" left="0" name="nav_controls" user_resize="false" |
7 | width="800"> | 7 | width="800"> |
8 | <button bottom="0" follows="left|top" height="20" label="Back" left="0" name="back" | 8 | <button bottom="0" follows="left|top" height="20" label="Back" left="0" name="back" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml index 9f1e164..57f955f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml | |||
@@ -1,7 +1,107 @@ | |||
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="false" can_resize="true" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" |
3 | can_tear_off="false" follows="top|right" height="220" min_height="64" min_width="64" | 3 | can_tear_off="false" follows="top|right" height="455" min_height="400" min_width="240" |
4 | name="minimap" rect_control="FloaterMiniMapRect" width="200"> | 4 | name="minimap" rect_control="FloaterMiniMapRect" width="200" short_title="Mini-Map"> |
5 | <panel bottom="2" follows="left|top|right|bottom" height="216" label="Mini Map" | 5 | |
6 | left="2" mouse_opaque="false" name="mini_mapview" width="196" /> | 6 | <panel label="Mini Map" name="mini_mapview" |
7 | top="-2" left="2" bottom="196" right="196" | ||
8 | follows="left|top|right|bottom" mouse_opaque="false" /> | ||
9 | |||
10 | <panel name="RadarPanel" label="Radar" | ||
11 | background_visible="true" bg_alpha_color="NetMapBackgroundColor" | ||
12 | left="2" top="196" right="196" height="120" | ||
13 | follows="left|right|bottom" border="false" mouse_opaque="true"> | ||
14 | |||
15 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
16 | bottom="-20" drop_shadow_visible="true" follows="left|top" | ||
17 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" | ||
18 | mouse_opaque="true" name="lblAvatarCount" v_pad="0" | ||
19 | width="220"> | ||
20 | 0 | ||
21 | </text> | ||
22 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
23 | bottom="-20" drop_shadow_visible="true" follows="left|top" | ||
24 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="27" | ||
25 | mouse_opaque="true" name="avatars_in" v_pad="0" | ||
26 | width="220"> | ||
27 | Avatars in | ||
28 | </text> | ||
29 | <slider bottom_delta="0" left_delta="55" follows="left|top" width="110" height="15" | ||
30 | name="near_me_range" label="" control_name="NearMeRange" | ||
31 | min_val="5" max_val="512" increment="1" initial_val="96" decimal_digits="0" /> | ||
32 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
33 | bottom_delta="0" left="190" drop_shadow_visible="true" follows="left|top" | ||
34 | font="SansSerifSmall" h_pad="0" halign="left" height="15" | ||
35 | mouse_opaque="true" name="meters" v_pad="0" | ||
36 | width="40"> | ||
37 | m | ||
38 | </text> | ||
39 | <tab_container border="false" bottom_delta="-176" height="172" left="0" mouse_opaque="false" | ||
40 | name="button_container" tab_position="top" follows="left|right|bottom" width="198"> | ||
41 | <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160" | ||
42 | label="Avatars" left="1" mouse_opaque="true" name="avatar_tab" width="198"> | ||
43 | <button bottom="-25" follows="top|right" height="22" label="IM/Call" | ||
44 | left="-85" name="im_btn" tool_tip="Open Instant Message session" | ||
45 | width="80" /> | ||
46 | <button bottom_delta="-25" follows="top|right" height="22" label="Profile" | ||
47 | left_delta="0" name="profile_btn" | ||
48 | tool_tip="Show picture, groups, and other information" width="80" /> | ||
49 | <button bottom_delta="-25" follows="top|right" height="22" label="Teleport..." | ||
50 | left_delta="0" name="offer_teleport_btn" | ||
51 | tool_tip="Offer this friend a teleport to your current location" width="80" /> | ||
52 | <button bottom_delta="-25" follows="top|right" height="22" label="Track" | ||
53 | left_delta="0" name="track_btn" | ||
54 | tool_tip="Create a beacon to track friends you can map" width="80" /> | ||
55 | <button bottom_delta="-25" follows="top|right" height="22" label="Invite..." | ||
56 | left_delta="0" name="invite_btn" | ||
57 | tool_tip="Remove this person from your friends list" width="80" /> | ||
58 | <button bottom_delta="-25" follows="top|right" height="22" label="Add..." | ||
59 | left_delta="0" name="add_btn" tool_tip="Offer friendship to a resident" | ||
60 | width="80" /> | ||
61 | </panel> | ||
62 | <panel border="true" bottom="-160" follows="left|top|right|bottom" height="160" | ||
63 | label="Estate" left="1" mouse_opaque="true" name="estate_tab" width="198"> | ||
64 | <button bottom="-25" follows="top|right" height="22" label="Freeze..." | ||
65 | left="-85" name="freeze_btn" tool_tip="" | ||
66 | width="80" /> | ||
67 | <button bottom_delta="-25" follows="top|right" height="22" label="Eject..." | ||
68 | left_delta="0" name="eject_btn" | ||
69 | tool_tip="" width="80" /> | ||
70 | <button bottom_delta="-25" follows="top|right" height="22" label="Mute..." | ||
71 | left_delta="0" name="mute_btn" | ||
72 | tool_tip="" width="80" /> | ||
73 | <button bottom_delta="0" follows="top|right" height="22" label="Unmute..." | ||
74 | left_delta="0" name="unmute_btn" | ||
75 | tool_tip="" width="80" /> | ||
76 | <button bottom_delta="-25" follows="top|right" height="22" label="Report..." | ||
77 | left_delta="0" name="ar_btn" | ||
78 | tool_tip="" width="80" /> | ||
79 | <button bottom_delta="-25" follows="top|right" height="22" label="Kick..." | ||
80 | left_delta="0" name="estate_eject_btn" tool_tip="" | ||
81 | width="80" /> | ||
82 | </panel> | ||
83 | </tab_container> | ||
84 | <scroll_list bottom="-190" width="104" height="143" left="4" | ||
85 | follows="left|bottom|right" draw_border="false" draw_heading="true" | ||
86 | draw_stripes="true" column_padding="5" sort_column="1" mouse_opaque="true" | ||
87 | background_visible="true" multi_select="false" name="RadarList"> | ||
88 | <column name="avatar_name" label="Name" dynamicwidth="true" /> | ||
89 | <column name="avatar_distance" label="Dist." width="48" /> | ||
90 | </scroll_list> | ||
91 | </panel> | ||
92 | <string name="no_one_near"> | ||
93 | No avatars within range | ||
94 | </string> | ||
95 | <string name="is_muted"> | ||
96 | (muted) | ||
97 | </string> | ||
98 | <string name="is_typing"> | ||
99 | (typing) | ||
100 | </string> | ||
101 | <string name="entering_chat_range"> | ||
102 | [NAME] has entered chat range ([DISTANCE]m) | ||
103 | </string> | ||
104 | <string name="entering_sim_range"> | ||
105 | [NAME] has entered the sim ([DISTANCE]m) | ||
106 | </string> | ||
7 | </floater> | 107 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml index 568f155..27a08c1 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml | |||
@@ -225,6 +225,12 @@ now wearing into it. | |||
225 | width="489"> | 225 | width="489"> |
226 | Items to include in outfit: | 226 | Items to include in outfit: |
227 | </text> | 227 | </text> |
228 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | ||
229 | label="Check All" left_delta="200" mouse_opaque="true" | ||
230 | name="Check All" scale_image="true" width="90" /> | ||
231 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | ||
232 | label="Uncheck All" left_delta="100" mouse_opaque="true" | ||
233 | name="Uncheck All" scale_image="true" width="90" /> | ||
228 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 234 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
229 | bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top" | 235 | bottom="-196" drop_shadow_visible="true" enabled="true" follows="left|top" |
230 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" | 236 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml index 631db0d..9cf7b5f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml | |||
@@ -43,7 +43,7 @@ | |||
43 | <button bottom_delta="0" follows="right|bottom" height="20" label="Send" | 43 | <button bottom_delta="0" follows="right|bottom" height="20" label="Send" |
44 | left_delta="-106" name="send_btn" width="100" /> | 44 | left_delta="-106" name="send_btn" width="100" /> |
45 | <string name="default_subject"> | 45 | <string name="default_subject"> |
46 | Postcard from Second Life. | 46 | Postcard from a virtual world. |
47 | </string> | 47 | </string> |
48 | <string name="default_message"> | 48 | <string name="default_message"> |
49 | Check this out! | 49 | Check this out! |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_prim_import.xml b/linden/indra/newview/skins/default/xui/en-us/floater_prim_import.xml new file mode 100644 index 0000000..191b31e --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_prim_import.xml | |||
@@ -0,0 +1,5 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <floater can_close="true" can_drag_on_left="true" can_minimize="false" | ||
3 | can_resize="false" height="80" name="Import" title="Import progress" width="200" mouse_opaque="true"> | ||
4 | <text height="15" left="10" name="name_label" top="-10"> Progress </text> | ||
5 | </floater> | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml b/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml index daf45cf..c67443f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml | |||
@@ -1,6 +1,6 @@ | |||
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" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="true" |
3 | can_resize="false" height="520" min_height="0" min_width="0" | 3 | can_resize="false" height="545" min_height="0" min_width="0" |
4 | name="avatarinfo" title="Profile" width="420"> | 4 | name="avatarinfo" title="Profile" width="420"> |
5 | <panel bottom="-520" height="486" left="0" name="Panel Avatar" width="430" /> | 5 | <panel bottom="-545" height="511" left="0" name="Panel Avatar" width="430" /> |
6 | </floater> | 6 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_rlv_behaviour.xml b/linden/indra/newview/skins/default/xui/en-us/floater_rlv_behaviour.xml new file mode 100644 index 0000000..d9e70e6 --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/floater_rlv_behaviour.xml | |||
@@ -0,0 +1,11 @@ | |||
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="true" | ||
3 | height="425" min_height="200" min_width="375" name="rlvBehaviours" | ||
4 | title="Active RLV Restrictions" width="350"> | ||
5 | <scroll_list bottom="-400" draw_border="true" draw_heading="true" | ||
6 | follows="top|left|bottom|right" height="365" left="15" multi_select="false" | ||
7 | name="behaviour_list" right="-15"> | ||
8 | <column label="Restriction" name="behaviour" width="170" /> | ||
9 | <column label="Object Name" name="name" width="170" /> | ||
10 | </scroll_list> | ||
11 | </floater> \ No newline at end of file | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml b/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml index b83a6df..653c75b 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml | |||
@@ -35,6 +35,12 @@ | |||
35 | width="138" /> | 35 | width="138" /> |
36 | <menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0" | 36 | <menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0" |
37 | mouse_opaque="true" name="Revert All Changes" width="138" /> | 37 | mouse_opaque="true" name="Revert All Changes" width="138" /> |
38 | <menu_item_separator bottom_delta="-66" height="8" left="0" mouse_opaque="true" name="separator" | ||
39 | width="138" /> | ||
40 | <menu_item_call bottom_delta="-76" height="20" label="Save to Disk" left="0" | ||
41 | mouse_opaque="true" name="Save to Disk" width="138" /> | ||
42 | <menu_item_call bottom_delta="-96" height="20" label="Load from Disk" left="0" | ||
43 | mouse_opaque="true" name="Load from Disk" width="138" /> | ||
38 | </menu> | 44 | </menu> |
39 | <menu bottom="665" drop_shadow="true" enabled="true" height="198" | 45 | <menu bottom="665" drop_shadow="true" enabled="true" height="198" |
40 | left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false" | 46 | left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml b/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml index bb719cf..efe524c 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml | |||
@@ -1,6 +1,6 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="false" | 2 | <floater bottom="-320" can_close="true" can_drag_on_left="false" can_minimize="true" |
3 | can_resize="false" follows="left|top" height="526" name="Snapshot" | 3 | can_resize="false" follows="left|top" height="546" name="Snapshot" |
4 | rect_control="FloaterSnapshotRect" title="Snapshot Preview" width="215"> | 4 | rect_control="FloaterSnapshotRect" title="Snapshot Preview" width="215"> |
5 | <text bottom_delta="-40" follows="top|left" height="15" left="10" name="type_label" | 5 | <text bottom_delta="-40" follows="top|left" height="15" left="10" name="type_label" |
6 | width="195"> | 6 | width="195"> |
@@ -140,9 +140,9 @@ | |||
140 | <check_box bottom_delta="-20" follows="left|top" label="Constrain Proportions" left="10" | 140 | <check_box bottom_delta="-20" follows="left|top" label="Constrain Proportions" left="10" |
141 | name="keep_aspect_check" /> | 141 | name="keep_aspect_check" /> |
142 | <slider bottom_delta="-20" decimal_digits="0" follows="left|top" height="15" | 142 | <slider bottom_delta="-20" decimal_digits="0" follows="left|top" height="15" |
143 | increment="1" initial_val="75" label="Image Quality" left="10" | 143 | increment="1" initial_val="75" label="Image Quality" left="10" label_width="80" |
144 | max_val="100" min_val="0" name="image_quality_slider" width="210" /> | 144 | max_val="100" min_val="0" name="image_quality_slider" width="210" /> |
145 | <check_box bottom_delta="0" follows="left|top" label="High resolution snapshot" | 145 | <check_box bottom_delta="-20" follows="left|top" label="High resolution snapshot" |
146 | left="10" name="high_res_check" /> | 146 | left="10" name="high_res_check" /> |
147 | <text bottom_delta="-28" follows="left|top" height="20" left="10" | 147 | <text bottom_delta="-28" follows="left|top" height="20" left="10" |
148 | name="layer_type_label" width="50"> | 148 | name="layer_type_label" width="50"> |
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 a7ba9a6..959ebde 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 | |||
@@ -1,6 +1,6 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater bottom="-359" can_close="true" can_drag_on_left="false" can_minimize="true" | 2 | <floater bottom="-374" can_close="true" can_drag_on_left="false" can_minimize="true" |
3 | can_resize="false" follows="left|top" height="550" | 3 | can_resize="false" follows="left|top" height="565" |
4 | left="308" min_height="100" min_width="100" mouse_opaque="true" | 4 | left="308" min_height="100" min_width="100" mouse_opaque="true" |
5 | name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title="" | 5 | name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title="" |
6 | short_title="Build" width="272"> | 6 | short_title="Build" width="272"> |
@@ -79,14 +79,18 @@ | |||
79 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" | 79 | <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" | 80 | initial_value="false" label="Select Faces to Texture" left="4" mouse_opaque="true" |
81 | name="radio select face" radio_style="true" width="114" /> | 81 | name="radio select face" radio_style="true" width="114" /> |
82 | <check_box bottom_delta="-22" control_name="SnapEnabled" follows="left|top" | 82 | <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" |
83 | font="SansSerifSmall" height="16" initial_value="true" label="Use Grid" | 83 | font="SansSerifSmall" height="16" initial_value="false" |
84 | left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" /> | 84 | label="Edit linked parts" left="4" mouse_opaque="true" |
85 | <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" | 85 | name="checkbox edit linked parts" width="114" /> |
86 | height="16" label="Options..." label_selected="Options..." left_delta="75" | 86 | <button bottom_delta="-19" follows="left|top" font="SansSerifSmall" |
87 | mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> | 87 | halign="center" height="18" label="Link" label_selected="Link" |
88 | left="10" mouse_opaque="true" name="link_btn" width="68" /> | ||
89 | <button bottom_delta="0" follows="left|top" font="SansSerifSmall" | ||
90 | halign="center" height="18" label="Unlink" label_selected="Unlink" | ||
91 | left_delta="75" mouse_opaque="true" name="unlink_btn" width="68" /> | ||
88 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 92 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
89 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | 93 | bottom_delta="-18" drop_shadow_visible="true" follows="left|top" |
90 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6" | 94 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6" |
91 | mouse_opaque="true" name="text ruler mode" v_pad="0" width="68"> | 95 | mouse_opaque="true" name="text ruler mode" v_pad="0" width="68"> |
92 | Ruler: | 96 | Ruler: |
@@ -112,16 +116,13 @@ | |||
112 | font="SansSerifSmall" height="16" initial_value="true" | 116 | font="SansSerifSmall" height="16" initial_value="true" |
113 | label="Stretch Textures" left_delta="0" mouse_opaque="true" | 117 | label="Stretch Textures" left_delta="0" mouse_opaque="true" |
114 | name="checkbox stretch textures" width="134" /> | 118 | name="checkbox stretch textures" width="134" /> |
115 | <check_box bottom_delta="-15" control_name="EditLinkedParts" follows="left|top" | 119 | <check_box bottom_delta="-19" control_name="SnapEnabled" follows="left|top" |
116 | font="SansSerifSmall" height="16" initial_value="false" | 120 | font="SansSerifSmall" height="16" initial_value="true" label="Use Grid" |
117 | label="Edit linked parts" left="143" mouse_opaque="true" | 121 | left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" /> |
118 | name="checkbox edit linked parts" width="114" /> | 122 | <button bottom_delta="-19" follows="left|top" font="SansSerifSmall" |
119 | <button bottom_delta="-18" follows="left|top" font="SansSerifSmall" | 123 | halign="center" valign="center" |
120 | halign="center" height="18" label="Link" label_selected="Link" | 124 | height="20" label="Options..." label_selected="Options..." left_delta="20" |
121 | right="-5" mouse_opaque="true" name="link_btn" width="78" /> | 125 | mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> |
122 | <button bottom_delta="-20" follows="left|top" font="SansSerifSmall" | ||
123 | halign="center" height="18" label="Unlink" label_selected="Unlink" | ||
124 | right="-5" mouse_opaque="true" name="unlink_btn" width="78" /> | ||
125 | 126 | ||
126 | 127 | ||
127 | <!-- Help text --> | 128 | <!-- Help text --> |
@@ -309,13 +310,13 @@ | |||
309 | increment="0.1" initial_val="0.00" left="178" max_val="2.0" min_val="-1.0" | 310 | increment="0.1" initial_val="0.00" left="178" max_val="2.0" min_val="-1.0" |
310 | mouse_opaque="true" name="slider force" width="80" /> | 311 | mouse_opaque="true" name="slider force" width="80" /> |
311 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 312 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
312 | bottom="-151" left="118" drop_shadow_visible="true" follows="left|top" | 313 | bottom="-168" left="118" drop_shadow_visible="true" follows="left|top" |
313 | font="SansSerifSmall" h_pad="0" halign="right" height="16" | 314 | font="SansSerifSmall" h_pad="0" halign="right" height="16" |
314 | mouse_opaque="true" name="obj_count" v_pad="0" width="143"> | 315 | mouse_opaque="true" name="obj_count" v_pad="0" width="143"> |
315 | Selected objects: [COUNT] | 316 | Selected objects: [COUNT] |
316 | </text> | 317 | </text> |
317 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 318 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
318 | bottom="-163" left="118" drop_shadow_visible="true" follows="left|top" | 319 | bottom="-181" left="118" drop_shadow_visible="true" follows="left|top" |
319 | font="SansSerifSmall" h_pad="0" halign="right" height="16" | 320 | font="SansSerifSmall" h_pad="0" halign="right" height="16" |
320 | mouse_opaque="true" name="prim_count" v_pad="0" width="143"> | 321 | mouse_opaque="true" name="prim_count" v_pad="0" width="143"> |
321 | primitives: [COUNT] | 322 | primitives: [COUNT] |
@@ -323,7 +324,7 @@ | |||
323 | 324 | ||
324 | <!-- Sub-tabs --> | 325 | <!-- Sub-tabs --> |
325 | 326 | ||
326 | <tab_container bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="false" | 327 | <tab_container bottom="-565" follows="left|top" height="384" left="0" mouse_opaque="false" |
327 | name="Object Info Tabs" tab_max_width="52" tab_min_width="40" | 328 | name="Object Info Tabs" tab_max_width="52" tab_min_width="40" |
328 | tab_position="top" width="272"> | 329 | tab_position="top" width="272"> |
329 | <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" | 330 | <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" |
@@ -380,20 +381,36 @@ | |||
380 | height="20" label="Profile..." label_selected="Profile..." left_delta="94" | 381 | height="20" label="Profile..." label_selected="Profile..." left_delta="94" |
381 | mouse_opaque="true" name="button owner profile" scale_image="TRUE" | 382 | mouse_opaque="true" name="button owner profile" scale_image="TRUE" |
382 | width="78" /> | 383 | width="78" /> |
384 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
385 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | ||
386 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" | ||
387 | mouse_opaque="true" name="Last Owner:" v_pad="0" width="78"> | ||
388 | Last Owner: | ||
389 | </text> | ||
390 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
391 | bottom_delta="0" drop_shadow_visible="true" follows="left|top" | ||
392 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78" | ||
393 | mouse_opaque="true" name="Last Owner Name" v_pad="0" width="88"> | ||
394 | Thrax Linden | ||
395 | </text> | ||
396 | <button bottom_delta="0" follows="top|right" font="SansSerifSmall" halign="center" | ||
397 | height="20" label="Profile..." label_selected="Profile..." left_delta="94" | ||
398 | mouse_opaque="true" name="button last owner profile" scale_image="TRUE" | ||
399 | width="78" /> | ||
383 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 400 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
384 | bottom="-106" drop_shadow_visible="true" follows="left|top" | 401 | bottom="-126" drop_shadow_visible="true" follows="left|top" |
385 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" | 402 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" |
386 | mouse_opaque="true" name="Group:" v_pad="0" width="78"> | 403 | mouse_opaque="true" name="Group:" v_pad="0" width="78"> |
387 | Group: | 404 | Group: |
388 | </text> | 405 | </text> |
389 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 406 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
390 | bottom="-106" drop_shadow_visible="true" follows="left|top" | 407 | bottom="-126" drop_shadow_visible="true" follows="left|top" |
391 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78" | 408 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78" |
392 | mouse_opaque="true" name="Group Name Proxy" v_pad="0" visible="false" | 409 | mouse_opaque="true" name="Group Name Proxy" v_pad="0" visible="false" |
393 | width="88"> | 410 | width="88"> |
394 | The Lindens | 411 | The Lindens |
395 | </text> | 412 | </text> |
396 | <button bottom="-106" follows="top|right" font="SansSerifSmall" halign="center" | 413 | <button bottom="-126" follows="top|right" font="SansSerifSmall" halign="center" |
397 | height="20" label="Set..." label_selected="Set..." left_delta="94" | 414 | height="20" label="Set..." label_selected="Set..." left_delta="94" |
398 | mouse_opaque="true" name="button set group" scale_image="TRUE" width="78" /> | 415 | mouse_opaque="true" name="button set group" scale_image="TRUE" width="78" /> |
399 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 416 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
@@ -419,7 +436,7 @@ | |||
419 | <string name="text deed"> | 436 | <string name="text deed"> |
420 | Deed | 437 | Deed |
421 | </string> | 438 | </string> |
422 | <button bottom="-186" follows="top|right" font="SansSerifSmall" halign="center" | 439 | <button bottom_delta="0" follows="top|right" font="SansSerifSmall" halign="center" |
423 | height="20" label="Deed..." label_selected="Deed..." left_delta="172" | 440 | height="20" label="Deed..." label_selected="Deed..." left_delta="172" |
424 | mouse_opaque="true" name="button deed" scale_image="TRUE" | 441 | mouse_opaque="true" name="button deed" scale_image="TRUE" |
425 | tool_tip="Group shared objects can be deeded by a group officer." | 442 | tool_tip="Group shared objects can be deeded by a group officer." |
@@ -508,37 +525,37 @@ | |||
508 | </combo_item> | 525 | </combo_item> |
509 | </combo_box> | 526 | </combo_box> |
510 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 527 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
511 | bottom="-115" drop_shadow_visible="true" follows="left|top" | 528 | bottom="-135" drop_shadow_visible="true" follows="left|top" |
512 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" | 529 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" |
513 | mouse_opaque="true" name="B:" v_pad="0" width="174"> | 530 | mouse_opaque="true" name="B:" v_pad="0" width="174"> |
514 | B: | 531 | B: |
515 | </text> | 532 | </text> |
516 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 533 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
517 | bottom="-115" drop_shadow_visible="true" follows="left|top" | 534 | bottom="-135" drop_shadow_visible="true" follows="left|top" |
518 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" | 535 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" |
519 | mouse_opaque="true" name="O:" v_pad="0" width="124"> | 536 | mouse_opaque="true" name="O:" v_pad="0" width="124"> |
520 | O; | 537 | O; |
521 | </text> | 538 | </text> |
522 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 539 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
523 | bottom="-115" drop_shadow_visible="true" follows="left|top" | 540 | bottom="-135" drop_shadow_visible="true" follows="left|top" |
524 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" | 541 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" |
525 | mouse_opaque="true" name="G:" v_pad="0" width="74"> | 542 | mouse_opaque="true" name="G:" v_pad="0" width="74"> |
526 | G: | 543 | G: |
527 | </text> | 544 | </text> |
528 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 545 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
529 | bottom="-127" drop_shadow_visible="true" follows="left|top" | 546 | bottom="-147" drop_shadow_visible="true" follows="left|top" |
530 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" | 547 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" |
531 | mouse_opaque="true" name="E:" v_pad="0" width="174"> | 548 | mouse_opaque="true" name="E:" v_pad="0" width="174"> |
532 | E: | 549 | E: |
533 | </text> | 550 | </text> |
534 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 551 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
535 | bottom="-127" drop_shadow_visible="true" follows="left|top" | 552 | bottom="-147" drop_shadow_visible="true" follows="left|top" |
536 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" | 553 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" |
537 | mouse_opaque="true" name="N:" v_pad="0" width="124"> | 554 | mouse_opaque="true" name="N:" v_pad="0" width="124"> |
538 | N: | 555 | N: |
539 | </text> | 556 | </text> |
540 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 557 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
541 | bottom="-127" drop_shadow_visible="true" follows="left|top" | 558 | bottom="-147" drop_shadow_visible="true" follows="left|top" |
542 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" | 559 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" |
543 | mouse_opaque="true" name="F:" v_pad="0" width="74"> | 560 | mouse_opaque="true" name="F:" v_pad="0" width="74"> |
544 | F: | 561 | F: |
@@ -638,15 +655,15 @@ | |||
638 | </text> | 655 | </text> |
639 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" | 656 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" |
640 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" | 657 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" |
641 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X" | 658 | min_val="0.01" mouse_opaque="true" name="Scale X" |
642 | text_enabled_color="1, 1, 1, 1" width="96" /> | 659 | text_enabled_color="1, 1, 1, 1" width="96" /> |
643 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 660 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
644 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" | 661 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" |
645 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y" | 662 | min_val="0.01" mouse_opaque="true" name="Scale Y" |
646 | text_enabled_color="1, 1, 1, 1" width="96" /> | 663 | text_enabled_color="1, 1, 1, 1" width="96" /> |
647 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 664 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
648 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" | 665 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" |
649 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z" | 666 | min_val="0.01" mouse_opaque="true" name="Scale Z" |
650 | text_enabled_color="1, 1, 1, 1" width="96" /> | 667 | text_enabled_color="1, 1, 1, 1" width="96" /> |
651 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 668 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
652 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | 669 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" |
@@ -755,12 +772,12 @@ | |||
755 | Skew | 772 | Skew |
756 | </text> | 773 | </text> |
757 | <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" | 774 | <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" |
758 | increment="5" initial_val="0" left="121" max_val="95" min_val="0" | 775 | increment="5" initial_val="0" left="121" max_val="95" min_val="0" |
759 | mouse_opaque="true" name="Scale 1" width="68" label=" " label_width="10"/> | 776 | mouse_opaque="true" name="Scale 1" width="68" /> |
760 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" | 777 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" |
761 | increment="0.05" initial_val="0" left_delta="73" max_val="0.95" label_width="10" | 778 | increment="0.05" initial_val="0" left_delta="73" max_val="0.95" |
762 | min_val="-0.95" mouse_opaque="true" name="Skew" width="68" label=" " /> | 779 | min_val="-0.95" mouse_opaque="true" name="Skew" width="68" /> |
763 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 780 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
764 | bottom_delta="-15" drop_shadow_visible="true" follows="left|top" | 781 | bottom_delta="-15" drop_shadow_visible="true" follows="left|top" |
765 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" | 782 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" |
766 | mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> | 783 | mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> |
@@ -879,10 +896,10 @@ | |||
879 | </text> | 896 | </text> |
880 | <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" | 897 | <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" |
881 | increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" | 898 | increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" |
882 | mouse_opaque="true" name="Radius Offset" width="68" label=" " label_width="10" /> | 899 | mouse_opaque="true" name="Radius Offset" width="68" /> |
883 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" | 900 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" |
884 | increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" | 901 | increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" |
885 | mouse_opaque="true" name="Revolutions" width="68" label=" " label_width="10" /> | 902 | mouse_opaque="true" name="Revolutions" width="68" /> |
886 | <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" | 903 | <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" |
887 | default_image_name="Default" follows="left|top" height="141" | 904 | default_image_name="Default" follows="left|top" height="141" |
888 | label="Sculpt Texture" left="121" mouse_opaque="true" | 905 | label="Sculpt Texture" left="121" mouse_opaque="true" |
@@ -1238,25 +1255,6 @@ | |||
1238 | Parcel Information | 1255 | Parcel Information |
1239 | </text> | 1256 | </text> |
1240 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 1257 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
1241 | bottom="-40" drop_shadow_visible="true" follows="left|top" | ||
1242 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40" | ||
1243 | mouse_opaque="true" name="label_parcel_modify" v_pad="0" width="150"> | ||
1244 | Modify Parcel | ||
1245 | </text> | ||
1246 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | ||
1247 | height="20" label="Subdivide..." label_selected="Subdivide..." left="48" | ||
1248 | mouse_opaque="true" name="button subdivide land" scale_image="TRUE" | ||
1249 | width="112" /> | ||
1250 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | ||
1251 | height="20" label="Join..." label_selected="Join..." left="48" | ||
1252 | mouse_opaque="true" name="button join land" scale_image="TRUE" width="112" /> | ||
1253 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
1254 | bottom_delta="-56" drop_shadow_visible="true" follows="left|top" | ||
1255 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40" | ||
1256 | mouse_opaque="true" name="label_parcel_info" v_pad="0" width="150"> | ||
1257 | Parcel Information | ||
1258 | </text> | ||
1259 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
1260 | bottom_delta="-24" drop_shadow_visible="true" follows="left|top" | 1258 | bottom_delta="-24" drop_shadow_visible="true" follows="left|top" |
1261 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="48" | 1259 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="48" |
1262 | mouse_opaque="true" name="label_area_price" v_pad="0" width="150"> | 1260 | mouse_opaque="true" name="label_area_price" v_pad="0" width="150"> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_water.xml b/linden/indra/newview/skins/default/xui/en-us/floater_water.xml index 9dcb96e..7038c93 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_water.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_water.xml | |||
@@ -11,17 +11,23 @@ | |||
11 | width="110"> | 11 | width="110"> |
12 | Water Presets: | 12 | Water Presets: |
13 | </text> | 13 | </text> |
14 | <combo_box allow_text_entry="false" bottom="-50" follows="left|top" height="18" | 14 | <combo_box allow_text_entry="false" bottom="-52" follows="left|top" height="18" |
15 | left_delta="110" max_chars="20" mouse_opaque="true" | 15 | left_delta="120" max_chars="20" mouse_opaque="true" |
16 | name="WaterPresetsCombo" width="150" /> | 16 | name="WaterPresetsCombo" width="150" /> |
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
18 | label="" label_selected="" left_delta="-25" image_overlay="arrow_left.tga" | ||
19 | mouse_opaque="true" name="prev" scale_image="true" width="20" /> | ||
20 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
21 | label="" label_selected="" left_delta="180" image_overlay="arrow_right.tga" | ||
22 | mouse_opaque="true" name="next" scale_image="true" width="20" /> | ||
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | 23 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" |
18 | label="New" label_selected="New" left_delta="170" | 24 | label="New" label_selected="New" left_delta="40" |
19 | mouse_opaque="true" name="WaterNewPreset" scale_image="true" width="70" /> | 25 | mouse_opaque="true" name="WaterNewPreset" scale_image="true" width="70" /> |
20 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 26 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
21 | label="Save" label_selected="Save" left_delta="80" | 27 | label="Save" label_selected="Save" left_delta="70" |
22 | mouse_opaque="true" name="WaterSavePreset" scale_image="true" width="70" /> | 28 | mouse_opaque="true" name="WaterSavePreset" scale_image="true" width="70" /> |
23 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 29 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
24 | label="Delete" label_selected="Delete" left_delta="80" | 30 | label="Delete" label_selected="Delete" left_delta="70" |
25 | mouse_opaque="true" name="WaterDeletePreset" scale_image="true" width="70" /> | 31 | mouse_opaque="true" name="WaterDeletePreset" scale_image="true" width="70" /> |
26 | <tab_container bottom="-240" follows="left|top" height="180" left="0" | 32 | <tab_container bottom="-240" follows="left|top" height="180" left="0" |
27 | mouse_opaque="false" name="Water Tabs" tab_position="top" width="700"> | 33 | mouse_opaque="false" name="Water Tabs" tab_position="top" width="700"> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml b/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml index 906e7de..471b3e5 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml | |||
@@ -4,29 +4,35 @@ | |||
4 | min_width="400" mouse_opaque="true" name="WindLight floater" | 4 | min_width="400" mouse_opaque="true" name="WindLight floater" |
5 | rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" | 5 | rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" |
6 | width="700"> | 6 | width="700"> |
7 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 7 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
8 | bottom="-50" drop_shadow_visible="true" follows="left|top|right" | 8 | bottom="-50" drop_shadow_visible="true" follows="left|top|right" |
9 | font="SansSerif" h_pad="0" halign="left" height="16" | 9 | font="SansSerif" h_pad="0" halign="left" height="16" |
10 | left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" | 10 | left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" |
11 | width="110"> | 11 | width="110"> |
12 | Sky Presets: | 12 | Sky Presets: |
13 | </text> | 13 | </text> |
14 | <combo_box allow_text_entry="false" bottom="-50" follows="left|top" height="18" | 14 | <combo_box allow_text_entry="false" bottom="-52" follows="left|top" height="18" |
15 | left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" | 15 | left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" |
16 | width="150" /> | 16 | width="150" /> |
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
18 | label="" label_selected="" left_delta="-25" image_overlay="arrow_left.tga" | ||
19 | mouse_opaque="true" name="prev" scale_image="true" width="20" /> | ||
20 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
21 | label="" label_selected="" left_delta="180" image_overlay="arrow_right.tga" | ||
22 | mouse_opaque="true" name="next" scale_image="true" width="20" /> | ||
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | 23 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" |
18 | label="New" label_selected="New" left_delta="170" | 24 | label="New" label_selected="New" left_delta="40" |
19 | mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> | 25 | mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> |
20 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 26 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
21 | label="Save" label_selected="Save" left_delta="80" | 27 | label="Save" label_selected="Save" left_delta="70" |
22 | mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> | 28 | mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> |
23 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 29 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
24 | label="Delete" label_selected="Delete" left_delta="80" | 30 | label="Delete" label_selected="Delete" left_delta="70" |
25 | mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> | 31 | mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> |
26 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 32 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
27 | label="Day Cycle Editor" label_selected="Day Cycle Editor" | 33 | label="Day Cycle Editor" label_selected="Day Cycle Editor" |
28 | left_delta="120" mouse_opaque="true" name="WLDayCycleMenuButton" | 34 | left_delta="100" mouse_opaque="true" name="WLDayCycleMenuButton" |
29 | scale_image="true" width="120" /> | 35 | scale_image="true" width="125" /> |
30 | <tab_container bottom="-220" follows="left|top" height="160" left="0" | 36 | <tab_container bottom="-220" follows="left|top" height="160" left="0" |
31 | mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> | 37 | mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> |
32 | <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" | 38 | <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml index 485ae9f..d1f5fc8 100644 --- a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml +++ b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml | |||
@@ -19,8 +19,13 @@ | |||
19 | <on_click function="MiniMap.Center" userdata="1" /> | 19 | <on_click function="MiniMap.Center" userdata="1" /> |
20 | <on_check function="MiniMap.CheckCenter" userdata="1" /> | 20 | <on_check function="MiniMap.CheckCenter" userdata="1" /> |
21 | </menu_item_check> | 21 | </menu_item_check> |
22 | <menu_item_check bottom_delta="-18" enabled="true" height="18" label="Rotate Mini-Map" | ||
23 | left="0" mouse_opaque="true" name="Rotate Mini-Map" width="128"> | ||
24 | <on_click function="MiniMap.Rotate" userdata="" /> | ||
25 | <on_check function="MiniMap.CheckRotate" userdata="" /> | ||
26 | </menu_item_check> | ||
22 | <menu_item_separator /> | 27 | <menu_item_separator /> |
23 | <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show Map" | 28 | <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show World Map" |
24 | left="0" mouse_opaque="true" name="Show Map" width="128"> | 29 | left="0" mouse_opaque="true" name="Show Map" width="128"> |
25 | <on_click function="MiniMap.ShowWorldMap" userdata="" /> | 30 | <on_click function="MiniMap.ShowWorldMap" userdata="" /> |
26 | </menu_item_call> | 31 | </menu_item_call> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml index 34c855d..6f4331d 100644 --- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml +++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml | |||
@@ -4,10 +4,10 @@ | |||
4 | <on_click function="Object.Open" /> | 4 | <on_click function="Object.Open" /> |
5 | <on_enable function="Object.EnableOpen" /> | 5 | <on_enable function="Object.EnableOpen" /> |
6 | </menu_item_call> | 6 | </menu_item_call> |
7 | <menu_item_call enabled="false" label="Create" mouse_opaque="true" name="Create"> | 7 | <menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy..."> |
8 | <on_click function="Object.Build" /> | 8 | <on_click function="Object.Buy" /> |
9 | <on_enable function="EnableEdit" /> | 9 | <on_enable function="Object.EnableBuy" /> |
10 | </menu_item_call> | 10 | </menu_item_call> |
11 | <menu_item_call enabled="false" label="Touch" mouse_opaque="true" name="Object Touch"> | 11 | <menu_item_call enabled="false" label="Touch" mouse_opaque="true" name="Object Touch"> |
12 | <on_click function="Object.Touch" /> | 12 | <on_click function="Object.Touch" /> |
13 | <on_enable function="Object.EnableTouch" userdata="Touch" name="EnableTouch"/> | 13 | <on_enable function="Object.EnableTouch" userdata="Touch" name="EnableTouch"/> |
@@ -29,22 +29,27 @@ | |||
29 | <on_click function="Object.Delete" /> | 29 | <on_click function="Object.Delete" /> |
30 | <on_enable function="Object.EnableDelete" /> | 30 | <on_enable function="Object.EnableDelete" /> |
31 | </menu_item_call> | 31 | </menu_item_call> |
32 | <menu_item_call enabled="false" label="Wear" mouse_opaque="true" name="Wear"> | 32 | <menu_item_call enabled="false" label="Build" mouse_opaque="true" name="Create"> |
33 | <on_click function="Object.AttachToAvatar" /> | 33 | <on_click function="Object.Build" /> |
34 | <on_enable function="Object.EnableWear" /> | 34 | <on_enable function="EnableEdit" /> |
35 | </menu_item_call> | 35 | </menu_item_call> |
36 | <menu_item_call enabled="false" label="Take Copy" mouse_opaque="true" name="Take Copy"> | 36 | |
37 | <on_click function="Tools.TakeCopy" /> | 37 | <menu_item_call enabled="false" label="Take Copy" mouse_opaque="true" name="Take Copy"> |
38 | <on_enable function="Tools.EnableTakeCopy" /> | 38 | <on_click function="Tools.TakeCopy" /> |
39 | </menu_item_call> | 39 | <on_enable function="Tools.EnableTakeCopy" /> |
40 | <pie_menu label="Attach HUD >" name="Object Attach HUD" /> | 40 | </menu_item_call> |
41 | <pie_menu label="Attach >" name="Object Attach" /> | 41 | <pie_menu label="Attach HUD >" name="Object Attach HUD" /> |
42 | <menu_item_call enabled="false" label="Return..." mouse_opaque="true" name="Return..."> | 42 | <pie_menu label="Attach >" name="Object Attach" /> |
43 | <on_click function="Object.Return" /> | 43 | <menu_item_call enabled="false" label="Wear" mouse_opaque="true" name="Wear"> |
44 | <on_enable function="Object.EnableReturn" /> | 44 | <on_click function="Object.AttachToAvatar" /> |
45 | </menu_item_call> | 45 | <on_enable function="Object.EnableWear" /> |
46 | <pie_menu label="More >" name="Rate Menu"> | 46 | </menu_item_call> |
47 | <menu_item_separator /> | 47 | <pie_menu label="More >" name="Rate Menu"> |
48 | <menu_item_call label="Export" enabled="false" hidden="false" | ||
49 | mouse_opaqu="true" name="Export"> | ||
50 | <on_click function="Object.Export" /> | ||
51 | <on_enable function="Object.EnableExport" /> | ||
52 | </menu_item_call> | ||
48 | <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute"> | 53 | <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute"> |
49 | <on_click function="Object.Mute" /> | 54 | <on_click function="Object.Mute" /> |
50 | <on_enable function="Object.EnableMute" /> | 55 | <on_enable function="Object.EnableMute" /> |
@@ -54,7 +59,9 @@ | |||
54 | <on_click function="Object.ReportAbuse" /> | 59 | <on_click function="Object.ReportAbuse" /> |
55 | <on_enable function="Object.EnableReportAbuse" /> | 60 | <on_enable function="Object.EnableReportAbuse" /> |
56 | </menu_item_call> | 61 | </menu_item_call> |
57 | <menu_item_separator /> | 62 | <menu_item_call enabled="false" label="Go Here" mouse_opaque="true" name="Go Here"> |
63 | <on_click function="GoToObject" /> | ||
64 | </menu_item_call> | ||
58 | <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect"> | 65 | <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect"> |
59 | <on_click function="Object.Inspect" /> | 66 | <on_click function="Object.Inspect" /> |
60 | <on_enable function="Object.EnableInspect" /> | 67 | <on_enable function="Object.EnableInspect" /> |
@@ -68,11 +75,11 @@ | |||
68 | <on_click function="Tools.Unlink" userdata="" /> | 75 | <on_click function="Tools.Unlink" userdata="" /> |
69 | <on_enable function="Tools.EnableUnlink" /> | 76 | <on_enable function="Tools.EnableUnlink" /> |
70 | </menu_item_call> | 77 | </menu_item_call> |
71 | </pie_menu> | 78 | </pie_menu> |
72 | <menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy..."> | 79 | <menu_item_call enabled="false" label="Return..." mouse_opaque="true" name="Return..."> |
73 | <on_click function="Object.Buy" /> | 80 | <on_click function="Object.Return" /> |
74 | <on_enable function="Object.EnableBuy" /> | 81 | <on_enable function="Object.EnableReturn" /> |
75 | </menu_item_call> | 82 | </menu_item_call> |
76 | </pie_menu> | 83 | </pie_menu> |
77 | <menu_item_call enabled="false" label="Edit..." mouse_opaque="true" name="Edit..."> | 84 | <menu_item_call enabled="false" label="Edit..." mouse_opaque="true" name="Edit..."> |
78 | <on_click function="Object.Edit" /> | 85 | <on_click function="Object.Edit" /> |
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 b0aecb1..24270d9 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 | |||
@@ -32,6 +32,16 @@ | |||
32 | </menu_item_call> | 32 | </menu_item_call> |
33 | </menu> | 33 | </menu> |
34 | <menu_item_separator /> | 34 | <menu_item_separator /> |
35 | <menu_item_call name="Import" label="Import" enabled="false"> | ||
36 | <on_click function="Object.Import" /> | ||
37 | <on_enable function="Object.EnableImport" /> | ||
38 | </menu_item_call> | ||
39 | <menu_item_call name="Upload + Import" label="Upload + Import" | ||
40 | enabled="false"> | ||
41 | <on_click function="Object.ImportUpload" /> | ||
42 | <on_enable function="Object.EnableImport" /> | ||
43 | </menu_item_call> | ||
44 | <menu_item_separator /> | ||
35 | <menu_item_call name="Close Window" | 45 | <menu_item_call name="Close Window" |
36 | label="Close Window" | 46 | label="Close Window" |
37 | shortcut="control|W"> | 47 | shortcut="control|W"> |
@@ -67,6 +77,10 @@ | |||
67 | userdata="" /> | 77 | userdata="" /> |
68 | </menu_item_call> | 78 | </menu_item_call> |
69 | <menu_item_separator /> | 79 | <menu_item_separator /> |
80 | <menu_item_call name="Logout" label="Logout" | ||
81 | shortcut="control|alt|Q"> | ||
82 | <on_click function="File.Logout" userdata="" /> | ||
83 | </menu_item_call> | ||
70 | <menu_item_call name="Quit" label="Quit" | 84 | <menu_item_call name="Quit" label="Quit" |
71 | shortcut="control|Q"> | 85 | shortcut="control|Q"> |
72 | <on_click function="File.Quit" userdata="" /> | 86 | <on_click function="File.Quit" userdata="" /> |
@@ -383,6 +397,11 @@ | |||
383 | <on_click function="View.ToggleRenderType" userdata="hideparticles" /> | 397 | <on_click function="View.ToggleRenderType" userdata="hideparticles" /> |
384 | <on_check function="View.CheckRenderType" userdata="hideparticles" /> | 398 | <on_check function="View.CheckRenderType" userdata="hideparticles" /> |
385 | </menu_item_check> | 399 | </menu_item_check> |
400 | <menu_item_check name="Show HUD Attachments" label="Show HUD Attachments" | ||
401 | shortcut="alt|shift|H"> | ||
402 | <on_click function="View.ShowHUDAttachments" userdata="" /> | ||
403 | <on_check function="View.CheckHUDAttachments" /> | ||
404 | </menu_item_check> | ||
386 | <menu_item_separator /> | 405 | <menu_item_separator /> |
387 | <menu name="Zoom Level" create_jump_keys="true" | 406 | <menu name="Zoom Level" create_jump_keys="true" |
388 | label="Zoom Level" opaque="true" tear_off="true"> | 407 | label="Zoom Level" opaque="true" tear_off="true"> |
@@ -886,6 +905,25 @@ | |||
886 | userdata="QuietSnapshotsToDisk" /> | 905 | userdata="QuietSnapshotsToDisk" /> |
887 | <on_check control="QuietSnapshotsToDisk" /> | 906 | <on_check control="QuietSnapshotsToDisk" /> |
888 | </menu_item_check> | 907 | </menu_item_check> |
908 | <menu_item_call label="Ground Sit" name="Ground Sit" | ||
909 | shortcut="control|alt|s"> | ||
910 | <on_click function="Advanced.ToggleSit" userdata="" /> | ||
911 | <on_Check function="Advanced.CheckSit" userdata="" /> | ||
912 | </menu_item_call> | ||
913 | <menu_item_check label="Phantom Avatar" name="Phantom" | ||
914 | shortcut="control|alt|p"> | ||
915 | <on_click function="Advanced.TogglePhantom" userdata="" /> | ||
916 | <on_check function="Advanced.CheckPhantom" userdata="" /> | ||
917 | </menu_item_check> | ||
918 | <menu_item_check label="Animation List" name="Animation List"> | ||
919 | <on_click function="ShowFloater" userdata="animation list" /> | ||
920 | <on_check function="FloaterVisible" userdata="animation list" /> | ||
921 | </menu_item_check> | ||
922 | <menu_item_check label="Asset Browser" name="asset browser" | ||
923 | shortcut="alt|shift|a"> | ||
924 | <on_click function="Advanced.ToggleAssetBrowser" userdata="" /> | ||
925 | <on_check function="Advanced.CheckAssetBrowser" userdata="" /> | ||
926 | </menu_item_check> | ||
889 | <menu_item_check name="Show Mouselook Crosshairs" | 927 | <menu_item_check name="Show Mouselook Crosshairs" |
890 | label="Show Mouselook Crosshairs"> | 928 | label="Show Mouselook Crosshairs"> |
891 | <on_click function="ToggleControl" | 929 | <on_click function="ToggleControl" |
@@ -1069,13 +1107,6 @@ | |||
1069 | <on_check function="Advanced.CheckFeature" | 1107 | <on_check function="Advanced.CheckFeature" |
1070 | userdata="flexible" /> | 1108 | userdata="flexible" /> |
1071 | </menu_item_check> | 1109 | </menu_item_check> |
1072 | <menu_item_check name="HUD Attachments" | ||
1073 | label="HUD Attachments" | ||
1074 | shortcut=""> | ||
1075 | <on_click function="View.ShowHUDAttachments" userdata="" /> | ||
1076 | <on_check function="View.CheckHUDAttachments" /> | ||
1077 | </menu_item_check> | ||
1078 | |||
1079 | </menu> | 1110 | </menu> |
1080 | 1111 | ||
1081 | 1112 | ||
@@ -1369,6 +1400,80 @@ | |||
1369 | </menu> | 1400 | </menu> |
1370 | 1401 | ||
1371 | 1402 | ||
1403 | <!-- RLVa --> | ||
1404 | |||
1405 | <menu name="RLVa" drop_shadow="true" opaque="true" tear_off="true"> | ||
1406 | |||
1407 | <menu name="Debug" drop_shadow="true" opaque="true" tear_off="true"> | ||
1408 | |||
1409 | <menu_item_check name="Show Debug Messages" | ||
1410 | label="Show Debug Messages"> | ||
1411 | <on_click function="ToggleControl" userdata="RestrainedLifeDebug" /> | ||
1412 | <on_check control="RestrainedLifeDebug" /> | ||
1413 | </menu_item_check> | ||
1414 | |||
1415 | <menu_item_separator /> | ||
1416 | |||
1417 | <menu_item_check name="Enable Legacy Naming" | ||
1418 | label="Enable Legacy Naming"> | ||
1419 | <on_click function="ToggleControl" userdata="RLVaEnableLegacyNaming" /> | ||
1420 | <on_check control="RLVaEnableLegacyNaming" /> | ||
1421 | </menu_item_check> | ||
1422 | |||
1423 | </menu> | ||
1424 | |||
1425 | <menu_item_separator /> | ||
1426 | |||
1427 | <menu_item_check name="Enable Wear" label="Enable Wear"> | ||
1428 | <on_click function="ToggleControl" userdata="RLVaEnableWear" /> | ||
1429 | <on_check control="RLVaEnableWear" /> | ||
1430 | </menu_item_check> | ||
1431 | |||
1432 | <menu_item_separator /> | ||
1433 | |||
1434 | <menu_item_check name="Hide locked layers" label="Hide locked layers"> | ||
1435 | <on_click function="ToggleControl" userdata="RLVaHideLockedLayers" /> | ||
1436 | <on_check control="RLVaHideLockedLayers" /> | ||
1437 | </menu_item_check> | ||
1438 | |||
1439 | <menu_item_check name="Hide locked attachments" | ||
1440 | label="Hide locked attachments"> | ||
1441 | <on_click function="ToggleControl" | ||
1442 | userdata="RLVaHideLockedAttachments" /> | ||
1443 | <on_check control="RLVaHideLockedAttachments" /> | ||
1444 | </menu_item_check> | ||
1445 | |||
1446 | <!-- | ||
1447 | <menu_item_check name="Hide locked inventory" | ||
1448 | label="Hide locked inventory"> | ||
1449 | <on_click function="ToggleControl" | ||
1450 | userdata="RLVaHideLockedInventory" /> | ||
1451 | <on_check control="RLVaHideLockedInventory" /> | ||
1452 | </menu_item_check> | ||
1453 | --> | ||
1454 | |||
1455 | <menu_item_separator /> | ||
1456 | |||
1457 | <menu_item_check name="Forbid Give to #RLV" label="Forbid Give to #RLV"> | ||
1458 | <on_click function="ToggleControl" | ||
1459 | userdata="RestrainedLifeForbidGiveToRLV" /> | ||
1460 | <on_check control="RestrainedLifeForbidGiveToRLV" /> | ||
1461 | </menu_item_check> | ||
1462 | |||
1463 | <menu_item_check name="Show Name Tags" label="Show Name Tags"> | ||
1464 | <on_click function="ToggleControl" | ||
1465 | userdata="RLVaShowNameTags" /> | ||
1466 | <on_check control="RLVaShowNameTags" /> | ||
1467 | </menu_item_check> | ||
1468 | |||
1469 | <menu_item_separator /> | ||
1470 | |||
1471 | <menu_item_call name="Restrictions..." label="Restrictions..."> | ||
1472 | <on_click function="RLVa.Behaviors.Show" userdata="" /> | ||
1473 | </menu_item_call> | ||
1474 | |||
1475 | </menu> | ||
1476 | |||
1372 | 1477 | ||
1373 | <!-- UI --> | 1478 | <!-- UI --> |
1374 | 1479 | ||
@@ -1888,6 +1993,13 @@ | |||
1888 | userdata="ShowConsoleWindow" /> | 1993 | userdata="ShowConsoleWindow" /> |
1889 | <on_check control="ShowConsoleWindow" /> | 1994 | <on_check control="ShowConsoleWindow" /> |
1890 | </menu_item_check> | 1995 | </menu_item_check> |
1996 | |||
1997 | <menu_item_check name="Restrained Life Support" | ||
1998 | label="Restrained Life Support"> | ||
1999 | <on_click function="RLVa.Main.Toggle" /> | ||
2000 | <on_check function="RLVa.Main.Enabled" /> | ||
2001 | </menu_item_check> | ||
2002 | |||
1891 | <menu_item_check name="Output Debug Minidump" | 2003 | <menu_item_check name="Output Debug Minidump" |
1892 | label="Output Debug Minidump"> | 2004 | label="Output Debug Minidump"> |
1893 | <on_click function="ToggleControl" | 2005 | <on_click function="ToggleControl" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/notify.xml b/linden/indra/newview/skins/default/xui/en-us/notify.xml index 128e4bd..dd03a32 100644 --- a/linden/indra/newview/skins/default/xui/en-us/notify.xml +++ b/linden/indra/newview/skins/default/xui/en-us/notify.xml | |||
@@ -1,4 +1,1101 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <notifications> | 2 | <notifications> |
3 | <notify name="SystemMessageTip" tip="true"> | ||
4 | <message name="message"> | ||
5 | [MESSAGE] | ||
6 | </message> | ||
7 | </notify> | ||
8 | <notify name="Cancelled" tip="true"> | ||
9 | <message name="message"> | ||
10 | Cancelled | ||
11 | </message> | ||
12 | </notify> | ||
13 | <notify name="CancelledSit" tip="true"> | ||
14 | <message name="message"> | ||
15 | Cancelled Sit | ||
16 | </message> | ||
17 | </notify> | ||
18 | <notify name="CancelledAttach" tip="true"> | ||
19 | <message name="message"> | ||
20 | Cancelled Attach | ||
21 | </message> | ||
22 | </notify> | ||
23 | <notify name="ReplacedMissingWearable" tip="true"> | ||
24 | <message name="message"> | ||
25 | Replaced missing clothing/body part with default. | ||
26 | </message> | ||
27 | </notify> | ||
28 | <notify name="FriendOnline" tip="true"> | ||
29 | <message name="message"> | ||
30 | [FIRST] [LAST] is Online | ||
31 | </message> | ||
32 | </notify> | ||
33 | <notify name="FriendOffline" tip="true"> | ||
34 | <message name="message"> | ||
35 | [FIRST] [LAST] is Offline | ||
36 | </message> | ||
37 | </notify> | ||
38 | <notify name="AddSelfFriend" tip="true"> | ||
39 | <message name="message"> | ||
40 | You cannot add yourself as a friend. | ||
41 | </message> | ||
42 | </notify> | ||
43 | <notify name="UploadingAuctionSnapshot" tip="true"> | ||
44 | <message name="message"> | ||
45 | Uploading in-world and web site snapshots... | ||
46 | (Takes about 5 minutes.) | ||
47 | </message> | ||
48 | </notify> | ||
49 | <notify name="UploadPayment" tip="false"> | ||
50 | <message name="message"> | ||
51 | You paid L$[AMOUNT] to upload. | ||
52 | </message> | ||
53 | </notify> | ||
54 | <notify name="UploadingSnapshot" tip="true"> | ||
55 | <message name="message"> | ||
56 | Uploading in-world snapshot... | ||
57 | (Takes a minute or so.) | ||
58 | </message> | ||
59 | </notify> | ||
60 | <notify name="UploadWebSnapshotDone" tip="true"> | ||
61 | <message name="message"> | ||
62 | Web site snapshot upload done. | ||
63 | </message> | ||
64 | </notify> | ||
65 | <notify name="UploadSnapshotDone" tip="true"> | ||
66 | <message name="message"> | ||
67 | In-world snapshot upload done | ||
68 | </message> | ||
69 | </notify> | ||
70 | <notify name="TerrainDownloaded" tip="true"> | ||
71 | <message name="message"> | ||
72 | Terrain.raw downloaded | ||
73 | </message> | ||
74 | </notify> | ||
75 | <notify name="InMaxGroups" tip="true"> | ||
76 | <message name="message"> | ||
77 | You are already in the maximum number of groups. You will need to leave a group before you can create one. | ||
78 | </message> | ||
79 | </notify> | ||
80 | <notify name="GestureMissing" tip="true"> | ||
81 | <message name="message"> | ||
82 | Gesture [NAME] is missing from database. | ||
83 | </message> | ||
84 | </notify> | ||
85 | <notify name="UnableToLoadGesture" tip="true"> | ||
86 | <message name="message"> | ||
87 | Unable to load gesture [NAME]. | ||
88 | Please try again. | ||
89 | </message> | ||
90 | </notify> | ||
91 | <notify name="InventoryLoaded" tip="true"> | ||
92 | <message name="message"> | ||
93 | Your inventory is loaded. | ||
94 | </message> | ||
95 | </notify> | ||
96 | <notify name="LandmarkMissing" tip="true"> | ||
97 | <message name="message"> | ||
98 | Landmark is missing from database. | ||
99 | </message> | ||
100 | </notify> | ||
101 | <notify name="UnableToLoadLandmark" tip="true"> | ||
102 | <message name="message"> | ||
103 | Unable to load landmark. Please try again. | ||
104 | </message> | ||
105 | </notify> | ||
106 | <notify name="CapsKeyOn" tip="true"> | ||
107 | <message name="message"> | ||
108 | Your Caps Lock key is on. | ||
109 | As this will affect the password you type in, | ||
110 | you will probably want to turn it off. | ||
111 | </message> | ||
112 | </notify> | ||
113 | <notify name="NotecardMissing" tip="true"> | ||
114 | <message name="message"> | ||
115 | Notecard is missing from database. | ||
116 | </message> | ||
117 | </notify> | ||
118 | <notify name="NotecardNoPermissions" tip="true"> | ||
119 | <message name="message"> | ||
120 | Insufficient permissions to view notecard. | ||
121 | </message> | ||
122 | </notify> | ||
123 | <notify name="RezItemNoPermissions" tip="true"> | ||
124 | <message name="message"> | ||
125 | Insufficient permissions to rez object. | ||
126 | </message> | ||
127 | </notify> | ||
128 | <notify name="UnableToLoadNotecard" tip="true"> | ||
129 | <message name="message"> | ||
130 | Unable to load notecard. | ||
131 | Please try again. | ||
132 | </message> | ||
133 | </notify> | ||
134 | <notify name="ScriptMissing" tip="true"> | ||
135 | <message name="message"> | ||
136 | Script is missing from database. | ||
137 | </message> | ||
138 | </notify> | ||
139 | <notify name="ScriptNoPermissions" tip="true"> | ||
140 | <message name="message"> | ||
141 | Insufficient permissions to view script. | ||
142 | </message> | ||
143 | </notify> | ||
144 | <notify name="UnableToLoadScript" tip="true"> | ||
145 | <message name="message"> | ||
146 | Unable to load script. Please try again. | ||
147 | </message> | ||
148 | </notify> | ||
149 | <notify name="IncompleteInventory" tip="true"> | ||
150 | <message name="message"> | ||
151 | The complete contents you are offering are not yet | ||
152 | locally available. Please try offering those items | ||
153 | again in a minute. | ||
154 | </message> | ||
155 | </notify> | ||
156 | <notify name="CannotModifyProtectedCategories" tip="true"> | ||
157 | <message name="message"> | ||
158 | You cannot modify protected categories. | ||
159 | </message> | ||
160 | </notify> | ||
161 | <notify name="CannotRemoveProtectedCategories" tip="true"> | ||
162 | <message name="message"> | ||
163 | You cannot remove protected categories. | ||
164 | </message> | ||
165 | </notify> | ||
166 | <notify name="OfferedCard" tip="true"> | ||
167 | <message name="message"> | ||
168 | You have offered a calling card to [FIRST] [LAST] | ||
169 | </message> | ||
170 | </notify> | ||
171 | <notify name="UnableToBuyWhileDownloading" tip="true"> | ||
172 | <message name="message"> | ||
173 | Unable to buy while downloading object data. | ||
174 | Please try again. | ||
175 | </message> | ||
176 | </notify> | ||
177 | <notify name="UnableToLinkWhileDownloading" tip="true"> | ||
178 | <message name="message"> | ||
179 | Unable to link while downloading object data. | ||
180 | Please try again. | ||
181 | </message> | ||
182 | </notify> | ||
183 | <notify name="CannotBuyObjectsFromDifferentOwners" tip="true"> | ||
184 | <message name="message"> | ||
185 | Cannot buy objects from different owners at the same time. | ||
186 | Please select a single object. | ||
187 | </message> | ||
188 | </notify> | ||
189 | <notify name="ObjectNotForSale" tip="true"> | ||
190 | <message name="message"> | ||
191 | Object does not appear to be for sale. | ||
192 | </message> | ||
193 | </notify> | ||
194 | <notify name="EnteringGodMode" tip="true"> | ||
195 | <message name="message"> | ||
196 | Entering god mode, level [LEVEL] | ||
197 | </message> | ||
198 | </notify> | ||
199 | <notify name="LeavingGodMode" tip="true"> | ||
200 | <message name="message"> | ||
201 | Leaving god mode, level [LEVEL] | ||
202 | </message> | ||
203 | </notify> | ||
204 | <notify name="CopyFailed" tip="true"> | ||
205 | <message name="message"> | ||
206 | Copy failed because you lack copy permission | ||
207 | </message> | ||
208 | </notify> | ||
209 | <notify name="InventoryAccepted" tip="true"> | ||
210 | <message name="message"> | ||
211 | [NAME] accepted your inventory offer. | ||
212 | </message> | ||
213 | </notify> | ||
214 | <notify name="InventoryDeclined" tip="true"> | ||
215 | <message name="message"> | ||
216 | [NAME] declined your inventory offer. | ||
217 | </message> | ||
218 | </notify> | ||
219 | <notify name="ObjectMessage" tip="true"> | ||
220 | <message name="message"> | ||
221 | [NAME]: [MESSAGE] | ||
222 | </message> | ||
223 | </notify> | ||
224 | <notify name="CallingCardAccepted" tip="true"> | ||
225 | <message name="message"> | ||
226 | Your calling card was accepted. | ||
227 | </message> | ||
228 | </notify> | ||
229 | <notify name="CallingCardDeclined" tip="true"> | ||
230 | <message name="message"> | ||
231 | Your calling card was declined. | ||
232 | </message> | ||
233 | </notify> | ||
234 | <notify name="TeleportToLandmark" tip="true"> | ||
235 | <message name="message"> | ||
236 | Now that you have reached the mainland, you can teleport to locations like '[NAME]' by clicking on the Inventory button on the bottom right of your screen, and then select the Landmarks folder. | ||
237 | Double click on the landmark and click on Teleport to travel there. | ||
238 | </message> | ||
239 | </notify> | ||
240 | <notify name="TeleportToPerson" tip="true"> | ||
241 | <message name="message"> | ||
242 | Now that you have reached the mainland, you can contact residents like '[NAME]' by clicking on the Inventory button on the bottom right of your screen, and then select the Calling Cards folder. | ||
243 | Double click on the card, click on Instant Message, and type a message. | ||
244 | </message> | ||
245 | </notify> | ||
246 | <notify name="CantSelectLandFromMultipleRegions" tip="true"> | ||
247 | <message name="message"> | ||
248 | Can't select land across server boundaries. | ||
249 | Try selecting a smaller piece of land. | ||
250 | </message> | ||
251 | </notify> | ||
252 | <notify name="GenerticNotify" tip="false"> | ||
253 | <message name="message"> | ||
254 | [MESSAGE] | ||
255 | </message> | ||
256 | </notify> | ||
257 | <notify name="GroupVote" tip="false"> | ||
258 | <message name="message"> | ||
259 | [NAME] has proposed to vote on: | ||
260 | [MESSAGE] | ||
261 | </message> | ||
262 | <option name="VoteNow"> | ||
263 | Vote Now | ||
264 | </option> | ||
265 | <option name="Later"> | ||
266 | Later | ||
267 | </option> | ||
268 | </notify> | ||
269 | <notify name="GroupElection" tip="false"> | ||
270 | <message name="message"> | ||
271 | [NAME] has started an election: | ||
272 | [MESSAGE] | ||
273 | </message> | ||
274 | <option name="VoteNow"> | ||
275 | Vote Now | ||
276 | </option> | ||
277 | <option name="Later"> | ||
278 | Later | ||
279 | </option> | ||
280 | </notify> | ||
281 | <notify name="SystemMessage" tip="false"> | ||
282 | <message name="message"> | ||
283 | [MESSAGE] | ||
284 | </message> | ||
285 | </notify> | ||
286 | <notify name="EventNotification" tip="false"> | ||
287 | <message name="message"> | ||
288 | Event Notification: | ||
289 | |||
290 | [NAME] | ||
291 | [DATE] | ||
292 | </message> | ||
293 | <option name="Teleport"> | ||
294 | Teleport | ||
295 | </option> | ||
296 | <option name="Description"> | ||
297 | Description | ||
298 | </option> | ||
299 | <option name="Cancel"> | ||
300 | Cancel | ||
301 | </option> | ||
302 | </notify> | ||
303 | <notify name="TransferObjectsHighlighted" tip="false"> | ||
304 | <message name="message"> | ||
305 | All objects on this parcel that will transfer | ||
306 | to the purchaser of this parcel are now highlighted. | ||
307 | |||
308 | * Trees and grasses that will transfer are not highlighted. | ||
309 | </message> | ||
310 | <option name="Done"> | ||
311 | Done | ||
312 | </option> | ||
313 | </notify> | ||
314 | <notify name="DeactivatedGesturesTrigger" tip="false"> | ||
315 | <message name="message"> | ||
316 | Deactivated gestures with same trigger: | ||
317 | [NAMES] | ||
318 | </message> | ||
319 | </notify> | ||
320 | <notify name="InventoryNetworkCorruption" tip="false"> | ||
321 | <message name="message"> | ||
322 | Inventory could not be loaded because of network corruption. This indicates a bad network connection. | ||
323 | </message> | ||
324 | </notify> | ||
325 | <notify name="NoQuickTime" tip="false"> | ||
326 | <message name="message"> | ||
327 | Apple's QuickTime software does not appear to be installed on your system. | ||
328 | If you want to view streaming media on parcels that support it you should go to the QuickTime site (http://www.apple.com/quicktime) and install the QuickTime Player. | ||
329 | </message> | ||
330 | </notify> | ||
331 | <notify name="OwnedObjectsReturned" tip="false"> | ||
332 | <message name="message"> | ||
333 | The objects you own on the selected parcel of land | ||
334 | have been returned back to your inventory. | ||
335 | </message> | ||
336 | </notify> | ||
337 | <notify name="OtherObjectsReturned" tip="false"> | ||
338 | <message name="message"> | ||
339 | The objects on the selected parcel of land | ||
340 | that is owned by [FIRST] [LAST] | ||
341 | have been returned to his or her inventory. | ||
342 | </message> | ||
343 | </notify> | ||
344 | <notify name="OtherObjectsReturned2" tip="false"> | ||
345 | <message name="message"> | ||
346 | The objects on the selected parcel of land | ||
347 | owned by the resident '[NAME]' | ||
348 | have been returned to their owner. | ||
349 | </message> | ||
350 | </notify> | ||
351 | <notify name="GroupObjectsReturned" tip="false"> | ||
352 | <message name="message"> | ||
353 | The objects on the selected parcel of land shared with the group [GROUPNAME] have been returned back to their owner's inventory. | ||
354 | Transferable deeded objects have been returned to their previous owners. | ||
355 | Non-transferable objects that are deeded to the group have been deleted. | ||
356 | </message> | ||
357 | </notify> | ||
358 | <notify name="UnOwnedObjectsReturned" tip="false"> | ||
359 | <message name="message"> | ||
360 | The objects on the selected parcel that are NOT owned by you have been returned to their owners. | ||
361 | </message> | ||
362 | </notify> | ||
363 | <notify name="NotSafe" tip="false" unique="true"> | ||
364 | <message name="message"> | ||
365 | This land has damage enabled ('not safe'). | ||
366 | You can be hurt here. If you die, you will be teleported to your home location. | ||
367 | </message> | ||
368 | </notify> | ||
369 | <notify name="NoFly" tip="false" unique="true"> | ||
370 | <message name="message"> | ||
371 | This land has flying disabled ('no fly'). | ||
372 | You cannot fly here. | ||
373 | </message> | ||
374 | </notify> | ||
375 | <notify name="PushRestricted" tip="false" unique="true"> | ||
376 | <message name="message"> | ||
377 | This land is 'No Pushing'. | ||
378 | You cannot push others here unless you own the land. | ||
379 | </message> | ||
380 | </notify> | ||
381 | <notify name="NoVoice" tip="false" unique="true"> | ||
382 | <message name="message"> | ||
383 | This land has voice disabled. | ||
384 | </message> | ||
385 | </notify> | ||
386 | <notify name="NoBuild" tip="false" unique="true"> | ||
387 | <message name="message"> | ||
388 | This land has building disabled ('no build'). | ||
389 | You cannot create objects here. | ||
390 | </message> | ||
391 | </notify> | ||
392 | <notify name="ScriptsStopped" tip="false"> | ||
393 | <message name="message"> | ||
394 | An administrator has temporarily stopped scripts in this region. | ||
395 | </message> | ||
396 | </notify> | ||
397 | <notify name="ScriptsNotRunning" tip="false"> | ||
398 | <message name="message"> | ||
399 | This region is not running any scripts. | ||
400 | </message> | ||
401 | </notify> | ||
402 | <notify name="NoOutsideScripts" tip="false"> | ||
403 | <message name="message"> | ||
404 | This land has outside scripts disabled | ||
405 | ('no outside scripts'). | ||
406 | No scripts will run except those belonging to the land owner. | ||
407 | </message> | ||
408 | </notify> | ||
409 | <notify name="ApproveURL" tip="false"> | ||
410 | <message name="message"> | ||
411 | An object wants to display this web page on its surface: | ||
412 | [URL] | ||
413 | </message> | ||
414 | <option name="LoadPage"> | ||
415 | Load Page | ||
416 | </option> | ||
417 | <option name="Don'tLoad"> | ||
418 | Don't Load | ||
419 | </option> | ||
420 | </notify> | ||
421 | <notify name="ClaimPublicLand" tip="false"> | ||
422 | <message name="message"> | ||
423 | Can only claim public land in region you're in. | ||
424 | </message> | ||
425 | </notify> | ||
426 | <notify name="ObjectGiveItem" tip="false"> | ||
427 | <message name="message"> | ||
428 | An object named [OBJECTFROMNAME] owned by [FIRST] [LAST] has given you a [OBJECTTYPE] named [OBJECTNAME]. | ||
429 | </message> | ||
430 | <option name="Keep"> | ||
431 | Keep | ||
432 | </option> | ||
433 | <option name="Discard"> | ||
434 | Discard | ||
435 | </option> | ||
436 | <option name="Mute"> | ||
437 | Mute | ||
438 | </option> | ||
439 | </notify> | ||
440 | <notify name="ObjectGiveItemUnknownUser" tip="false"> | ||
441 | <message name="message"> | ||
442 | An object named [OBJECTFROMNAME] owned by (an unknown user) has given you a [OBJECTTYPE] named [OBJECTNAME]. | ||
443 | </message> | ||
444 | <option name="Keep"> | ||
445 | Keep | ||
446 | </option> | ||
447 | <option name="Discard"> | ||
448 | Discard | ||
449 | </option> | ||
450 | <option name="Mute"> | ||
451 | Mute | ||
452 | </option> | ||
453 | </notify> | ||
454 | <notify name="UserGiveItem" tip="false"> | ||
455 | <message name="message"> | ||
456 | [NAME] has given you a [OBJECTTYPE] named '[OBJECTNAME]'. | ||
457 | </message> | ||
458 | <option name="Keep"> | ||
459 | Keep | ||
460 | </option> | ||
461 | <option name="Discard"> | ||
462 | Discard | ||
463 | </option> | ||
464 | <option name="Mute"> | ||
465 | Mute | ||
466 | </option> | ||
467 | </notify> | ||
468 | <notify name="GodMessage" tip="false"> | ||
469 | <message name="message"> | ||
470 | [NAME] | ||
471 | [MESSAGE] | ||
472 | </message> | ||
473 | </notify> | ||
474 | <notify name="JoinGroup" tip="false"> | ||
475 | <message name="message"> | ||
476 | [MESSAGE] | ||
477 | </message> | ||
478 | <option name="Join"> | ||
479 | Join | ||
480 | </option> | ||
481 | <option name="Decline"> | ||
482 | Decline | ||
483 | </option> | ||
484 | <option name="Info"> | ||
485 | Info | ||
486 | </option> | ||
487 | </notify> | ||
488 | <notify name="JoinGroupOfficerNoFee" tip="false"> | ||
489 | <message name="message"> | ||
490 | [NAME] has invited you | ||
491 | to join a group as an officer. | ||
492 | There is no cost to join this group. | ||
493 | |||
494 | [MESSAGE] | ||
495 | </message> | ||
496 | <option name="Join"> | ||
497 | Join | ||
498 | </option> | ||
499 | <option name="Decline"> | ||
500 | Decline | ||
501 | </option> | ||
502 | <option name="Info"> | ||
503 | Info | ||
504 | </option> | ||
505 | </notify> | ||
506 | <notify name="JoinGroupMember" tip="false"> | ||
507 | <message name="message"> | ||
508 | [NAME] has invited you | ||
509 | to join a group as a member. | ||
510 | To join this group, you will have to pay a signup fee of L$[COST] | ||
511 | |||
512 | [MESSAGE] | ||
513 | </message> | ||
514 | <option name="Join"> | ||
515 | Join | ||
516 | </option> | ||
517 | <option name="Decline"> | ||
518 | Decline | ||
519 | </option> | ||
520 | <option name="Info"> | ||
521 | Info | ||
522 | </option> | ||
523 | </notify> | ||
524 | <notify name="JoinGroupMemberNoFee" tip="false"> | ||
525 | <message name="message"> | ||
526 | [NAME] has invited you | ||
527 | to join a group as a member. | ||
528 | There is no cost to join this group. | ||
529 | |||
530 | [MESSAGE] | ||
531 | </message> | ||
532 | <option name="Join"> | ||
533 | Join | ||
534 | </option> | ||
535 | <option name="Decline"> | ||
536 | Decline | ||
537 | </option> | ||
538 | <option name="Info"> | ||
539 | Info | ||
540 | </option> | ||
541 | </notify> | ||
542 | <notify name="OfferTeleport" tip="false"> | ||
543 | <message name="message"> | ||
544 | [NAME] has offered to teleport you | ||
545 | to his or her location: | ||
546 | |||
547 | [MESSAGE] | ||
548 | </message> | ||
549 | <option name="Teleport"> | ||
550 | Teleport | ||
551 | </option> | ||
552 | <option name="Cancel"> | ||
553 | Cancel | ||
554 | </option> | ||
555 | </notify> | ||
556 | <notify name="GotoURL" tip="false"> | ||
557 | <message name="message"> | ||
558 | [MESSAGE] | ||
559 | [URL] | ||
560 | </message> | ||
561 | <option name="Later"> | ||
562 | Later | ||
563 | </option> | ||
564 | <option name="GoNow..."> | ||
565 | Go Now... | ||
566 | </option> | ||
567 | </notify> | ||
568 | <notify name="OfferFriendship" tip="false"> | ||
569 | <message name="message"> | ||
570 | [NAME] is offering friendship. | ||
571 | |||
572 | [MESSAGE] | ||
573 | |||
574 | (By default, you will be able to see each other's online status.) | ||
575 | </message> | ||
576 | <option name="Accept"> | ||
577 | Accept | ||
578 | </option> | ||
579 | <option name="Decline"> | ||
580 | Decline | ||
581 | </option> | ||
582 | <option name="Ignore"> | ||
583 | Ignore | ||
584 | </option> | ||
585 | </notify> | ||
586 | <notify name="OfferFriendshipNoMessage" tip="false"> | ||
587 | <message name="message"> | ||
588 | [NAME] is offering friendship. | ||
589 | |||
590 | (By default, you will be able to | ||
591 | see each other's online status.) | ||
592 | </message> | ||
593 | <option name="Accept"> | ||
594 | Accept | ||
595 | </option> | ||
596 | <option name="Decline"> | ||
597 | Decline | ||
598 | </option> | ||
599 | <option name="Ignore"> | ||
600 | Ignore | ||
601 | </option> | ||
602 | </notify> | ||
603 | <notify name="FriendshipAccepted" tip="false"> | ||
604 | <message name="message"> | ||
605 | [NAME] accepted your friendship offer. | ||
606 | </message> | ||
607 | </notify> | ||
608 | <notify name="FriendshipDeclined" tip="false"> | ||
609 | <message name="message"> | ||
610 | [NAME] declined your friendship offer. | ||
611 | </message> | ||
612 | </notify> | ||
613 | <notify name="OfferCallingCard" tip="false"> | ||
614 | <message name="message"> | ||
615 | [FIRST] [LAST] is offering their calling card. | ||
616 | This will add a bookmark in your inventory | ||
617 | so you can quickly IM this resident. | ||
618 | </message> | ||
619 | <option name="Accept"> | ||
620 | Accept | ||
621 | </option> | ||
622 | <option name="Decline"> | ||
623 | Decline | ||
624 | </option> | ||
625 | <option name="Ignore"> | ||
626 | Ignore | ||
627 | </option> | ||
628 | </notify> | ||
629 | <notify name="RegionRestartMinutes" tip="false"> | ||
630 | <message name="message"> | ||
631 | Region is restarting in [MINUTES] minutes. | ||
632 | If you remain in this region you will be logged out. | ||
633 | </message> | ||
634 | </notify> | ||
635 | <notify name="RegionRestartSeconds" tip="false"> | ||
636 | <message name="message"> | ||
637 | Region is restarting in [SECONDS] seconds. | ||
638 | If you remain in this region you will be logged out. | ||
639 | </message> | ||
640 | </notify> | ||
641 | <notify name="LoadWebPage" tip="false"> | ||
642 | <message name="message"> | ||
643 | Load web page [URL]? | ||
644 | |||
645 | [MESSAGE] | ||
646 | |||
647 | From object: [OBJECTNAME], owner: [NAME]? | ||
648 | </message> | ||
649 | <option name="Gotopage"> | ||
650 | Go to page | ||
651 | </option> | ||
652 | <option name="Cancel"> | ||
653 | Cancel | ||
654 | </option> | ||
655 | </notify> | ||
656 | <notify name="FailedToLoadWearableUnnamed" tip="false"> | ||
657 | <message name="message"> | ||
658 | Oops! | ||
659 | You tried to wear a [TYPE] and it did not load. | ||
660 | |||
661 | Don't panic. | ||
662 | Try again in a minute to give things a chance to settle down. | ||
663 | </message> | ||
664 | </notify> | ||
665 | <notify name="FailedToLoadWearable" tip="false"> | ||
666 | <message name="message"> | ||
667 | Oops! | ||
668 | You tried to wear [TYPE] named [DESC] and it did not load. | ||
669 | |||
670 | Don't panic. | ||
671 | Try again in a minute to give things a chance to settle down. | ||
672 | </message> | ||
673 | </notify> | ||
674 | <notify name="FailedToFindWearableUnnamed" tip="false"> | ||
675 | <message name="message"> | ||
676 | Failed to find [TYPE] in database. | ||
677 | </message> | ||
678 | </notify> | ||
679 | <notify name="FailedToFindWearable" tip="false"> | ||
680 | <message name="message"> | ||
681 | Failed to find [TYPE] named [DESC] in database. | ||
682 | </message> | ||
683 | </notify> | ||
684 | <notify caution="true" name="ScriptTakeMoney" tip="false"> | ||
685 | <message name="message"> | ||
686 | Take Linden dollars (L$) from you | ||
687 | </message> | ||
688 | </notify> | ||
689 | <notify name="ActOnControlInputs" tip="false"> | ||
690 | <message name="message"> | ||
691 | Act on your control inputs | ||
692 | </message> | ||
693 | </notify> | ||
694 | <notify name="RemapControlInputs" tip="false"> | ||
695 | <message name="message"> | ||
696 | Remap your control inputs | ||
697 | </message> | ||
698 | </notify> | ||
699 | <notify name="AnimateYourAvatar" tip="false"> | ||
700 | <message name="message"> | ||
701 | Animate your avatar | ||
702 | </message> | ||
703 | </notify> | ||
704 | <notify name="AttachToYourAvatar" tip="false"> | ||
705 | <message name="message"> | ||
706 | Attach to your avatar | ||
707 | </message> | ||
708 | </notify> | ||
709 | <notify name="ReleaseOwnership" tip="false"> | ||
710 | <message name="message"> | ||
711 | Release ownership and become public | ||
712 | </message> | ||
713 | </notify> | ||
714 | <notify name="LinkAndDelink" tip="false"> | ||
715 | <message name="message"> | ||
716 | Link and delink from other objects | ||
717 | </message> | ||
718 | </notify> | ||
719 | <notify name="AddAndRemoveJoints" tip="false"> | ||
720 | <message name="message"> | ||
721 | Add and remove joints with other objects | ||
722 | </message> | ||
723 | </notify> | ||
724 | <notify name="ChangePermissions" tip="false"> | ||
725 | <message name="message"> | ||
726 | Change its permissions | ||
727 | </message> | ||
728 | </notify> | ||
729 | <notify name="TrackYourCamera" tip="false"> | ||
730 | <message name="message"> | ||
731 | Track your camera | ||
732 | </message> | ||
733 | </notify> | ||
734 | <notify name="ControlYourCamera" tip="false"> | ||
735 | <message name="message"> | ||
736 | Control your camera | ||
737 | </message> | ||
738 | </notify> | ||
739 | <notify name="ScriptQuestion" tip="false"> | ||
740 | <message name="message"> | ||
741 | '[OBJECTNAME]', an object owned by '[NAME]', would like to: | ||
742 | |||
743 | [QUESTIONS] | ||
744 | Is this OK? | ||
745 | </message> | ||
746 | <option name="Yes"> | ||
747 | Yes | ||
748 | </option> | ||
749 | <option name="No"> | ||
750 | No | ||
751 | </option> | ||
752 | <option name="Mute"> | ||
753 | Mute | ||
754 | </option> | ||
755 | </notify> | ||
756 | <notify name="ScriptQuestionCautionChatGranted" tip="false"> | ||
757 | <message name="message"> | ||
758 | '[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS]. | ||
759 | </message> | ||
760 | </notify> | ||
761 | <notify name="ScriptQuestionCautionChatDenied" tip="false"> | ||
762 | <message name="message"> | ||
763 | '[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS]. | ||
764 | </message> | ||
765 | </notify> | ||
766 | <notify name="ScriptQuestionCautionWarn" tip="false"> | ||
767 | <message name="message"> | ||
768 | An object wants permission to take Linden dollars (L$) from your account. | ||
769 | </message> | ||
770 | </notify> | ||
771 | <notify caution="true" name="ScriptQuestionCaution" tip="false"> | ||
772 | <message name="message"> | ||
773 | '[OBJECTNAME]', an object owned by '[NAME]', would like to: | ||
774 | |||
775 | [QUESTIONS] | ||
776 | If you do not trust this object and its creator, you should deny the request. For additional information, click the Details button. | ||
777 | |||
778 | Grant this request? | ||
779 | </message> | ||
780 | <option name="Grant"> | ||
781 | Grant | ||
782 | </option> | ||
783 | <option default="true" name="Deny"> | ||
784 | Deny | ||
785 | </option> | ||
786 | <option name="Details"> | ||
787 | Details... | ||
788 | </option> | ||
789 | </notify> | ||
790 | <notify name="ScriptDialog" tip="false"> | ||
791 | <message name="message"> | ||
792 | [FIRST] [LAST]'s '[TITLE]' | ||
793 | [MESSAGE] | ||
794 | </message> | ||
795 | <option name="Ignore"> | ||
796 | Ignore | ||
797 | </option> | ||
798 | </notify> | ||
799 | <notify name="ScriptDialogGroup" tip="false"> | ||
800 | <message name="message"> | ||
801 | [GROUPNAME]'s '[TITLE]' | ||
802 | [MESSAGE] | ||
803 | </message> | ||
804 | <option name="Ignore"> | ||
805 | Ignore | ||
806 | </option> | ||
807 | </notify> | ||
808 | <notify name="FirstBalanceIncrease" tip="false"> | ||
809 | <message name="message"> | ||
810 | You just received L$[AMOUNT]. | ||
811 | Objects and other users may give you L$. | ||
812 | Your balance is shown in the | ||
813 | upper-right corner of the screen. | ||
814 | </message> | ||
815 | </notify> | ||
816 | <notify name="FirstBalanceDecrease" tip="false"> | ||
817 | <message name="message"> | ||
818 | You just paid L$[AMOUNT]. | ||
819 | Your balance is shown in the upper-right | ||
820 | corner of the screen. | ||
821 | </message> | ||
822 | </notify> | ||
823 | <notify name="FirstSit" tip="false"> | ||
824 | <message name="message"> | ||
825 | You are sitting. | ||
826 | Use the arrow keys (or AWSD) to change the view. | ||
827 | Click the 'Stand Up' button to get up. | ||
828 | </message> | ||
829 | </notify> | ||
830 | <notify name="FirstMap" tip="false"> | ||
831 | <message name="message"> | ||
832 | Click and drag to scroll the map. | ||
833 | Double-click to teleport. | ||
834 | Use the controls on the right to find things | ||
835 | and display different backgrounds. | ||
836 | </message> | ||
837 | </notify> | ||
838 | <!-- TODO: Make sure all the notifications from Imprudence <= 1.2 are out of here before deleting this. --> | ||
839 | <notify name="FirstMiniMap" tip="false"> | ||
840 | <message name="message"> | ||
841 | Right-click the Mini-Map for more options. | ||
842 | </message> | ||
843 | </notify> | ||
844 | <notify name="FirstBuild" tip="false"> | ||
845 | <message name="message"> | ||
846 | You can build new objects in some areas of [SECOND_LIFE]. | ||
847 | Use the tools in the upper left to build, and try | ||
848 | holding down Ctrl or Alt to rapidly switch tools. | ||
849 | Press Esc to stop building. | ||
850 | </message> | ||
851 | </notify> | ||
852 | <notify name="FirstLeftClickNoHit" tip="false"> | ||
853 | <message name="message"> | ||
854 | Left-clicking interacts with special objects. | ||
855 | If the mouse pointer changes to a hand, | ||
856 | you can interact with the object. | ||
857 | Right-click always shows a menu of things you can do. | ||
858 | </message> | ||
859 | </notify> | ||
860 | <notify name="FirstTeleport" tip="false"> | ||
861 | <message name="message"> | ||
862 | This region doesn't allow point-to-point teleports, so you've been transported to the nearest telehub. | ||
863 | Your destination is marked with a tall beacon. | ||
864 | Follow the red arrow to the beacon, or click the arrow to dismiss the beacon. | ||
865 | </message> | ||
866 | </notify> | ||
867 | <notify name="FirstOverrideKeys" tip="false"> | ||
868 | <message name="message"> | ||
869 | Your movement keys are now being handled by an object. | ||
870 | Try the arrow keys or AWSD to see what they do. | ||
871 | Some objects (like guns) require you to go into mouselook to use them. | ||
872 | Press 'M' to do this. | ||
873 | </message> | ||
874 | </notify> | ||
875 | <notify name="FirstAppearance" tip="false"> | ||
876 | <message name="message"> | ||
877 | You are editing your appearance. | ||
878 | To rotate and zoom view, use the arrow keys. | ||
879 | When you are finished, press 'Save All' | ||
880 | to save your look and exit. | ||
881 | You can edit your appearance as often as you like. | ||
882 | </message> | ||
883 | </notify> | ||
884 | <notify name="FirstInventory" tip="false"> | ||
885 | <message name="message"> | ||
886 | This is your inventory, which contains objects, notecards, clothing, and other things you own. | ||
887 | * To wear an object or outfit folder, drag it onto yourself. | ||
888 | * To bring an object into the world, drag it onto the ground. | ||
889 | * To read a notecard, double-click it. | ||
890 | </message> | ||
891 | </notify> | ||
892 | <notify name="FirstSandbox" tip="false"> | ||
893 | <message name="message"> | ||
894 | This is a sandbox region. | ||
895 | Objects you build here may be deleted after | ||
896 | you leave the area, Sandboxes clean on a regular basis, please refer to the information at the top of the screen next to the region name. | ||
897 | |||
898 | Sandbox regions are uncommon, and are marked with signs. | ||
899 | </message> | ||
900 | </notify> | ||
901 | <notify name="FirstFlexible" tip="false"> | ||
902 | <message name="message"> | ||
903 | This object is flexible. | ||
904 | Flexible objects may not be physical and must be phantom | ||
905 | until the flexible checkbox is unchecked. | ||
906 | </message> | ||
907 | </notify> | ||
908 | <notify name="FirstDebugMenus" tip="false"> | ||
909 | <message name="message"> | ||
910 | You have enabled the Advanced menu. | ||
911 | This menu contains features useful for developers debugging Second Life. | ||
912 | To toggle this menu on Windows press Ctrl-Alt-D. On Mac press Cmd-Opt-Shift-D. | ||
913 | </message> | ||
914 | </notify> | ||
915 | <notify name="FirstSculptedPrim" tip="false"> | ||
916 | <message name="message"> | ||
917 | You are editing a sculpted prim. | ||
918 | Sculpted prims require a special texture to specify their shape. | ||
919 | You can find example sculpted textures in the inventory library. | ||
920 | </message> | ||
921 | </notify> | ||
922 | <notify name="FirstMedia" tip="false"> | ||
923 | <message name="message"> | ||
924 | You have begun playing media. Media can set to play automatically in the preferences window under Audio / Video. Note that this can be a security risk for media sites you do not trust. | ||
925 | </message> | ||
926 | </notify> | ||
927 | <!-- [RLVa:KB] --> | ||
928 | <notify name="FirstRLVDetach" tip="false"> | ||
929 | <message name="message"> | ||
930 | One of your attachments was made nondetachable using Restrained Life. | ||
931 | Please note that this also disables the 'Wear' option on all prim attachments in your inventory unless they are properly named. | ||
932 | |||
933 | For more information search for 'Restrained Life' on the SL wiki. | ||
934 | </message> | ||
935 | </notify> | ||
936 | <notify name="FirstRLVFartouch" tip="false"> | ||
937 | <message name="message"> | ||
938 | You have been fartouch restricted: you will be unable to touch objects farther than 1.5m from your avatar until the restriction is lifted. | ||
939 | |||
940 | Tip: if an object is out of range the mouse cursor will not change as you hover over it and you'll hear an error sound if you try to right-click it. | ||
941 | </message> | ||
942 | </notify> | ||
943 | <!-- [/RLVa:KB] --> | ||
944 | <notify name="MaxListSelectMessage" tip="true"> | ||
945 | <message name="message"> | ||
946 | You may only select up to [MAX_SELECT] items | ||
947 | from this list. | ||
948 | </message> | ||
949 | </notify> | ||
950 | <notify name="VoiceInviteP2P" tip="false" unique="true"> | ||
951 | <message name="message"> | ||
952 | [NAME] is inviting you to a Voice Chat call. | ||
953 | Click Accept to join the call or Decline to decline the invitation. Click Mute to mute this caller. | ||
954 | </message> | ||
955 | <option name="Accept"> | ||
956 | Accept | ||
957 | </option> | ||
958 | <option name="Decline"> | ||
959 | Decline | ||
960 | </option> | ||
961 | <option name="Mute"> | ||
962 | Mute | ||
963 | </option> | ||
964 | </notify> | ||
965 | <notify name="AutoUnmuteByIM" tip="false"> | ||
966 | <message name="message"> | ||
967 | [FIRST] [LAST] was sent an instant message and has been automatically unmuted. | ||
968 | </message> | ||
969 | </notify> | ||
970 | <notify name="AutoUnmuteByMoney" tip="false"> | ||
971 | <message name="message"> | ||
972 | [FIRST] [LAST] was given money and has been automatically unmuted. | ||
973 | </message> | ||
974 | </notify> | ||
975 | <notify name="AutoUnmuteByInventory" tip="false"> | ||
976 | <message name="message"> | ||
977 | [FIRST] [LAST] was offered inventory and has been automatically unmuted. | ||
978 | </message> | ||
979 | </notify> | ||
980 | <notify name="VoiceInviteGroup" tip="false" unique="true"> | ||
981 | <message name="message"> | ||
982 | [NAME] has joined a Voice Chat call with the group [GROUP]. | ||
983 | Click Accept to join the call or Decline to decline the invitation. Click Mute to mute this caller. | ||
984 | </message> | ||
985 | <option name="Accept"> | ||
986 | Accept | ||
987 | </option> | ||
988 | <option name="Decline"> | ||
989 | Decline | ||
990 | </option> | ||
991 | <option name="Mute"> | ||
992 | Mute | ||
993 | </option> | ||
994 | </notify> | ||
995 | <notify name="VoiceInviteAdHoc" tip="false" unique="true"> | ||
996 | <message name="message"> | ||
997 | [NAME] has joined a Voice Chat call with a conference chat.. | ||
998 | Click Accept to join the call or Decline to decline the invitation. Click Mute to mute this user. | ||
999 | </message> | ||
1000 | <option name="Accept"> | ||
1001 | Accept | ||
1002 | </option> | ||
1003 | <option name="Decline"> | ||
1004 | Decline | ||
1005 | </option> | ||
1006 | <option name="Mute"> | ||
1007 | Mute | ||
1008 | </option> | ||
1009 | </notify> | ||
1010 | <notify name="InviteAdHoc" tip="false" unique="true"> | ||
1011 | <message name="message"> | ||
1012 | [NAME] is inviting you to a conference chat. | ||
1013 | Click Accept to join the chat or Decline to decline the invitation. Click Mute to mute this user. | ||
1014 | </message> | ||
1015 | <option name="Accept"> | ||
1016 | Accept | ||
1017 | </option> | ||
1018 | <option name="Decline"> | ||
1019 | Decline | ||
1020 | </option> | ||
1021 | <option name="Mute"> | ||
1022 | Mute | ||
1023 | </option> | ||
1024 | </notify> | ||
1025 | <notify name="VoiceChannelFull" tip="true" unique="true"> | ||
1026 | <message name="message"> | ||
1027 | The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum capacity. Please try again later. | ||
1028 | </message> | ||
1029 | </notify> | ||
1030 | <notify name="ProximalVoiceChannelFull" tip="true" unique="true"> | ||
1031 | <message name="message"> | ||
1032 | We're sorry. This area has reached maximum capacity for voice conversations. Please try to use voice in another area. | ||
1033 | </message> | ||
1034 | </notify> | ||
1035 | <notify name="VoiceChannelDisconnected" tip="true" unique="true"> | ||
1036 | <message name="message"> | ||
1037 | You have been disconnected from [VOICE_CHANNEL_NAME]. You will now be reconnected to spatial voice chat. | ||
1038 | </message> | ||
1039 | </notify> | ||
1040 | <notify name="VoiceChannelDisconnectedP2P" tip="true" unique="true"> | ||
1041 | <message name="message"> | ||
1042 | [VOICE_CHANNEL_NAME] has ended the call. You will now be reconnected to spatial voice chat. | ||
1043 | </message> | ||
1044 | </notify> | ||
1045 | <notify name="P2PCallDeclined" tip="true" unique="true"> | ||
1046 | <message name="message"> | ||
1047 | [VOICE_CHANNEL_NAME] has declined your call. You will now be reconnected to spatial voice chat. | ||
1048 | </message> | ||
1049 | </notify> | ||
1050 | <notify name="P2PCallNoAnswer" tip="true" unique="true"> | ||
1051 | <message name="message"> | ||
1052 | [VOICE_CHANNEL_NAME] is not available to take your call. You will now be reconnected to spatial voice chat. | ||
1053 | </message> | ||
1054 | </notify> | ||
1055 | <notify name="VoiceChannelJoinFailed" tip="true" unique="true"> | ||
1056 | <message name="message"> | ||
1057 | Failed to connect to [VOICE_CHANNEL_NAME], please try again later. You will now be reconnected to spatial voice chat. | ||
1058 | </message> | ||
1059 | </notify> | ||
1060 | <notify duration="10" name="VoiceLoginRetry" tip="true" unique="true"> | ||
1061 | <message name="message"> | ||
1062 | We are creating a voice channel for you. This may take up to one minute. | ||
1063 | </message> | ||
1064 | </notify> | ||
1065 | <notify name="Cannot enter parcel: not a group member" tip="true"> | ||
1066 | <message name="message"> | ||
1067 | Cannot enter parcel, you are not a member of the appropriate group. | ||
1068 | </message> | ||
1069 | </notify> | ||
1070 | <notify name="Cannot enter parcel: banned" tip="true"> | ||
1071 | <message name="message"> | ||
1072 | Cannot enter parcel, you have been banned. | ||
1073 | </message> | ||
1074 | </notify> | ||
1075 | <notify name="Cannot enter parcel: not on access list" tip="true"> | ||
1076 | <message name="message"> | ||
1077 | Cannot enter parcel, you are not on the access list. | ||
1078 | </message> | ||
1079 | </notify> | ||
1080 | <notify name="VoiceNotAllowed" tip="true" unique="true"> | ||
1081 | <message name="message"> | ||
1082 | You do not have permission to connect to voice chat for [VOICE_CHANNEL_NAME]. | ||
1083 | </message> | ||
1084 | </notify> | ||
1085 | <notify name="VoiceCallGenericError" tip="true" unique="true"> | ||
1086 | <message name="message"> | ||
1087 | An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_NAME]. Please try again later. | ||
1088 | </message> | ||
1089 | </notify> | ||
1090 | <notify caution="true" duration="10" name="ServerVersionChanged" tip="true"> | ||
1091 | <message name="message"> | ||
1092 | The region you have entered is running a different simulator version. Click this message for details. | ||
1093 | </message> | ||
1094 | </notify> | ||
1095 | <notify caution="true" name="UnableToOpenCommandURL" tip="true"> | ||
1096 | <message name="message"> | ||
1097 | The URL you clicked cannot be opened from this web browser. | ||
1098 | </message> | ||
1099 | </notify> | ||
3 | </notifications> | 1100 | </notifications> |
4 | <!-- This file is no longer used. Please see notifications.xml and make your changes there. --> | 1101 | <!-- This file is no longer used. Please see notifications.xml and make your changes there. --> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml index a3a4b1a..921cd8e 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml | |||
@@ -1,430 +1,414 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430"> | 2 | <panel bottom="-575" height="511" left="350" name="Panel Avatar" width="430"> |
3 | <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab" | 3 | <tab_container bottom="-511" height="511" left="0" mouse_opaque="false" name="tab" |
4 | tab_min_width="50" tab_position="top" width="419"> | 4 | tab_min_width="50" tab_position="top" width="419"> |
5 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | 5 | <panel border="true" bottom="-507" follows="left|top|right|bottom" height="491" |
6 | label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418"> | 6 | label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418"> |
7 | <string name="CaptionTextAcctInfo"> | 7 | <string name="CaptionTextAcctInfo"> |
8 | [ACCTTYPE] | 8 | [ACCTTYPE] |
9 | [PAYMENTINFO] | 9 | [PAYMENTINFO] |
10 | [AGEVERIFICATION] | 10 | [AGEVERIFICATION] |
11 | </string> | 11 | </string> |
12 | <string name="AcctTypeResident"> | 12 | <string name="AcctTypeResident"> |
13 | Resident | 13 | Resident |
14 | </string> | 14 | </string> |
15 | <string name="AcctTypeTrial"> | 15 | <string name="AcctTypeTrial"> |
16 | Trial | 16 | Trial |
17 | </string> | 17 | </string> |
18 | <string name="AcctTypeCharterMember"> | 18 | <string name="AcctTypeCharterMember"> |
19 | Charter Member | 19 | Charter Member |
20 | </string> | 20 | </string> |
21 | <string name="AcctTypeEmployee"> | 21 | <string name="AcctTypeEmployee"> |
22 | Linden Lab Employee | 22 | Linden Lab Employee |
23 | </string> | 23 | </string> |
24 | <string name="PaymentInfoUsed"> | 24 | <string name="PaymentInfoUsed"> |
25 | Payment Info Used | 25 | Payment Info Used |
26 | </string> | 26 | </string> |
27 | <string name="PaymentInfoOnFile"> | 27 | <string name="PaymentInfoOnFile"> |
28 | Payment Info On File | 28 | Payment Info On File |
29 | </string> | 29 | </string> |
30 | <string name="NoPaymentInfoOnFile"> | 30 | <string name="NoPaymentInfoOnFile"> |
31 | No Payment Info On File | 31 | No Payment Info On File |
32 | </string> | 32 | </string> |
33 | <string name="AgeVerified"> | 33 | <string name="AgeVerified"> |
34 | Age-verified | 34 | Age-verified |
35 | </string> | 35 | </string> |
36 | <string name="NotAgeVerified"> | 36 | <string name="NotAgeVerified"> |
37 | Not Age-verified | 37 | Not Age-verified |
38 | </string> | 38 | </string> |
39 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 39 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
40 | bottom="-24" drop_shadow_visible="true" follows="left|top" | 40 | bottom="-23" drop_shadow_visible="true" follows="left|top" |
41 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 41 | font="SansSerifsmall" h_pad="0" halign="left" height="16" right="-12" |
42 | mouse_opaque="true" name="Name:" v_pad="0" width="70"> | 42 | mouse_opaque="true" name="online_yes" v_pad="0" width="145"> |
43 | Name: | 43 | Currently: Online |
44 | </text> | 44 | </text> |
45 | <name_editor bevel_style="in" border_style="line" | 45 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
46 | border_thickness="1" bottom="-24" enabled="false" follows="left|top" | 46 | bottom_delta="0" drop_shadow_visible="true" follows="left|top" |
47 | font="SansSerifSmall" height="16" is_unicode="false" left_delta="75" | 47 | font="SansSerifsmall" h_pad="0" halign="left" height="16" left_delta="0" |
48 | max_length="254" mouse_opaque="false" name="name" | 48 | mouse_opaque="true" name="online_no" v_pad="0" width="145"> |
49 | width="180" /> | 49 | Currently: Offline |
50 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 50 | </text> |
51 | bottom="-24" drop_shadow_visible="true" follows="left|top" | 51 | <button bottom_delta="-19" font="SansSerif" halign="center" height="20" |
52 | font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279" | 52 | label="Instant Message..." label_selected="Instant Message..." |
53 | mouse_opaque="true" name="online_yes" v_pad="0" width="121"> | 53 | right="-12" mouse_opaque="true" name="Instant Message..." |
54 | Currently Online | 54 | tool_tip="Instant Message (IM)" width="145" /> |
55 | </text> | 55 | <button bottom_delta="-23" font="SansSerif" halign="center" height="20" |
56 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 56 | label="Offer Teleport..." label_selected="Offer Teleport..." |
57 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | 57 | left_delta="0" mouse_opaque="true" name="Offer Teleport..." width="145" /> |
58 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | 58 | <button bottom_delta="-34" font="SansSerif" halign="center" height="20" |
59 | mouse_opaque="true" name="label" v_pad="0" width="121"> | 59 | label="Add to Friends..." label_selected="Add to Friends..." left_delta="0" |
60 | Born: | 60 | mouse_opaque="true" name="Add Friend..." width="145" /> |
61 | </text> | 61 | <button bottom_delta="-23" font="SansSerif" halign="center" height="20" |
62 | <line_editor bevel_style="in" border_style="line" | 62 | label="Invite to Group..." label_selected="Invite to Group..." left_delta="0" |
63 | mouse_opaque="true" name="Invite to Group..." width="145" /> | ||
64 | <button bottom_delta="-23" font="SansSerif" halign="center" height="20" label="Find on Map" | ||
65 | label_selected="Find on Map" left_delta="0" mouse_opaque="true" | ||
66 | name="Find on Map" width="145" /> | ||
67 | <button bottom_delta="-34" font="SansSerif" halign="center" height="20" label="Pay..." | ||
68 | label_selected="Pay..." left_delta="0" mouse_opaque="true" name="Pay..." | ||
69 | width="145" /> | ||
70 | <button bottom_delta="-23" font="SansSerif" halign="center" height="20" label="Mute" | ||
71 | label_selected="Mute" left_delta="0" mouse_opaque="true" name="Mute" | ||
72 | width="145" /> | ||
73 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
74 | bottom_delta="-25" drop_shadow_visible="true" follows="left|top" | ||
75 | font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-12" | ||
76 | mouse_opaque="true" name="label" v_pad="0" width="145"> | ||
77 | Born: | ||
78 | </text> | ||
79 | <line_editor bevel_style="in" border_style="line" | ||
63 | border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" | 80 | border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" |
64 | font="SansSerifSmall" height="16" is_unicode="false" left="279" | 81 | font="SansSerifSmall" height="18" is_unicode="false" right="-12" |
65 | max_length="254" mouse_opaque="false" name="born" | 82 | max_length="254" mouse_opaque="false" name="born" |
66 | width="121" /> | 83 | width="145" /> |
67 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 84 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
68 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | 85 | bottom_delta="-24" drop_shadow_visible="true" follows="left|top" |
69 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | 86 | font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-12" |
70 | mouse_opaque="true" name="label2" v_pad="0" width="121"> | 87 | mouse_opaque="true" name="label2" v_pad="0" width="145"> |
71 | Account: | 88 | Account: |
72 | </text> | 89 | </text> |
73 | <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279" | 90 | <view_border bevel_style="in" bottom_delta="-52" follows="left|top" height="52" right="-12" |
74 | mouse_opaque="false" name="acct_border" width="121" /> | 91 | mouse_opaque="false" name="acct_border" width="145" /> |
75 | <text bg_visible="false" border_drop_shadow_visible="false" | 92 | <text bg_visible="false" border_drop_shadow_visible="false" |
76 | border_visible="true" bottom_delta="0" drop_shadow_visible="true" | 93 | border_visible="true" bottom_delta="0" drop_shadow_visible="true" |
77 | follows="left|top" font="SansSerifSmall" height="48" left="279" | 94 | follows="left|top" font="SansSerifSmall" height="48" left="264" |
78 | mouse_opaque="false" name="acct" width="121" /> | 95 | mouse_opaque="false" name="acct" width="121" /> |
79 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 96 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
80 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | 97 | bottom_delta="-25" drop_shadow_visible="true" follows="left|top" |
81 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | 98 | font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-12" |
82 | mouse_opaque="true" name="partner_label" | 99 | mouse_opaque="true" name="partner_label" |
83 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" | 100 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" |
84 | v_pad="0" width="130"> | 101 | v_pad="0" width="145"> |
85 | Partner: | 102 | Partner: |
86 | </text> | 103 | </text> |
87 | <button bottom_delta="2" follows="left|top" font="SansSerif" halign="center" | 104 | <button bottom_delta="1" follows="left|top" font="SansSerif" halign="center" |
88 | height="18" label="i" label_selected="i" left_delta="44" | 105 | height="18" label="i" label_selected="i" left_delta="44" |
89 | mouse_opaque="true" name="partner_info" | 106 | mouse_opaque="true" name="partner_info" |
90 | tool_tip="Click to open partner's profile" width="18" /> | 107 | tool_tip="Click to open partner's profile" width="20" /> |
91 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" | 108 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" |
92 | height="18" label="?" label_selected="?" left_delta="24" | 109 | height="18" label="?" label_selected="?" left_delta="24" |
93 | mouse_opaque="true" name="partner_help" width="18" /> | 110 | mouse_opaque="true" name="partner_help" width="20" /> |
94 | <line_editor bevel_style="in" border_style="line" | 111 | <line_editor bevel_style="in" border_style="line" |
95 | border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" | 112 | border_thickness="1" bottom_delta="-19" enabled="true" follows="left|top" |
96 | font="SansSerifSmall" height="16" is_unicode="false" left="279" | 113 | font="SansSerifSmall" height="18" is_unicode="false" right="-12" |
97 | max_length="254" mouse_opaque="false" name="partner_edit" | 114 | max_length="254" mouse_opaque="false" name="partner_edit" |
98 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" | 115 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" |
99 | width="121"> | 116 | width="145"> |
100 | [FIRST] [LAST] | 117 | [FIRST] [LAST] |
101 | </line_editor> | 118 | </line_editor> |
102 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 119 | <name_editor bevel_style="in" border_style="line" |
103 | bottom="-44" drop_shadow_visible="true" follows="left|top" | 120 | border_thickness="1" bottom="-23" enabled="false" follows="left|top" |
104 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 121 | font="SansSerifSmall" height="16" is_unicode="false" left="12" |
105 | mouse_opaque="true" name="Photo:" v_pad="0" width="70"> | 122 | max_length="254" mouse_opaque="false" name="name" |
106 | Photo: | 123 | width="235" /> |
107 | </text> | 124 | <texture_picker allow_no_texture="true" bottom="271" can_apply_immediately="false" |
108 | <texture_picker allow_no_texture="true" bottom="-179" can_apply_immediately="false" | 125 | default_image_name="None" follows="left|top" height="192" label="" |
109 | default_image_name="None" follows="left|top" height="151" label="" | 126 | left="12" mouse_opaque="true" name="img" scale_image="false" auto-resize="false" |
110 | left="79" mouse_opaque="true" name="img" | 127 | tool_tip="Click to choose a picture" width="235" /> |
111 | tool_tip="Click to choose a picture" width="180" /> | 128 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
112 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 129 | bottom_delta="-6" drop_shadow_visible="true" follows="left|top" |
113 | bottom="-183" drop_shadow_visible="true" follows="left|top" | 130 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0" |
114 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 131 | mouse_opaque="true" name="About:" v_pad="0" width="170"> |
115 | mouse_opaque="true" name="Groups:" v_pad="0" width="70"> | 132 | About (500 chars): |
116 | Groups: | 133 | </text> |
117 | </text> | 134 | <text_editor bottom_delta="-137" embedded_items="false" |
118 | <scroll_list background_visible="true" bottom="-258" column_padding="5" draw_border="true" | 135 | enabled="true" follows="left|top" font="SansSerifSmall" height="137" |
119 | follows="left|top" height="90" left="79" mouse_opaque="false" | 136 | is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true" |
120 | multi_select="false" name="groups" width="321" /> | 137 | name="about" width="235" word_wrap="true" /> |
121 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 138 | |
122 | bottom="-280" drop_shadow_visible="true" follows="left|top" | 139 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
123 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 140 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" |
124 | mouse_opaque="true" name="About:" v_pad="0" width="70"> | 141 | font="SansSerifSmall" halign="left" height="16" left="12" |
125 | About: | 142 | mouse_opaque="true" name="Groups:" width="70"> |
126 | </text> | 143 | Groups: |
127 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 144 | </text> |
128 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | 145 | <scroll_list background_visible="true" bottom_delta="-80" column_padding="5" draw_border="true" |
129 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | 146 | follows="left|top" height="80" left_delta="0" mouse_opaque="false" |
130 | mouse_opaque="true" name="(500 chars)" v_pad="0" width="70"> | 147 | multi_select="false" name="groups" width="235" /> |
131 | (500 chars) | 148 | <view_border blevel_style="in" bottom_delta="0" follows="left|top" height="80" right="-12" |
132 | </text> | 149 | mouse_opaque="false" name="drop_target_rect_vis" width="145" /> |
133 | <text_editor bottom="-375" embedded_items="false" | 150 | <view_border blevel_style="in" border_thickness="0" bottom_delta="0" follows="left|top" |
134 | enabled="true" follows="left|top" font="SansSerifSmall" height="110" | 151 | height="80" left_delta="0" mouse_opaque="false" name="drop_target_rect" |
135 | is_unicode="false" left="79" max_length="511" mouse_opaque="true" | 152 | width="145" /> |
136 | name="about" width="321" word_wrap="true" /> | 153 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
137 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 154 | bottom_delta="40" drop_shadow_visible="true" follows="left|top" |
138 | bottom="-403" drop_shadow_visible="true" follows="left|top" | 155 | font="SansSerifSmall" h_pad="0" halign="center" height="16" right="-28" |
139 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | 156 | mouse_opaque="true" name="drop target" |
140 | mouse_opaque="true" name="Give item:" v_pad="0" width="75"> | 157 | tool_tip="Drop inventory items here to give them to this resident." v_pad="2" |
141 | Give item: | 158 | width="115"> |
142 | </text> | 159 | Drop inventory here |
143 | <view_border blevel_style="in" border_thickness="0" bottom="-466" follows="left|top" | 160 | </text> |
144 | height="466" left_delta="4" mouse_opaque="false" name="drop_target_rect" | 161 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
145 | width="409" /> | 162 | bottom_delta="-18" drop_shadow_visible="true" follows="left|top" |
146 | <view_border blevel_style="in" bottom="-403" follows="left|top" height="16" left_delta="75" | ||
147 | mouse_opaque="false" name="drop_target_rect_vis" width="321" /> | ||
148 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
149 | bottom_delta="0" drop_shadow_visible="true" follows="left|top" | ||
150 | font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0" | 163 | font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0" |
151 | mouse_opaque="true" name="Give inventory" | 164 | mouse_opaque="true" name="Give inventory 2" width="115" |
152 | tool_tip="Drop inventory items here to give them to this person." v_pad="2" | 165 | tool_tip="Drop inventory items here to give them to this resident."> |
153 | width="321"> | 166 | to give to resident |
154 | Drop inventory item here. | 167 | </text> |
155 | </text> | 168 | <check_box bottom="1" follows="left|top" font="SansSerifSmall" height="16" |
156 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 169 | initial_value="false" label="Show profile in search" left="18" mouse_opaque="true" |
157 | initial_value="false" label="Show in search" left="75" mouse_opaque="true" | ||
158 | name="allow_publish" | 170 | name="allow_publish" |
159 | tool_tip="Publish extra profile information such as description and image in Search." | 171 | tool_tip="Publish extra profile information such as description and image in Search." |
160 | width="130" /> | 172 | width="145" /> |
161 | <button bottom="-425" follows="left|top" font="SansSerif" halign="center" height="20" | 173 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" height="18" |
162 | label="?" label_selected="?" left_delta="145" mouse_opaque="true" name="?" | 174 | label="?" label_selected="?" left_delta="150" mouse_opaque="true" name="?" |
163 | width="20" /> | 175 | width="20" /> |
164 | <button bottom="-428" font="SansSerif" halign="center" height="20" label="Find on Map" | 176 | </panel> |
165 | label_selected="Find on Map" left="24" mouse_opaque="true" | 177 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
166 | name="Find on Map" width="100" /> | 178 | label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418"> |
167 | <button bottom="-428" font="SansSerif" halign="center" height="20" | 179 | <line_editor bevel_style="in" border_style="line" |
168 | label="Offer Teleport..." label_selected="Offer Teleport..." | ||
169 | left_delta="102" mouse_opaque="true" name="Offer Teleport..." width="140" /> | ||
170 | <button bottom="-428" font="SansSerif" halign="center" height="20" | ||
171 | label="Add Friend..." label_selected="Add Friend..." left_delta="142" | ||
172 | mouse_opaque="true" name="Add Friend..." width="130" /> | ||
173 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Pay..." | ||
174 | label_selected="Pay..." left="24" mouse_opaque="true" name="Pay..." | ||
175 | width="100" /> | ||
176 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" | ||
177 | label="Instant Message..." label_selected="Instant Message..." | ||
178 | left_delta="102" mouse_opaque="true" name="Instant Message..." | ||
179 | tool_tip="Instant Message (IM)" width="140" /> | ||
180 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Mute" | ||
181 | label_selected="Mute" left_delta="142" mouse_opaque="true" name="Mute" | ||
182 | width="130" /> | ||
183 | </panel> | ||
184 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
185 | label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418"> | ||
186 | <line_editor bevel_style="in" border_style="line" | ||
187 | border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top" | 180 | border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top" |
188 | font="SansSerifSmall" height="16" is_unicode="false" left="10" | 181 | font="SansSerifSmall" height="16" is_unicode="false" left="10" |
189 | max_length="254" mouse_opaque="true" name="url_edit" | 182 | max_length="254" mouse_opaque="true" name="url_edit" |
190 | width="400" /> | 183 | width="400" /> |
191 | <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center" | 184 | <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center" |
192 | height="18" label="Load" label_selected="Load" left="10" | 185 | height="18" label="Load" label_selected="Load" left="10" |
193 | mouse_opaque="true" name="load" enabled="false" | 186 | mouse_opaque="true" name="load" enabled="false" |
194 | tool_tip="Load this profile page with embedded web browser." width="80" > | 187 | tool_tip="Load this profile page with embedded web browser." width="80" > |
195 | <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item> | 188 | <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item> |
196 | <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item> | 189 | <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item> |
197 | </flyout_button> | 190 | </flyout_button> |
198 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" | 191 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" |
199 | height="18" label="?" label_selected="?" left_delta="85" | 192 | height="18" label="?" label_selected="?" left_delta="85" |
200 | mouse_opaque="true" name="web_profile_help" width="18" /> | 193 | mouse_opaque="true" name="web_profile_help" width="18" /> |
201 | <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16" | 194 | <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16" |
202 | initial_value="false" label="Automatically load web profiles" | 195 | initial_value="false" label="Automatically load web profiles" |
203 | left_delta="30" mouse_opaque="true" name="auto_load" | 196 | left_delta="30" mouse_opaque="true" name="auto_load" |
204 | tool_tip="Automatically load ALL profile webpages without asking first." | 197 | tool_tip="Automatically load ALL profile webpages without asking first." |
205 | width="127" /> | 198 | width="127" /> |
206 | <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400" | 199 | <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400" |
207 | ignore_ui_scale="false" left="10" name="profile_html" start_url="" | 200 | ignore_ui_scale="false" left="10" name="profile_html" start_url="" |
208 | width="400" /> | 201 | width="400" /> |
209 | <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70" | 202 | <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70" |
210 | top="25" /> | 203 | top="25" /> |
211 | </panel> | 204 | </panel> |
212 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | 205 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
213 | label="Interests" left="1" mouse_opaque="true" name="Interests" width="418"> | 206 | label="Interests" left="1" mouse_opaque="true" name="Interests" width="418"> |
214 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 207 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
215 | bottom="-36" drop_shadow_visible="true" follows="left|top" | 208 | bottom="-36" drop_shadow_visible="true" follows="left|top" |
216 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 209 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12" |
217 | mouse_opaque="true" name="I Want To:" v_pad="0" width="70"> | 210 | mouse_opaque="true" name="I Want To:" v_pad="0" width="70"> |
218 | I Want To: | 211 | I Want To: |
219 | </text> | 212 | </text> |
220 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 213 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
221 | initial_value="false" label="Build" left_delta="70" mouse_opaque="true" | 214 | initial_value="false" label="Build" left_delta="70" mouse_opaque="true" |
222 | name="chk0" width="90" /> | 215 | name="chk0" width="90" /> |
223 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 216 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
224 | initial_value="false" label="Explore" left_delta="170" mouse_opaque="true" | 217 | initial_value="false" label="Explore" left_delta="170" mouse_opaque="true" |
225 | name="chk1" width="90" /> | 218 | name="chk1" width="90" /> |
226 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 219 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" |
227 | initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true" | 220 | initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true" |
228 | name="chk2" width="57" /> | 221 | name="chk2" width="57" /> |
229 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 222 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
230 | initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true" | 223 | initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true" |
231 | name="chk6" width="92" /> | 224 | name="chk6" width="92" /> |
232 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 225 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" |
233 | initial_value="false" label="Group" left_delta="-170" mouse_opaque="true" | 226 | initial_value="false" label="Group" left_delta="-170" mouse_opaque="true" |
234 | name="chk3" width="90" /> | 227 | name="chk3" width="90" /> |
235 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 228 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
236 | initial_value="false" label="Buy" left_delta="170" mouse_opaque="true" | 229 | initial_value="false" label="Buy" left_delta="170" mouse_opaque="true" |
237 | name="chk4" width="90" /> | 230 | name="chk4" width="90" /> |
238 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 231 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" |
239 | initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true" | 232 | initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true" |
240 | name="chk5" width="50" /> | 233 | name="chk5" width="50" /> |
241 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 234 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
242 | initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" | 235 | initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" |
243 | name="chk7" width="92" /> | 236 | name="chk7" width="92" /> |
244 | <line_editor bevel_style="in" border_style="line" | 237 | <line_editor bevel_style="in" border_style="line" |
245 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" | 238 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" |
246 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | 239 | font="SansSerifSmall" height="16" is_unicode="false" left="74" |
247 | max_length="254" mouse_opaque="true" name="want_to_edit" | 240 | max_length="254" mouse_opaque="true" name="want_to_edit" |
248 | width="330" /> | 241 | width="330" /> |
249 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 242 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
250 | bottom_delta="-26" drop_shadow_visible="true" follows="left|top" | 243 | bottom_delta="-26" drop_shadow_visible="true" follows="left|top" |
251 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 244 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12" |
252 | mouse_opaque="true" name="Skills:" v_pad="0" width="70"> | 245 | mouse_opaque="true" name="Skills:" v_pad="0" width="70"> |
253 | Skills: | 246 | Skills: |
254 | </text> | 247 | </text> |
255 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 248 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
256 | initial_value="false" label="Textures" left_delta="70" mouse_opaque="true" | 249 | initial_value="false" label="Textures" left_delta="70" mouse_opaque="true" |
257 | name="schk0" width="90" /> | 250 | name="schk0" width="90" /> |
258 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 251 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
259 | initial_value="false" label="Architecture" left_delta="170" | 252 | initial_value="false" label="Architecture" left_delta="170" |
260 | mouse_opaque="true" name="schk1" width="93" /> | 253 | mouse_opaque="true" name="schk1" width="93" /> |
261 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 254 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" |
262 | initial_value="false" label="Event Planning" left_delta="0" | 255 | initial_value="false" label="Event Planning" left_delta="0" |
263 | mouse_opaque="true" name="schk2" width="105" /> | 256 | mouse_opaque="true" name="schk2" width="105" /> |
264 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 257 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
265 | initial_value="false" label="Modeling" left_delta="-170" | 258 | initial_value="false" label="Modeling" left_delta="-170" |
266 | mouse_opaque="true" name="schk3" width="90" /> | 259 | mouse_opaque="true" name="schk3" width="90" /> |
267 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | 260 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" |
268 | initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true" | 261 | initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true" |
269 | name="schk4" width="90" /> | 262 | name="schk4" width="90" /> |
270 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | 263 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" |
271 | initial_value="false" label="Custom Characters" left_delta="170" | 264 | initial_value="false" label="Custom Characters" left_delta="170" |
272 | mouse_opaque="true" name="schk5" width="127" /> | 265 | mouse_opaque="true" name="schk5" width="127" /> |
273 | <line_editor bevel_style="in" border_style="line" | 266 | <line_editor bevel_style="in" border_style="line" |
274 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" | 267 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" |
275 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | 268 | font="SansSerifSmall" height="16" is_unicode="false" left="74" |
276 | max_length="254" mouse_opaque="true" name="skills_edit" | 269 | max_length="254" mouse_opaque="true" name="skills_edit" |
277 | width="330" /> | 270 | width="330" /> |
278 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 271 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
279 | bottom_delta="-30" drop_shadow_visible="true" follows="left|top" | 272 | bottom_delta="-30" drop_shadow_visible="true" follows="left|top" |
280 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 273 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12" |
281 | mouse_opaque="true" name="Languages:" v_pad="0" width="70"> | 274 | mouse_opaque="true" name="Languages:" v_pad="0" width="70"> |
282 | Languages: | 275 | Languages: |
283 | </text> | 276 | </text> |
284 | <line_editor bevel_style="in" border_style="line" | 277 | <line_editor bevel_style="in" border_style="line" |
285 | border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" | 278 | border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" |
286 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | 279 | font="SansSerifSmall" height="16" is_unicode="false" left="74" |
287 | max_length="254" mouse_opaque="true" name="languages_edit" | 280 | max_length="254" mouse_opaque="true" name="languages_edit" |
288 | width="330" /> | 281 | width="330" /> |
289 | </panel> | 282 | </panel> |
290 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | 283 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
291 | label="Picks" left="1" mouse_opaque="true" name="Picks" width="418"> | 284 | label="Picks" left="1" mouse_opaque="true" name="Picks" width="418"> |
292 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 285 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
293 | bottom="-20" drop_shadow_visible="true" follows="left|top" | 286 | bottom="-20" drop_shadow_visible="true" follows="left|top" |
294 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" | 287 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" |
295 | mouse_opaque="true" | 288 | mouse_opaque="true" |
296 | name="Tell everyone about your favorite places in Second Life." v_pad="0" | 289 | name="Tell everyone about your favorite places in Second Life." v_pad="0" |
297 | width="302"> | 290 | width="302"> |
298 | Tell everyone about your favorite places in Second Life. | 291 | Tell everyone about your favorite places in Second Life. |
299 | </text> | 292 | </text> |
300 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | 293 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" |
301 | height="20" label="New..." label_selected="New..." left="114" | 294 | height="20" label="New..." label_selected="New..." left="114" |
302 | mouse_opaque="true" name="New..." width="75" /> | 295 | mouse_opaque="true" name="New..." width="75" /> |
303 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" | 296 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" |
304 | label="Delete..." label_selected="Delete..." left_delta="79" | 297 | label="Delete..." label_selected="Delete..." left_delta="79" |
305 | mouse_opaque="true" name="Delete..." width="75" /> | 298 | mouse_opaque="true" name="Delete..." width="75" /> |
306 | <tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false" | 299 | <tab_container bottom="-411" follows="left|top" height="363" left="12" mouse_opaque="false" |
307 | name="picks tab" tab_position="left" width="412" /> | 300 | name="picks tab" tab_position="left" width="412" /> |
308 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 301 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
309 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" | 302 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" |
310 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" | 303 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" |
311 | name="loading_text" v_pad="0" width="302"> | 304 | name="loading_text" v_pad="0" width="302"> |
312 | Loading... | 305 | Loading... |
313 | </text> | 306 | </text> |
314 | </panel> | 307 | </panel> |
315 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | 308 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
316 | label="Classified" left="1" mouse_opaque="true" name="Classified" | 309 | label="Classified" left="1" mouse_opaque="true" name="Classified" |
317 | width="418"> | 310 | width="418"> |
318 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 311 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
319 | bottom="-20" drop_shadow_visible="true" follows="left|top" | 312 | bottom="-20" drop_shadow_visible="true" follows="left|top" |
320 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" | 313 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" |
321 | mouse_opaque="true" | 314 | mouse_opaque="true" |
322 | name="Place an ad in Second Life's classified listings." v_pad="0" | 315 | name="Place an ad in Second Life's classified listings." v_pad="0" |
323 | width="302"> | 316 | width="302"> |
324 | Place an ad in Second Life's classified listings. | 317 | Place an ad in Second Life's classified listings. |
325 | </text> | 318 | </text> |
326 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | 319 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" |
327 | height="20" label="New..." label_selected="New..." left="114" | 320 | height="20" label="New..." label_selected="New..." left="114" |
328 | mouse_opaque="true" name="New..." width="75" /> | 321 | mouse_opaque="true" name="New..." width="75" /> |
329 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" | 322 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" |
330 | label="Delete..." label_selected="Delete..." left_delta="79" | 323 | label="Delete..." label_selected="Delete..." left_delta="79" |
331 | mouse_opaque="true" name="Delete..." width="75" /> | 324 | mouse_opaque="true" name="Delete..." width="75" /> |
332 | <tab_container bottom="-443" follows="left|top" height="395" left="4" mouse_opaque="false" | 325 | <tab_container bottom="-443" follows="left|top" height="395" left="12" mouse_opaque="false" |
333 | name="classified tab" tab_position="left" width="412" /> | 326 | name="classified tab" tab_position="left" width="412" /> |
334 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 327 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
335 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" | 328 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" |
336 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" | 329 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" |
337 | name="loading_text" v_pad="0" width="302"> | 330 | name="loading_text" v_pad="0" width="302"> |
338 | Loading... | 331 | Loading... |
339 | </text> | 332 | </text> |
340 | </panel> | 333 | </panel> |
341 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | 334 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
342 | label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418"> | 335 | label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418"> |
343 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 336 | <texture_picker allow_no_texture="true" bottom="220" can_apply_immediately="false" |
344 | bottom="-36" drop_shadow_visible="true" follows="left|top" | 337 | default_image_name="None" follows="left|top" height="235" label="" |
345 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 338 | left="12" mouse_opaque="true" name="img" |
346 | mouse_opaque="true" name="Photo:" v_pad="0" width="61"> | 339 | tool_tip="Click to choose a picture" width="235" /> |
347 | Photo: | 340 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
348 | </text> | 341 | bottom_delta="-8" drop_shadow_visible="true" follows="left|top" |
349 | <texture_picker allow_no_texture="true" bottom="-171" can_apply_immediately="false" | 342 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12" |
350 | default_image_name="None" follows="left|top" height="151" label="" | 343 | mouse_opaque="true" name="Info:" v_pad="0" width="161"> |
351 | left="70" mouse_opaque="true" name="img" | 344 | Info (250 chars): |
352 | tool_tip="Click to choose a picture" width="135" /> | 345 | </text> |
353 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 346 | <text_editor bottom_delta="-179" embedded_items="false" |
354 | bottom="-203" drop_shadow_visible="true" follows="left|top" | 347 | enabled="true" follows="left|top" font="SansSerifSmall" height="178" |
355 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | 348 | is_unicode="false" left="12" max_length="254" mouse_opaque="false" |
356 | mouse_opaque="true" name="Info:" v_pad="0" width="61"> | 349 | name="about" width="378" word_wrap="true" /> |
357 | Info: | 350 | </panel> |
358 | </text> | 351 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" |
359 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
360 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | ||
361 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | ||
362 | mouse_opaque="true" name="(250 chars)" v_pad="0" width="65"> | ||
363 | (250 chars) | ||
364 | </text> | ||
365 | <text_editor bottom="-347" embedded_items="false" | ||
366 | enabled="true" follows="left|top" font="SansSerifSmall" height="160" | ||
367 | is_unicode="false" left="70" max_length="254" mouse_opaque="false" | ||
368 | name="about" width="330" word_wrap="true" /> | ||
369 | </panel> | ||
370 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
371 | label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> | 352 | label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> |
372 | <string name="Loading"> | 353 | <string name="Loading"> |
373 | Loading... | 354 | Loading... |
374 | </string> | 355 | </string> |
375 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 356 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
376 | bottom="-52" drop_shadow_visible="true" follows="left|top" | 357 | bottom="-52" drop_shadow_visible="true" follows="left|top" |
377 | font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10" | 358 | font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10" |
378 | mouse_opaque="true" name="label" v_pad="0" width="412"> | 359 | mouse_opaque="true" name="label" v_pad="0" width="412"> |
379 | Use this space to record your notes about this person. Keep track | 360 | Use this space to record your notes about this person. Keep track |
380 | of trades in progress, joint projects, etc. Only you can see these | 361 | of trades in progress, joint projects, etc. Only you can see these |
381 | notes. This person cannot see them, nor can other people. | 362 | notes. This person cannot see them, nor can other people. |
382 | </text> | 363 | </text> |
383 | <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top" | 364 | <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top" |
384 | font="SansSerif" height="256" is_unicode="false" left="10" | 365 | font="SansSerif" height="256" is_unicode="false" left="10" |
385 | max_length="1023" mouse_opaque="true" name="notes edit" width="400" | 366 | max_length="1023" mouse_opaque="true" name="notes edit" width="400" |
386 | word_wrap="false" /> | 367 | word_wrap="false" /> |
387 | </panel> | 368 | </panel> |
388 | </tab_container> | 369 | </tab_container> |
389 | <button bottom="-483" font="SansSerif" halign="center" height="20" label="OK" | 370 | <button bottom="-508" font="SansSerif" halign="center" height="20" label="OK" |
390 | label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" /> | 371 | label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" /> |
391 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel" | 372 | <button bottom="-508" font="SansSerif" halign="center" height="20" label="Cancel" |
392 | label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel" | 373 | label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel" |
393 | width="100" /> | 374 | width="100" /> |
394 | <button bottom_delta="132" font="SansSerif" halign="center" height="20" label="Kick" | 375 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Kick" |
395 | label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" /> | 376 | label_selected="Kick" left="12" mouse_opaque="true" name="Kick" width="72" /> |
396 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze" | 377 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Freeze" |
397 | label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze" | 378 | label_selected="Freeze" left_delta="76" mouse_opaque="true" name="Freeze" |
398 | tool_tip="Stop this resident's movement and chat." width="72" /> | 379 | tool_tip="Stop this resident's movement and chat." width="72" /> |
399 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" | 380 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" |
400 | label="Unfreeze" label_selected="Unfreeze" left="4" mouse_opaque="true" | 381 | label="Unfreeze" label_selected="Unfreeze" left_delta="76" mouse_opaque="true" |
401 | name="Unfreeze" tool_tip="Thaw resident" width="72" /> | 382 | name="Unfreeze" tool_tip="Thaw resident" width="72" /> |
402 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="CSR" | 383 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="CSR" |
403 | label_selected="CSR" left="4" mouse_opaque="true" name="csr_btn" | 384 | label_selected="CSR" left_delta="76" mouse_opaque="true" name="csr_btn" |
404 | tool_tip="Open customer service tool for this resident" width="72" /> | 385 | tool_tip="Open customer service tool for this resident" width="72" /> |
405 | <string name="ShowOnMapNonFriend"> | 386 | <string name="ShowOnMapNonFriend"> |
406 | Show location on the map. | 387 | Show location on the map. |
407 | Disabled because you have not | 388 | Disabled because you have not |
408 | formed a friendship with them. | 389 | formed a friendship with them. |
409 | </string> | 390 | </string> |
410 | <string name="ShowOnMapFriendOffline"> | 391 | <string name="ShowOnMapFriendOffline"> |
411 | Show location on the map. | 392 | Show location on the map. |
412 | Disabled because they are not online. | 393 | Disabled because they are not online. |
413 | </string> | 394 | </string> |
414 | <string name="ShowOnMapFriendOnline"> | 395 | <string name="ShowOnMapFriendOnline"> |
415 | Show location on the map. | 396 | Show location on the map. |
416 | </string> | 397 | </string> |
417 | <string name="TeleportGod"> | 398 | <string name="TeleportGod"> |
418 | Force a teleport to your location. | 399 | Force a teleport to your location. |
419 | </string> | 400 | </string> |
420 | <string name="TeleportPrelude"> | 401 | <string name="TeleportPrelude"> |
421 | Offer a teleport to your location. | 402 | Offer a teleport to your location. |
422 | Disabled until you leave Orientation Island. | 403 | Disabled until you leave Orientation Island. |
423 | </string> | 404 | </string> |
424 | <string name="TeleportNormal"> | 405 | <string name="TeleportNormal"> |
425 | Offer a teleport to your location. | 406 | Offer a teleport to your location. |
426 | </string> | 407 | </string> |
427 | <string name="Loading"> | 408 | <string name="Loading"> |
428 | Loading... | 409 | Loading... |
429 | </string> | 410 | </string> |
411 | <string name="HiddenLabel"> | ||
412 | (hidden) | ||
413 | </string> | ||
430 | </panel> | 414 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml index 464ecac..ac3a74a 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml | |||
@@ -8,13 +8,17 @@ | |||
8 | <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="20" | 8 | <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="20" |
9 | label="Local Chat" left="7" name="History" | 9 | label="Local Chat" left="7" name="History" |
10 | tool_tip="Click here to see what has been said" width="93" /> | 10 | tool_tip="Click here to see what has been said" width="93" /> |
11 | <spinner bottom="-24" decimal_digits="0" follows="left|bottom" height="20" | ||
12 | increment="1.00" initial_val="0" label="Channel" label_width="50" left="107" | ||
13 | max_val="2147483647" min_val="0" mouse_opaque="true" name="channel_control" | ||
14 | width="100" tool_tip="Set the default channel for inworld chat"/> | ||
11 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23" | 15 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23" |
12 | follows="left|right|bottom" font="SansSerif" | 16 | follows="left|right|bottom" font="SansSerif" |
13 | handle_edit_keys_directly="false" height="20" label="Click here to chat." | 17 | handle_edit_keys_directly="false" height="20" label="Click here to chat." |
14 | left="107" max_length="254" name="Chat Editor" | 18 | left="212" max_length="254" name="Chat Editor" |
15 | select_all_on_focus_received="false" select_on_focus="false" tab_group="1" | 19 | select_all_on_focus_received="false" select_on_focus="false" tab_group="1" |
16 | tool_tip="Press Enter to say, Ctrl-Enter to shout." width="105" /> | 20 | tool_tip="Press Enter to say, Ctrl-Enter to shout." width="5" /> |
17 | <flyout_button bottom="-23" follows="right|bottom" height="20" label="Say" left_delta="109" | 21 | <flyout_button bottom="-23" follows="right|bottom" height="20" label="Say" left_delta="4" |
18 | list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" | 22 | list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" |
19 | width="80"> | 23 | width="80"> |
20 | <flyout_button_item value="shout" name="shout_item"> | 24 | <flyout_button_item value="shout" name="shout_item"> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_groups.xml b/linden/indra/newview/skins/default/xui/en-us/panel_groups.xml index c47985b..0bc7866 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_groups.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_groups.xml | |||
@@ -36,4 +36,7 @@ | |||
36 | label="Search..." name="Search..." width="80" /> | 36 | label="Search..." name="Search..." width="80" /> |
37 | <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22" | 37 | <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22" |
38 | label="Leave" name="Leave" width="80" /> | 38 | label="Leave" name="Leave" width="80" /> |
39 | <string name="none"> | ||
40 | none | ||
41 | </string> | ||
39 | </panel> | 42 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_login.xml b/linden/indra/newview/skins/default/xui/en-us/panel_login.xml index 4e0e69b..eef04e8 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_login.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_login.xml | |||
@@ -1,56 +1,35 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <panel bottom="0" follows="left|top|right|bottom" height="600" left="0" | 2 | |
3 | mouse_opaque="true" name="panel_login" width="800"> | 3 | <panel name="panel_login" |
4 | <web_browser border_visible="false" bottom="0" follows="top|left|bottom|right" left="0" | 4 | bottom="0" left="0" height="600" width="800" |
5 | name="login_html" right="-1" | 5 | follows="left|top|right|bottom" mouse_opaque="true" > |
6 | start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody bgcolor=%22#000000%22 text=%22ffffff%22%3E%3Ch1%3E%3Ctt%3Eloading...%3C/tt%3E%3C/h1%3E %3C/body%3E %3C/html%3E" | 6 | |
7 | top="-1" /> | 7 | <web_browser name="login_html" |
8 | bottom="0" top="-1" left="0" right="-1" | ||
9 | border_visible="false" follows="top|left|bottom|right" | ||
10 | start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody bgcolor=%22#000000%22 text=%22ffffff%22%3E%3Ch1%3E%3Ctt%3Eloading...%3C/tt%3E%3C/h1%3E %3C/body%3E %3C/html%3E" /> | ||
8 | <string name="real_url"> | 11 | <string name="real_url"> |
9 | http://secondlife.com/app/login/ | 12 | http://secondlife.com/app/login/ |
10 | </string> | 13 | </string> |
11 | <string name="forgot_password_url"> | 14 | <string name="forgot_password_url"> |
12 | http://secondlife.com/account/request.php | 15 | http://secondlife.com/account/request.php |
13 | </string> | 16 | </string> |
14 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 17 | |
15 | bottom="54" drop_shadow_visible="true" follows="left|bottom" | 18 | |
16 | font="SansSerif" h_pad="0" halign="left" height="16" | 19 | <!-- START LOCATION --> |
17 | left="32" mouse_opaque="true" name="first_name_text" v_pad="0" width="120"> | 20 | |
18 | First Name: | 21 | <text name="start_location_text" |
19 | </text> | 22 | bottom="8" left="24" height="16" width="95" |
20 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" | 23 | follows="left|bottom" h_pad="0" halign="right" v_pad="0" |
21 | follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" | 24 | bg_visible="false" drop_shadow_visible="true" |
22 | height="20" left="32" max_length="31" mouse_opaque="true" | 25 | border_visible="false" border_drop_shadow_visible="false" |
23 | name="first_name_edit" select_all_on_focus_received="true" width="120" /> | 26 | font="SansSerifSmall" mouse_opaque="true"> |
24 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
25 | bottom="54" drop_shadow_visible="true" follows="left|bottom" | ||
26 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
27 | left="164" mouse_opaque="true" name="last_name_text" v_pad="0" width="120"> | ||
28 | Last Name: | ||
29 | </text> | ||
30 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" | ||
31 | follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" | ||
32 | height="20" left="164" max_length="31" mouse_opaque="true" | ||
33 | name="last_name_edit" select_all_on_focus_received="true" width="120" /> | ||
34 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
35 | bottom="54" drop_shadow_visible="true" follows="left|bottom" | ||
36 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
37 | left="296" mouse_opaque="true" name="password_text" v_pad="0" width="120"> | ||
38 | Password: | ||
39 | </text> | ||
40 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" | ||
41 | follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" | ||
42 | height="20" left="296" max_length="16" mouse_opaque="true" | ||
43 | name="password_edit" select_all_on_focus_received="true" width="120" /> | ||
44 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
45 | bottom="10" drop_shadow_visible="true" follows="left|bottom" | ||
46 | font="SansSerif" h_pad="0" halign="left" height="16" | ||
47 | left="32" mouse_opaque="true" name="start_location_text" v_pad="0" | ||
48 | width="95"> | ||
49 | Start Location: | 27 | Start Location: |
50 | </text> | 28 | </text> |
51 | <combo_box allow_text_entry="true" bottom="8" follows="left|bottom" height="18" | 29 | <combo_box name="start_location_combo" |
52 | left_delta="97" max_chars="128" mouse_opaque="true" | 30 | bottom_delta="2" left_delta="100" height="16" width="150" |
53 | name="start_location_combo" width="155"> | 31 | follows="left|bottom" font="SansSerifSmall" |
32 | mouse_opaque="true" allow_text_entry="true" max_chars="128"> | ||
54 | <combo_item name="MyHome" value="My Home"> | 33 | <combo_item name="MyHome" value="My Home"> |
55 | My Home | 34 | My Home |
56 | </combo_item> | 35 | </combo_item> |
@@ -61,36 +40,129 @@ | |||
61 | <Type region name> | 40 | <Type region name> |
62 | </combo_item> | 41 | </combo_item> |
63 | </combo_box> | 42 | </combo_box> |
64 | <check_box bottom="10" control_name="RememberPassword" | 43 | |
65 | follows="left|bottom" font="SansSerifSmall" height="16" | 44 | |
66 | initial_value="false" label="Remember password" | 45 | <!-- FIRST NAME --> |
67 | left_delta="163" mouse_opaque="true" name="remember_check" width="138" /> | 46 | |
68 | <button bottom="28" follows="left|bottom" font="SansSerif" halign="center" | 47 | <text name="first_name_text" |
69 | height="24" label="Log In" label_selected="Log In" | 48 | bottom="56" left="24" height="16" width="120" |
70 | left="435" mouse_opaque="true" name="connect_btn" scale_image="TRUE" | 49 | follows="left|bottom" h_pad="0" halign="left" v_pad="0" |
71 | width="120" /> | 50 | bg_visible="false" drop_shadow_visible="true" |
72 | <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18" | 51 | border_visible="false" border_drop_shadow_visible="false" |
73 | left_delta="135" max_chars="20" mouse_opaque="true" | 52 | font="SansSerif" mouse_opaque="true"> |
74 | name="server_combo" width="120" /> | 53 | First Name: |
75 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 54 | </text> |
76 | bottom="45" drop_shadow_visible="true" follows="right|bottom" | 55 | <line_editor name="first_name_edit" |
77 | font="SansSerifSmall" font-style="UNDERLINE" h_pad="0" halign="right" height="16" | 56 | bottom_delta="-20" left_delta="0" height="20" width="120" |
78 | left="-210" mouse_opaque="true" name="create_new_account_text" v_pad="0" width="200" | 57 | follows="left|bottom" font="SansSerif" |
79 | hover="true" hover_color="50 115 185"> | 58 | bevel_style="in" border_style="line" border_thickness="1" |
59 | max_length="16" mouse_opaque="true" | ||
60 | handle_edit_keys_directly="true" | ||
61 | select_all_on_focus_received="true" /> | ||
62 | |||
63 | |||
64 | <!-- LAST NAME --> | ||
65 | |||
66 | <text name="last_name_text" | ||
67 | bottom_delta="20" left_delta="130" height="16" width="120" | ||
68 | follows="left|bottom" h_pad="0" halign="left" v_pad="0" | ||
69 | bg_visible="false" drop_shadow_visible="true" | ||
70 | border_visible="false" border_drop_shadow_visible="false" | ||
71 | font="SansSerif" mouse_opaque="true"> | ||
72 | Last Name: | ||
73 | </text> | ||
74 | <line_editor name="last_name_edit" | ||
75 | bottom_delta="-20" left_delta="0" height="20" width="120" | ||
76 | follows="left|bottom" font="SansSerif" | ||
77 | bevel_style="in" border_style="line" border_thickness="1" | ||
78 | max_length="16" mouse_opaque="true" | ||
79 | handle_edit_keys_directly="true" | ||
80 | select_all_on_focus_received="true" /> | ||
81 | |||
82 | |||
83 | <!-- PASSWORD --> | ||
84 | |||
85 | <text name="password_text" | ||
86 | bottom_delta="20" left_delta="130" height="16" width="120" | ||
87 | follows="left|bottom" h_pad="0" halign="left" v_pad="0" | ||
88 | bg_visible="false" drop_shadow_visible="true" | ||
89 | border_visible="false" border_drop_shadow_visible="false" | ||
90 | font="SansSerif" mouse_opaque="true"> | ||
91 | Password: | ||
92 | </text> | ||
93 | <line_editor name="password_edit" | ||
94 | bottom_delta="-20" left_delta="0" height="20" width="120" | ||
95 | follows="left|bottom" font="SansSerif" | ||
96 | bevel_style="in" border_style="line" border_thickness="1" | ||
97 | max_length="16" mouse_opaque="true" | ||
98 | handle_edit_keys_directly="true" | ||
99 | select_all_on_focus_received="true" /> | ||
100 | <check_box name="remember_check" label="Remember password" | ||
101 | bottom_delta="-24" left_delta="0" height="16" width="140" | ||
102 | follows="left|bottom" font="SansSerifSmall" | ||
103 | initial_value="false" mouse_opaque="true" /> | ||
104 | |||
105 | |||
106 | <!-- GRIDS --> | ||
107 | |||
108 | <text name="grid_text" | ||
109 | bottom="56" left_delta="150" height="16" width="120" | ||
110 | follows="left|bottom" h_pad="0" halign="left" v_pad="0" | ||
111 | bg_visible="false" drop_shadow_visible="true" | ||
112 | border_visible="false" border_drop_shadow_visible="false" | ||
113 | font="SansSerif" mouse_opaque="true"> | ||
114 | Grid: | ||
115 | </text> | ||
116 | <combo_box name="server_combo" | ||
117 | bottom_delta="-20" left_delta="0" height="20" width="120" | ||
118 | follows="left|bottom" allow_text_entry="false" | ||
119 | max_chars="20" mouse_opaque="true" /> | ||
120 | <button name="grid_btn" label="Grid Manager" | ||
121 | bottom_delta="-24" left_delta="10" height="16" width="100" | ||
122 | follows="left|bottom" font="SansSerifSmall" halign="center" | ||
123 | mouse_opaque="true" scale_image="TRUE" /> | ||
124 | |||
125 | |||
126 | <!-- LOG IN --> | ||
127 | |||
128 | <button name="connect_btn" label="Log In" | ||
129 | bottom="34" left_delta="140" height="24" width="120" | ||
130 | follows="left|bottom" font="SansSerif" halign="center" | ||
131 | mouse_opaque="true" scale_image="TRUE" /> | ||
132 | |||
133 | |||
134 | <!-- ACCOUNT / FORGOT PASSWORD --> | ||
135 | |||
136 | <text name="create_new_account_text" | ||
137 | bottom="45" left="-210" height="16" width="200" | ||
138 | follows="right|bottom" h_pad="0" halign="right" v_pad="0" | ||
139 | bg_visible="false" drop_shadow_visible="true" | ||
140 | border_visible="false" border_drop_shadow_visible="false" | ||
141 | font="SansSerifSmall" font-style="UNDERLINE" | ||
142 | mouse_opaque="true" hover="true" hover_color="50 115 185"> | ||
80 | Sign up for account | 143 | Sign up for account |
81 | </text> | 144 | </text> |
82 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 145 | |
83 | bottom="25" drop_shadow_visible="true" follows="right|bottom" | 146 | <text name="forgot_password_text" |
84 | font="SansSerifSmall" font-style="UNDERLINE" h_pad="0" halign="right" height="16" | 147 | bottom="25" left="-210" height="16" width="200" |
85 | left="-210" mouse_opaque="true" name="forgot_password_text" v_pad="0" width="200" | 148 | follows="right|bottom" h_pad="0" halign="right" v_pad="0" |
86 | hover="true" hover_color="50 115 185"> | 149 | bg_visible="false" drop_shadow_visible="true" |
150 | border_visible="false" border_drop_shadow_visible="false" | ||
151 | font="SansSerifSmall" font-style="UNDERLINE" | ||
152 | mouse_opaque="true" hover="true" hover_color="50 115 185"> | ||
87 | Forgot your name or password? | 153 | Forgot your name or password? |
88 | </text> | 154 | </text> |
89 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 155 | |
90 | bottom="5" drop_shadow_visible="true" follows="right|bottom" | 156 | |
91 | font="SansSerifSmall" h_pad="0" halign="right" height="16" | 157 | <!-- CHANNEL & VERSION --> |
92 | left="-310" mouse_opaque="true" name="channel_text" v_pad="0" width="300" | 158 | |
93 | hover="true" hover_color="50 115 185"> | 159 | <text name="channel_text" |
160 | bottom="5" left="-310" height="16" width="300" | ||
161 | follows="right|bottom" h_pad="0" halign="right" v_pad="0" | ||
162 | bg_visible="false" drop_shadow_visible="true" | ||
163 | border_visible="false" border_drop_shadow_visible="false" | ||
164 | font="SansSerifSmall" mouse_opaque="true" | ||
165 | hover="true" hover_color="50 115 185"> | ||
94 | [VERSION] | 166 | [VERSION] |
95 | </text> | 167 | </text> |
96 | </panel> | 168 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml index 1a93341..19faa62 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml | |||
@@ -1,6 +1,6 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor" | 2 | <panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor" |
3 | border="false" follows="left|top|right|bottom" height="216" label="Mini Map" | 3 | border="false" follows="left|top|right|bottom" height="716" label="Mini Map" |
4 | mouse_opaque="false" name="mini_mapview" width="196"> | 4 | mouse_opaque="false" name="mini_mapview" width="196"> |
5 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 5 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
6 | bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0" | 6 | bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml index e785909..8ad4fff 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml | |||
@@ -45,16 +45,21 @@ | |||
45 | use_bounding_rect="true" width="395" /> | 45 | use_bounding_rect="true" width="395" /> |
46 | </layout_stack> | 46 | </layout_stack> |
47 | </layout_panel> | 47 | </layout_panel> |
48 | <layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false" | 48 | <layout_panel auto_resize="false" bottom="0" left="0" min_width="184" mouse_opaque="false" |
49 | name="windlight_remote_container" use_bounding_rect="true" user_resize="false" | ||
50 | width="186"> | ||
51 | <panel background_visible="false" border="false" bottom="0" name="windlight_remote" /> | ||
52 | </layout_panel> | ||
53 | <layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false" | ||
49 | name="media_remote_container" use_bounding_rect="true" user_resize="false" | 54 | name="media_remote_container" use_bounding_rect="true" user_resize="false" |
50 | width="220"> | 55 | width="220"> |
51 | <panel background_visible="false" border="false" bottom="0" name="media_remote" /> | 56 | <panel background_visible="false" border="false" bottom="0" name="media_remote" /> |
52 | </layout_panel> | 57 | </layout_panel> |
53 | <layout_panel auto_resize="false" bottom="0" left="0" min_width="130" mouse_opaque="false" | 58 | <layout_panel auto_resize="false" bottom="0" left="0" min_width="130" mouse_opaque="false" |
54 | name="voice_remote_container" use_bounding_rect="true" user_resize="false" | 59 | name="voice_remote_container" use_bounding_rect="true" user_resize="false" |
55 | width="128"> | 60 | width="128"> |
56 | <panel background_visible="false" border="false" bottom="0" name="voice_remote" /> | 61 | <panel background_visible="false" border="false" bottom="0" name="voice_remote" /> |
57 | </layout_panel> | 62 | </layout_panel> |
58 | </layout_stack> | 63 | </layout_stack> |
59 | <string name="unread_count_string_plural"> | 64 | <string name="unread_count_string_plural"> |
60 | New IMs | 65 | New IMs |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml index 62ada26..5926374 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml | |||
@@ -15,7 +15,7 @@ | |||
15 | Streaming Preferences: | 15 | Streaming Preferences: |
16 | </text> | 16 | </text> |
17 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 17 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
18 | bottom="-280" drop_shadow_visible="true" enabled="true" follows="left|top" | 18 | bottom="-300" drop_shadow_visible="true" enabled="true" follows="left|top" |
19 | font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" | 19 | font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" |
20 | mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> | 20 | mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> |
21 | Audio Preferences: | 21 | Audio Preferences: |
@@ -28,6 +28,10 @@ | |||
28 | label="Play Streaming Music When Available (uses more bandwidth)" | 28 | label="Play Streaming Music When Available (uses more bandwidth)" |
29 | left="142" mouse_opaque="true" name="streaming_music" radio_style="false" | 29 | left="142" mouse_opaque="true" name="streaming_music" radio_style="false" |
30 | width="339" /> | 30 | width="339" /> |
31 | <check_box bottom_delta="-20" control_name="ShowStreamTitle" enabled="true" | ||
32 | follows="left|top" font="SansSerifSmall" height="16" initial_value="true" | ||
33 | label="Show stream info in chat" left="162" mouse_opaque="true" | ||
34 | name="show_stream_title" radio_style="false" width="338" /> | ||
31 | <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true" | 35 | <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true" |
32 | follows="left|top" font="SansSerifSmall" height="16" initial_value="true" | 36 | follows="left|top" font="SansSerifSmall" height="16" initial_value="true" |
33 | label="Play Streaming Media When Available (uses more bandwidth)" | 37 | label="Play Streaming Media When Available (uses more bandwidth)" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml index 50d1d68..e9ab27c 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml | |||
@@ -30,48 +30,52 @@ | |||
30 | mouse_opaque="false" name="text_box2" v_pad="0" width="128"> | 30 | mouse_opaque="false" name="text_box2" v_pad="0" width="128"> |
31 | Chat Color: | 31 | Chat Color: |
32 | </text> | 32 | </text> |
33 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-100" | 33 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-108" |
34 | can_apply_immediately="true" color="1 1 1 1" control_name="UserChatColor" | 34 | can_apply_immediately="true" color="1 1 1 1" control_name="UserChatColor" |
35 | enabled="true" follows="left|top" height="47" label="You" left="148" | 35 | enabled="true" follows="left|top" height="47" label="You" left="148" |
36 | mouse_opaque="true" name="user" width="44" /> | 36 | mouse_opaque="true" name="user" width="54" /> |
37 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-100" | 37 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-108" |
38 | can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor" | 38 | can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor" |
39 | enabled="true" follows="left|top" height="47" label="Others" left_delta="54" | 39 | enabled="true" follows="left|top" height="56" label="Others" left_delta="68" |
40 | mouse_opaque="true" name="agent" width="44" /> | 40 | mouse_opaque="true" name="agent" width="54" /> |
41 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-100" | 41 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-108" |
42 | can_apply_immediately="true" color="0.6 0.6 1 1" | 42 | can_apply_immediately="true" color="0.6 0.6 1 1" |
43 | enabled="true" follows="left|top" height="47" label="IM" left_delta="54" | 43 | enabled="true" follows="left|top" height="56" label="IMs" left_delta="68" |
44 | mouse_opaque="true" name="im" width="44" /> | 44 | mouse_opaque="true" name="im" width="54" /> |
45 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-100" | 45 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-108" |
46 | can_apply_immediately="true" color="0.8 1 1 1" | 46 | can_apply_immediately="true" color="0.8 1 1 1" |
47 | enabled="true" follows="left|top" height="47" label="System" left_delta="54" | 47 | enabled="true" follows="left|top" |
48 | mouse_opaque="true" | 48 | height="56" label="System" left_delta="68" mouse_opaque="true" |
49 | name="system" width="44" /> | 49 | name="system" width="54" /> |
50 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-100" | 50 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-108" |
51 | can_apply_immediately="true" color="0.82 0.82 0.99 1" | 51 | can_apply_immediately="true" color="0.82 0.82 0.99 1" |
52 | control_name="ScriptErrorColor" enabled="true" follows="left|top" | 52 | control_name="ScriptErrorColor" enabled="true" follows="left|top" |
53 | height="47" label="Errors" left_delta="54" mouse_opaque="true" | 53 | height="56" label="Errors" left_delta="68" mouse_opaque="true" |
54 | name="script_error" width="44" /> | 54 | name="script_error" width="54" /> |
55 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-150" | 55 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-165" |
56 | can_apply_immediately="true" color="0.7 0.9 0.7 1" | 56 | can_apply_immediately="true" color="0.7 0.9 0.7 1" |
57 | control_name="ObjectChatColor" enabled="true" follows="left|top" | 57 | control_name="ObjectChatColor" enabled="true" follows="left|top" |
58 | height="47" label="Objects" left="148" mouse_opaque="true" | 58 | height="47" label="Objects" left="148" mouse_opaque="true" |
59 | name="objects" width="44" /> | 59 | name="objects" width="54" /> |
60 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-150" | 60 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-165" |
61 | can_apply_immediately="true" color="0.7 0.9 0.7 1" | ||
62 | control_name="ObjectIMColor" enabled="true" follows="left|top" | ||
63 | height="56" label="Object IMs" left_delta="68" mouse_opaque="true" | ||
64 | name="object_ims" width="54" /> | ||
65 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-165" | ||
61 | can_apply_immediately="true" color="0.7 0.9 0.7 1" | 66 | can_apply_immediately="true" color="0.7 0.9 0.7 1" |
62 | enabled="true" follows="left|top" | 67 | enabled="true" follows="left|top" |
63 | height="47" label="Owner" left_delta="54" mouse_opaque="true" name="owner" | 68 | height="56" label="Owner" left_delta="68" mouse_opaque="true" name="owner" |
64 | width="44" /> | 69 | width="54" /> |
65 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-150" | 70 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-165" |
66 | can_apply_immediately="true" color="0 0 0 1" | 71 | can_apply_immediately="true" color="0 0 0 1" |
67 | enabled="true" follows="left|top" | 72 | enabled="true" follows="left|top" |
68 | height="47" label="Bubble" left_delta="54" mouse_opaque="true" | 73 | height="56" label="Bubble" left_delta="68" mouse_opaque="true" |
69 | name="background" width="44" /> | 74 | name="background" width="54" /> |
70 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-150" | 75 | <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-165" |
71 | can_apply_immediately="true" color="0.6 0.6 1 1" | 76 | can_apply_immediately="true" color="0.6 0.6 1 1" |
72 | enabled="true" follows="left|top" height="47" | 77 | enabled="true" follows="left|top" height="56" |
73 | label="URLs" left_delta="54" mouse_opaque="true" name="links" width="44" /> | 78 | label="URLs" left_delta="68" mouse_opaque="true" name="links" width="54" /> |
74 | |||
75 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 79 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
76 | bottom_delta="-28" drop_shadow_visible="true" enabled="true" follows="left|top" | 80 | bottom_delta="-28" drop_shadow_visible="true" enabled="true" follows="left|top" |
77 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" | 81 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" |
@@ -121,35 +125,41 @@ | |||
121 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | 125 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" |
122 | label="Close chat bar after hitting return" left="148" mouse_opaque="true" | 126 | label="Close chat bar after hitting return" left="148" mouse_opaque="true" |
123 | name="close_chat_on_return_check" radio_style="false" width="237" /> | 127 | name="close_chat_on_return_check" radio_style="false" width="237" /> |
124 | <check_box bottom_delta="-20" enabled="true" | 128 | <check_box bottom_delta="-18" enabled="true" |
125 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | 129 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" |
126 | label="Arrow keys always move avatar when chatting" left="148" | 130 | label="Arrow keys always move avatar when chatting" left="148" |
127 | mouse_opaque="true" name="arrow_keys_move_avatar_check" radio_style="false" | 131 | mouse_opaque="true" name="arrow_keys_move_avatar_check" radio_style="false" |
128 | width="237" /> | 132 | width="237" /> |
129 | <check_box bottom_delta="-20" enabled="true" | 133 | <check_box bottom_delta="-18" enabled="true" |
130 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | 134 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" |
131 | label="Show timestamps in Local Chat" left="148" mouse_opaque="true" | 135 | label="Show timestamps in Local Chat" left="148" mouse_opaque="true" |
132 | name="show_timestamps_check" radio_style="false" width="237" /> | 136 | name="show_timestamps_check" radio_style="false" width="237" /> |
137 | <check_box bottom_delta="-20" enabled="true" | ||
133 | <check_box bottom_delta="-20" control_name="ScriptErrorsAsChat" enabled="true" | 138 | <check_box bottom_delta="-20" control_name="ScriptErrorsAsChat" enabled="true" |
134 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | 139 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" |
135 | label="Show script errors and warnings as regular chat" left="148" | 140 | label="Show script errors and warnings as regular chat" left="148" |
136 | mouse_opaque="true" name="script_errors_as_chat" radio_style="false" | 141 | mouse_opaque="true" name="script_errors_as_chat" radio_style="false" |
137 | width="275" /> | 142 | width="275" /> |
138 | <check_box bottom_delta="-20" enabled="true" | 143 | <check_box bottom_delta="-20" enabled="true" |
144 | <check_box bottom_delta="-18" enabled="true" | ||
139 | follows="left|top" font="SansSerifSmall" height="16" initial_value="true" | 145 | follows="left|top" font="SansSerifSmall" height="16" initial_value="true" |
140 | label="Play typing animation when chatting" left="148" mouse_opaque="true" | 146 | label="Play typing animation when chatting" left="148" mouse_opaque="true" |
141 | name="play_typing_animation" radio_style="false" width="237" /> | 147 | name="play_typing_animation" radio_style="false" width="237" /> |
148 | <check_box bottom_delta="-18" enabled="true" follows="left|top" | ||
149 | font="SansSerifSmall" height="16" initial_value="false" | ||
150 | label="Show custom chat channel" left="148" mouse_opaque="true" | ||
151 | name="toggle_channel_control" radio_style="false" width="237" /> | ||
142 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 152 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
143 | bottom="-369" drop_shadow_visible="true" enabled="true" follows="left|top" | 153 | bottom="-379" drop_shadow_visible="true" enabled="true" follows="left|top" |
144 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" | 154 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" |
145 | mouse_opaque="false" name="text_box7" v_pad="0" width="128"> | 155 | mouse_opaque="false" name="text_box7" v_pad="0" width="128"> |
146 | Bubble Chat: | 156 | Bubble Chat: |
147 | </text> | 157 | </text> |
148 | <check_box bottom="-376" control_name="UseChatBubbles" enabled="true" follows="left|top" | 158 | <check_box bottom="-386" control_name="UseChatBubbles" enabled="true" follows="left|top" |
149 | font="SansSerifSmall" height="16" initial_value="false" | 159 | font="SansSerifSmall" height="16" initial_value="false" |
150 | label="Show chat bubbles" left="148" mouse_opaque="true" | 160 | label="Show chat bubbles" left="148" mouse_opaque="true" |
151 | name="bubble_text_chat" radio_style="false" width="237" /> | 161 | name="bubble_text_chat" radio_style="false" width="237" /> |
152 | <slider bottom="-392" can_edit_text="false" control_name="ChatBubbleOpacity" | 162 | <slider bottom="-402" can_edit_text="false" control_name="ChatBubbleOpacity" |
153 | decimal_digits="3" enabled="true" follows="left|top" height="12" | 163 | decimal_digits="3" enabled="true" follows="left|top" height="12" |
154 | increment="0.05" initial_val="1" label="Opacity" left="148" max_val="1" | 164 | increment="0.05" initial_val="1" label="Opacity" left="148" max_val="1" |
155 | min_val="0" mouse_opaque="true" name="bubble_chat_opacity" show_text="true" | 165 | min_val="0" mouse_opaque="true" name="bubble_chat_opacity" show_text="true" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml index 5989e7d..6b17ab3 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml | |||
@@ -62,9 +62,13 @@ | |||
62 | UI Size: | 62 | UI Size: |
63 | </text> | 63 | </text> |
64 | <slider bottom="-217" can_edit_text="true" | 64 | <slider bottom="-217" can_edit_text="true" |
65 | decimal_digits="3" enabled="true" height="16" increment="0.025" | 65 | decimal_digits="3" enabled="true" height="16" increment="0.001" |
66 | initial_val="1" left="148" max_val="1.4" min_val="0.75" mouse_opaque="true" | 66 | initial_val="1" left="148" max_val="1.4" min_val="0.75" mouse_opaque="true" |
67 | name="ui_scale_slider" show_text="true" value="1" width="256" /> | 67 | name="ui_scale_slider" show_text="true" value="1" width="220" /> |
68 | <button bottom="-221" enabled="true" follows="left|top" | ||
69 | font="SansSerif" halign="center" height="22" label="Reset" | ||
70 | label_selected="Reset" left_delta="226" mouse_opaque="true" | ||
71 | name="reset_ui_size" scale_image="true" width="80" /> | ||
68 | <check_box bottom="-236" enabled="true" follows="left|top" | 72 | <check_box bottom="-236" enabled="true" follows="left|top" |
69 | font="SansSerifSmall" height="16" initial_value="false" | 73 | font="SansSerifSmall" height="16" initial_value="false" |
70 | label="Use resolution independent scale" left="151" mouse_opaque="true" | 74 | label="Use resolution independent scale" left="151" mouse_opaque="true" |
@@ -73,7 +77,23 @@ | |||
73 | follows="left|top" height="16" increment="1" initial_val="300" | 77 | follows="left|top" height="16" increment="1" initial_val="300" |
74 | label="Away Timeout:" label_width="141" left="10" max_val="600" | 78 | label="Away Timeout:" label_width="141" left="10" max_val="600" |
75 | min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" /> | 79 | min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" /> |
76 | <check_box bottom="-286" enabled="true" | 80 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
81 | bottom_delta="-25" drop_shadow_visible="true" enabled="true" follows="left|top" | ||
82 | font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" | ||
83 | mouse_opaque="true" name="UI Size:" v_pad="0" width="128"> | ||
84 | Mini-map notify: | ||
85 | </text> | ||
86 | <check_box bottom_delta="0" enabled="true" | ||
87 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | ||
88 | label="Entering chat range" left="151" | ||
89 | mouse_opaque="true" name="mini_map_notify_chat" radio_style="false" | ||
90 | width="256" /> | ||
91 | <check_box bottom_delta="0" enabled="true" | ||
92 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | ||
93 | label="Entering sim" left="330" | ||
94 | mouse_opaque="true" name="mini_map_notify_sim" radio_style="false" | ||
95 | width="256" /> | ||
96 | <check_box bottom="-304" enabled="true" | ||
77 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | 97 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" |
78 | label="Notify when Linden dollars (L$) spent or received" left="151" | 98 | label="Notify when Linden dollars (L$) spent or received" left="151" |
79 | mouse_opaque="true" name="notify_money_change_checkbox" radio_style="false" | 99 | mouse_opaque="true" name="notify_money_change_checkbox" radio_style="false" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml index 527309e..c663ae2 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml | |||
@@ -6,8 +6,12 @@ | |||
6 | left="470" name="GraphicsPreferencesHelpButton" width="22" /> | 6 | left="470" name="GraphicsPreferencesHelpButton" width="22" /> |
7 | <check_box bottom="-23" enabled="true" follows="left|top" font="SansSerifSmall" | 7 | <check_box bottom="-23" enabled="true" follows="left|top" font="SansSerifSmall" |
8 | height="16" initial_value="false" | 8 | height="16" initial_value="false" |
9 | label="Run Second Life in a window" left="10" mouse_opaque="true" | 9 | label="Run Imprudence in a window" left="10" mouse_opaque="true" |
10 | name="windowed mode" radio_style="false" width="100" /> | 10 | name="windowed mode" radio_style="false" width="100" /> |
11 | <check_box bottom_delta="0" enabled="true" follows="left|top" | ||
12 | font="SansSerifSmall" height="16" initial_value="false" | ||
13 | label="Show WindLight toolbar" left="275" mouse_opaque="true" | ||
14 | name="toggle_windlight_control" radio_style="false" width="237" /> | ||
11 | <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43" | 15 | <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43" |
12 | embedded_items="false" enabled="false" follows="left|top" | 16 | embedded_items="false" enabled="false" follows="left|top" |
13 | font="SansSerifSmall" height="20" hide_border="true" | 17 | font="SansSerifSmall" height="20" hide_border="true" |
@@ -247,7 +251,7 @@ | |||
247 | <slider bottom="-135" can_edit_text="false" control_name="RenderFarClip" | 251 | <slider bottom="-135" can_edit_text="false" control_name="RenderFarClip" |
248 | decimal_digits="0" enabled="true" follows="left|top" height="16" | 252 | decimal_digits="0" enabled="true" follows="left|top" height="16" |
249 | increment="8" initial_val="160" label="Draw Distance:" | 253 | increment="8" initial_val="160" label="Draw Distance:" |
250 | label_width="140" left="215" max_val="512" min_val="64" mouse_opaque="true" | 254 | label_width="140" left="215" max_val="512" min_val="32" mouse_opaque="true" |
251 | name="DrawDistance" show_text="true" width="255" /> | 255 | name="DrawDistance" show_text="true" width="255" /> |
252 | <slider bottom_delta="-20" can_edit_text="false" control_name="RenderMaxPartCount" | 256 | <slider bottom_delta="-20" can_edit_text="false" control_name="RenderMaxPartCount" |
253 | decimal_digits="0" enabled="true" follows="left|top" height="16" | 257 | decimal_digits="0" enabled="true" follows="left|top" height="16" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml index ee00455..9b18e11 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml | |||
@@ -49,55 +49,59 @@ | |||
49 | initial_value="false" label="Show online Friend notifications" left="148" | 49 | initial_value="false" label="Show online Friend notifications" left="148" |
50 | mouse_opaque="true" name="friends_online_notify_checkbox" | 50 | mouse_opaque="true" name="friends_online_notify_checkbox" |
51 | radio_style="false" width="256" /> | 51 | radio_style="false" width="256" /> |
52 | <check_box bottom_delta="-20" enabled="true" | ||
53 | follows="left|top" font="SansSerifSmall" height="16" initial_value="false" | ||
54 | label="Vertical IM tabs (requires restart)" left_delta="0" mouse_opaque="true" | ||
55 | name="vertical-imtabs-toggle" radio_style="false" width="270" /> | ||
52 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 56 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
53 | bottom="-125" drop_shadow_visible="true" enabled="true" follows="left|top" | 57 | bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top" |
54 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" | 58 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" |
55 | mouse_opaque="false" name="text_box3" v_pad="0" width="128"> | 59 | mouse_opaque="false" name="text_box3" v_pad="0" width="128"> |
56 | Busy Mode Response: | 60 | Busy Mode Response: |
57 | </text> | 61 | </text> |
58 | <text_editor type="string" length="1" bottom="-185" embedded_items="false" enabled="true" follows="left|top" | 62 | <text_editor type="string" length="1" bottom_delta="-60" embedded_items="false" enabled="true" follows="left|top" |
59 | font="SansSerifSmall" height="70" left="148" max_length="255" | 63 | font="SansSerifSmall" height="70" left="148" max_length="255" |
60 | mouse_opaque="true" name="busy_response" width="330" word_wrap="true" /> | 64 | mouse_opaque="true" name="busy_response" width="330" word_wrap="true" /> |
61 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 65 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
62 | bottom="-218" drop_shadow_visible="true" enabled="true" follows="left|top" | 66 | bottom_delta="-33" drop_shadow_visible="true" enabled="true" follows="left|top" |
63 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" | 67 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" |
64 | mouse_opaque="false" name="text_box4" v_pad="0" width="128"> | 68 | mouse_opaque="false" name="text_box4" v_pad="0" width="128"> |
65 | Logging Options: | 69 | Logging Options: |
66 | </text> | 70 | </text> |
67 | <check_box bottom="-225" enabled="true" | 71 | <check_box bottom_delta="-7" enabled="true" |
68 | follows="left|top" font="SansSerifSmall" height="16" | 72 | follows="left|top" font="SansSerifSmall" height="16" |
69 | initial_value="false" label="Save a log of IM on my computer" left="148" | 73 | initial_value="false" label="Save a log of IM on my computer" left="148" |
70 | mouse_opaque="true" name="log_instant_messages" radio_style="false" | 74 | mouse_opaque="true" name="log_instant_messages" radio_style="false" |
71 | width="237" /> | 75 | width="237" /> |
72 | <check_box bottom="-245" enabled="true" | 76 | <check_box bottom_delta="-20" enabled="true" |
73 | follows="left|top" font="SansSerifSmall" height="16" | 77 | follows="left|top" font="SansSerifSmall" height="16" |
74 | initial_value="false" label="Show timestamps in IM log" left="168" | 78 | initial_value="false" label="Show timestamps in IM log" left="168" |
75 | mouse_opaque="true" name="log_instant_messages_timestamp" radio_style="false" | 79 | mouse_opaque="true" name="log_instant_messages_timestamp" radio_style="false" |
76 | width="217" /> | 80 | width="217" /> |
77 | <check_box bottom="-265" enabled="true" follows="left|top" | 81 | <check_box bottom_delta="-20" enabled="true" follows="left|top" |
78 | font="SansSerifSmall" height="16" initial_value="false" | 82 | font="SansSerifSmall" height="16" initial_value="false" |
79 | label="Show the end of last IM conversation" left="168" mouse_opaque="true" | 83 | label="Show the end of last IM conversation" left="168" mouse_opaque="true" |
80 | name="log_show_history" radio_style="false" width="217" /> | 84 | name="log_show_history" radio_style="false" width="217" /> |
81 | <check_box bottom="-285" enabled="true" follows="left|top" | 85 | <check_box bottom_delta="-20" enabled="true" follows="left|top" |
82 | font="SansSerifSmall" height="16" initial_value="false" label="Save a log of Local Chat on my computer" | 86 | font="SansSerifSmall" height="16" initial_value="false" label="Save a log of Local Chat on my computer" |
83 | left="148" mouse_opaque="true" name="log_chat" radio_style="false" | 87 | left="148" mouse_opaque="true" name="log_chat" radio_style="false" |
84 | width="237" /> | 88 | width="237" /> |
85 | <check_box bottom="-305" enabled="true" follows="left|top" | 89 | <check_box bottom_delta="-20" enabled="true" follows="left|top" |
86 | font="SansSerifSmall" height="16" initial_value="false" | 90 | font="SansSerifSmall" height="16" initial_value="false" |
87 | label="Show timestamps in Local Chat log" left="168" mouse_opaque="true" | 91 | label="Show timestamps in Local Chat log" left="168" mouse_opaque="true" |
88 | name="log_chat_timestamp" radio_style="false" width="217" /> | 92 | name="log_chat_timestamp" radio_style="false" width="217" /> |
89 | <check_box bottom="-325" enabled="true" follows="left|top" | 93 | <check_box bottom_delta="-20" enabled="true" follows="left|top" |
90 | font="SansSerifSmall" height="16" initial_value="false" | 94 | font="SansSerifSmall" height="16" initial_value="false" |
91 | label="Show incoming IM in Local Chat log" left="168" mouse_opaque="true" | 95 | label="Show incoming IM in Local Chat log" left="168" mouse_opaque="true" |
92 | name="log_chat_IM" radio_style="false" width="217" /> | 96 | name="log_chat_IM" radio_style="false" width="217" /> |
93 | <check_box bottom="-345" enabled="true" follows="left|top" | 97 | <check_box bottom_delta="-20" enabled="true" follows="left|top" |
94 | font="SansSerifSmall" height="16" initial_value="false" | 98 | font="SansSerifSmall" height="16" initial_value="false" |
95 | label="Include date with timestamps" left="148" mouse_opaque="true" | 99 | label="Include date with timestamps" left="148" mouse_opaque="true" |
96 | name="log_date_timestamp" radio_style="false" width="237" /> | 100 | name="log_date_timestamp" radio_style="false" width="237" /> |
97 | <button bottom="-367" follows="right|bottom" font="SansSerif" halign="center" | 101 | <button bottom_delta="-22" follows="right|bottom" font="SansSerif" halign="center" |
98 | height="20" label="Change Path" label_selected="Change Path" left="170" | 102 | height="20" label="Change Path" label_selected="Change Path" left="170" |
99 | mouse_opaque="true" name="log_path_button" width="90" /> | 103 | mouse_opaque="true" name="log_path_button" width="90" /> |
100 | <line_editor border_drop_shadow_visible="false" border_visible="false" bottom="-366" | 104 | <line_editor border_drop_shadow_visible="false" border_visible="false" bottom_delta="1" |
101 | drop_shadow_visible="true" enabled="false" follows="top|left|right" | 105 | drop_shadow_visible="true" enabled="false" follows="top|left|right" |
102 | font="SansSerifSmall" halign="right" height="19" left="248" | 106 | font="SansSerifSmall" halign="right" height="19" left="248" |
103 | max_length="254" mouse_opaque="false" name="log_path_string" right="-20" /> | 107 | max_length="254" mouse_opaque="false" name="log_path_string" right="-20" /> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml index 48da432..655859a 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml | |||
@@ -8,10 +8,10 @@ | |||
8 | mouse_opaque="false" name="text_box" v_pad="0" width="200"> | 8 | mouse_opaque="false" name="text_box" v_pad="0" width="200"> |
9 | Maximum Bandwidth: | 9 | Maximum Bandwidth: |
10 | </text> | 10 | </text> |
11 | <slider bottom_delta="-25" can_edit_text="true" | 11 | <slider bottom_delta="-25" can_edit_text="true" control_name="ThrottleBandwidthKBPS" |
12 | decimal_digits="0" enabled="true" follows="left|top" height="15" | 12 | decimal_digits="0" enabled="true" follows="left|top" height="15" |
13 | increment="10" initial_val="50" left_delta="0" max_val="1500" min_val="50" | 13 | increment="10" initial_val="1000" left_delta="0" max_val="5000" min_val="50" |
14 | mouse_opaque="true" name="max_bandwidth" show_text="true" value="500" | 14 | mouse_opaque="true" name="max_bandwidth" show_text="true" value="1000" |
15 | width="180" /> | 15 | width="180" /> |
16 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 16 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
17 | bottom_delta="4" drop_shadow_visible="true" enabled="true" | 17 | bottom_delta="4" drop_shadow_visible="true" enabled="true" |
@@ -25,22 +25,15 @@ | |||
25 | follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" | 25 | follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" |
26 | height="10" left="12" mouse_opaque="false" name="cache_size_label_l" | 26 | height="10" left="12" mouse_opaque="false" name="cache_size_label_l" |
27 | v_pad="0" width="200"> | 27 | v_pad="0" width="200"> |
28 | Disk Cache Size: | 28 | Disk Cache Size (MB): |
29 | </text> | 29 | </text> |
30 | <slider bottom_delta="-25" can_edit_text="true" | 30 | <slider bottom_delta="-25" can_edit_text="true" control_name="CacheSize" |
31 | decimal_digits="0" enabled="true" follows="left|top" height="15" | 31 | decimal_digits="0" enabled="true" follows="left|top" height="15" |
32 | increment="10" initial_val="50" left_delta="0" max_val="1000" min_val="10" | 32 | increment="10" initial_val="50" left_delta="0" max_val="1000" min_val="10" |
33 | mouse_opaque="true" name="cache_size" show_text="true" width="180" /> | 33 | mouse_opaque="true" name="cache_size" show_text="true" width="180" /> |
34 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
35 | bottom_delta="4" drop_shadow_visible="true" enabled="true" | ||
36 | follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" | ||
37 | height="10" left_delta="186" mouse_opaque="false" name="text_box5" | ||
38 | v_pad="0" width="40"> | ||
39 | MB | ||
40 | </text> | ||
41 | <button bottom="-55" bottom_delta="-4" enabled="true" follows="left|bottom" | 34 | <button bottom="-55" bottom_delta="-4" enabled="true" follows="left|bottom" |
42 | font="SansSerif" halign="center" height="22" label="Clear Cache" left="340" | 35 | font="SansSerif" halign="center" height="22" label="Clear Cache" left="340" |
43 | left_delta="30" mouse_opaque="true" name="clear_cache" scale_image="true" | 36 | left_delta="186" mouse_opaque="true" name="clear_cache" scale_image="true" |
44 | width="100" /> | 37 | width="100" /> |
45 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 38 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
46 | bottom="-70" bottom_delta="-17" drop_shadow_visible="true" enabled="true" | 39 | bottom="-70" bottom_delta="-17" drop_shadow_visible="true" enabled="true" |
@@ -51,7 +44,7 @@ | |||
51 | </text> | 44 | </text> |
52 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-28" | 45 | <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-28" |
53 | enabled="false" follows="left|top" font="SansSerif" | 46 | enabled="false" follows="left|top" font="SansSerif" |
54 | handle_edit_keys_directly="true" height="20" left_delta="7" | 47 | handle_edit_keys_directly="true" height="20" left_delta="0" |
55 | max_length="4096" mouse_opaque="true" name="cache_location" | 48 | max_length="4096" mouse_opaque="true" name="cache_location" |
56 | select_all_on_focus_received="false" width="470" word_wrap="false" /> | 49 | select_all_on_focus_received="false" width="470" word_wrap="false" /> |
57 | <button bottom_delta="-25" enabled="true" follows="left|top" font="SansSerif" | 50 | <button bottom_delta="-25" enabled="true" follows="left|top" font="SansSerif" |
@@ -61,12 +54,12 @@ | |||
61 | font="SansSerif" halign="center" height="22" label="Reset" | 54 | font="SansSerif" halign="center" height="22" label="Reset" |
62 | label_selected="Set" left_delta="103" mouse_opaque="true" | 55 | label_selected="Set" left_delta="103" mouse_opaque="true" |
63 | name="reset_cache" scale_image="true" width="100" /> | 56 | name="reset_cache" scale_image="true" width="100" /> |
64 | <check_box bottom="-173" bottom_delta="-35" | 57 | <check_box bottom="-173" bottom_delta="-25" control_name="ConnectionPortEnabled" |
65 | enabled="true" follows="left|top" font="SansSerifSmall" height="16" | 58 | enabled="true" follows="left|top" font="SansSerifSmall" height="16" |
66 | initial_value="false" label="Custom Port Connection" left="12" | 59 | initial_value="false" label="Custom Port Connection" left="12" |
67 | mouse_opaque="true" name="connection_port_enabled" radio_style="false" | 60 | mouse_opaque="true" name="connection_port_enabled" radio_style="false" |
68 | width="256" /> | 61 | width="256" /> |
69 | <spinner bottom="-193" bottom_delta="-20" | 62 | <spinner bottom="-193" bottom_delta="-20" control_name="ConnectionPort" |
70 | decimal_digits="0" enabled="true" follows="left|top" height="16" | 63 | decimal_digits="0" enabled="true" follows="left|top" height="16" |
71 | increment="1" initial_val="13000" label="Port Number:" label_width="75" | 64 | increment="1" initial_val="13000" label="Port Number:" label_width="75" |
72 | left_delta="20" max_val="13050" min_val="13000" mouse_opaque="true" | 65 | left_delta="20" max_val="13050" min_val="13000" mouse_opaque="true" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml new file mode 100644 index 0000000..b9c6fc3 --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml | |||
@@ -0,0 +1,14 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <panel bg_visible="false" border="false" border_visible="false" bottom="1" | ||
3 | enabled="true" follows="right|bottom" height="20" left="0" | ||
4 | name="windlight_controls" width="182"> | ||
5 | <button bottom="-21" follows="left|bottom" font="SansSerif" halign="center" height="20" | ||
6 | label="Editor" left="4" name="Environment" | ||
7 | tool_tip="Click here to adjust world environment" width="80" /> | ||
8 | <flyout_button bottom="-21" follows="left|bottom" height="20" label="Sky" left_delta="82" width="71" | ||
9 | list_position="above" mouse_opaque="true" name="Presets" tool_tip="Windlight presets"> | ||
10 | </flyout_button> | ||
11 | <button bottom="-22" follows="left|bottom" font="SansSerif" halign="center" height="22" toggle="true" | ||
12 | label="" left_delta="72" name="Popup" scale_image="true" control_name="ShowWindlightSettingsPopup" | ||
13 | tool_tip="Click here to adjust draw distance" width="22" /> | ||
14 | </panel> | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml new file mode 100644 index 0000000..8be72fc --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml | |||
@@ -0,0 +1,34 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <panel bg_visible="false" border="false" border_visible="false" bottom="0" | ||
3 | enabled="true" follows="right|bottom" height="20" left="0" mouse_opaque="true" | ||
4 | name="windlight_remote" use_bounding_rect="true" width="182"> | ||
5 | <panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="22" left="0" width="182" /> | ||
6 | <panel bottom="3" filename="panel_windlight_controls.xml" name="panel_windlight_controls" height="20" left="0" width="182" /> | ||
7 | <string name="atmosphere"> | ||
8 | Atmosphere | ||
9 | </string> | ||
10 | <string name="lighting"> | ||
11 | Lighting | ||
12 | </string> | ||
13 | <string name="clouds"> | ||
14 | Clouds | ||
15 | </string> | ||
16 | <string name="advanced_water"> | ||
17 | Advanced Water | ||
18 | </string> | ||
19 | <string name="sunrise"> | ||
20 | Sunrise | ||
21 | </string> | ||
22 | <string name="sunset"> | ||
23 | Midday | ||
24 | </string> | ||
25 | <string name="noon"> | ||
26 | Noon | ||
27 | </string> | ||
28 | <string name="midnight"> | ||
29 | Midnight | ||
30 | </string> | ||
31 | <string name="revert_region"> | ||
32 | Revert to Region Default | ||
33 | </string> | ||
34 | </panel> | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml new file mode 100644 index 0000000..4cb49a3 --- /dev/null +++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml | |||
@@ -0,0 +1,52 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <panel bg_visible="false" border="false" border_visible="false" bottom="0" | ||
3 | follows="right|bottom" height="67" left="0" mouse_opaque="true" | ||
4 | name="windlight_remote" use_bounding_rect="true" width="182"> | ||
5 | <panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="67" left="0" width="182" /> | ||
6 | <slider bottom="-20" can_edit_text="false" control_name="RenderFarClip" | ||
7 | decimal_digits="0" enabled="true" height="18" | ||
8 | increment="8" initial_val="160" label="Draw Distance:" | ||
9 | label_width="78" left="6" max_val="512" min_val="32" mouse_opaque="true" | ||
10 | name="DrawDistance" show_text="true" width="170" /> | ||
11 | <slider bottom_delta="-20" can_edit_text="false" control_name="RenderMaxPartCount" | ||
12 | decimal_digits="0" enabled="true" follows="left|top" height="18" | ||
13 | increment="256" initial_val="4096" | ||
14 | label="Max. Particles:" label_width="78" left_delta="0" | ||
15 | max_val="8192" min_val="0" mouse_opaque="true" name="MaxParticleCount" | ||
16 | show_text="true" width="176" /> | ||
17 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
18 | bottom="-14" drop_shadow_visible="true" enabled="true" follows="left|top" | ||
19 | font="SansSerifSmall" h_pad="0" halign="left" height="12" | ||
20 | left="170" mouse_opaque="true" name="DrawDistanceMeterText2" v_pad="0" | ||
21 | width="8"> | ||
22 | m | ||
23 | </text> | ||
24 | <panel bottom="13" filename="panel_windlight_controls.xml" left="0" width="182" /> | ||
25 | <string name="atmosphere"> | ||
26 | Atmosphere | ||
27 | </string> | ||
28 | <string name="lighting"> | ||
29 | Lighting | ||
30 | </string> | ||
31 | <string name="clouds"> | ||
32 | Clouds | ||
33 | </string> | ||
34 | <string name="advanced_water"> | ||
35 | Advanced Water | ||
36 | </string> | ||
37 | <string name="sunrise"> | ||
38 | Sunrise | ||
39 | </string> | ||
40 | <string name="sunset"> | ||
41 | Midday | ||
42 | </string> | ||
43 | <string name="noon"> | ||
44 | Noon | ||
45 | </string> | ||
46 | <string name="midnight"> | ||
47 | Midnight | ||
48 | </string> | ||
49 | <string name="revert_region"> | ||
50 | Revert to Region Default | ||
51 | </string> | ||
52 | </panel> | ||
diff --git a/linden/indra/newview/skins/default/xui/fr/floater_about.xml b/linden/indra/newview/skins/default/xui/fr/floater_about.xml index b6dd0b1..1287465 100644 --- a/linden/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/fr/floater_about.xml | |||
@@ -1,35 +1,52 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes"?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes"?> |
2 | <floater name="floater_about" title="A propos de Second Life"> | 2 | <floater name="floater_about" title="A propos de Second Life"> |
3 | <text_editor name="credits_editor"> | 3 | <text_editor name="credits_editor"> |
4 | Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl et de nombreuses autres personnes. | 4 | The Imprudence Viewer was rocked hard by: |
5 | 5 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | |
6 | Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar | 6 | http://www.imprudenceviewer.org |
7 | 7 | ||
8 | 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion | 8 | Imprudence is so awesome thanks to contributions from many generous people: |
9 | APR Copyright (C) 2000-2004 The Apache Software Foundation | 9 | |
10 | cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) | 10 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. |
11 | expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. | 11 | |
12 | FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). | 12 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. |
13 | GL Copyright (C) 1999-2004 Brian Paul. | 13 | |
14 | Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. | 14 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. |
15 | jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) | 15 | |
16 | jpeglib Copyright (C) 1991-1998, Thomas G. Lane. | 16 | For a complete list of who did what, read the release notes! |
17 | ogg/vorbis Copyright (C) 2001, Xiphophorus | 17 | |
18 | OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. | 18 | |
19 | SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga | 19 | Second Life Copyright (C) 1999-2009 Linden Research Inc. |
20 | SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 20 | |
21 | xmlrpc-epi Copyright (C) 2000 Epinions, Inc. | 21 | Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les et de nombreuses autres personnes. |
22 | zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler. | 22 | |
23 | google-perftools Copyright (c) 2005, Google Inc. | 23 | Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar |
24 | 24 | ||
25 | Tous droits réservés. Voir licenses.txt pour plus de détails. | 25 | 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion |
26 | 26 | APR Copyright (C) 2000-2004 The Apache Software Foundation | |
27 | Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) | 27 | cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) |
28 | 28 | expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. | |
29 | 29 | FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). | |
30 | Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant | 30 | GL Copyright (C) 1999-2004 Brian Paul. |
31 | </text_editor> | 31 | Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. |
32 | <string name="you_are_at"> | 32 | jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) |
33 | Votre position : [POSITION] | 33 | jpeglib Copyright (C) 1991-1998, Thomas G. Lane. |
34 | </string> | 34 | ogg/vorbis Copyright (C) 2001, Xiphophorus |
35 | </floater> | 35 | OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. |
36 | SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga | ||
37 | SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
38 | xmlrpc-epi Copyright (C) 2000 Epinions, Inc. | ||
39 | zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler. | ||
40 | google-perftools Copyright (c) 2005, Google Inc. | ||
41 | |||
42 | Tous droits réservés. Voir licenses.txt pour plus de détails. | ||
43 | |||
44 | Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) | ||
45 | |||
46 | |||
47 | Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant | ||
48 | </text_editor> | ||
49 | <string name="you_are_at"> | ||
50 | Votre position : [POSITION] | ||
51 | </string> | ||
52 | </floater> | ||
diff --git a/linden/indra/newview/skins/default/xui/ja/floater_about.xml b/linden/indra/newview/skins/default/xui/ja/floater_about.xml index 9306a6c..ce318a5 100644 --- a/linden/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/ja/floater_about.xml | |||
@@ -1,7 +1,24 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater name="floater_about" title="Second Lifeã«ã¤ã„ã¦"> | 2 | <floater name="floater_about" title="Second Lifeã«ã¤ã„ã¦"> |
3 | <text_editor name="credits_editor"> | 3 | <text_editor name="credits_editor"> |
4 | Second Lifeã¯ã€ Philipã€Tessaã€Andrewã€Coryã€Jamesã€Benã€Charã€Charlieã€Colinã€Danã€Danielã€Dougã€Ericã€Hamletã€Haneyã€Eveã€Hunterã€Ianã€Jeffã€Jenniferã€Jimã€Johnã€Leeã€Markã€Peterã€Phoenixã€Richardã€Robinã€Xenonã€Steveã€Tanyaã€Eddieã€Aviã€Frankã€Bruceã€Aaronã€Aliceã€Bobã€Debraã€Eileenã€Helenã€Janetã€Louieã€Leviathaniaã€Stefanã€Rayã€Kevinã€Tomã€Mikebã€MikeTã€Burgessã€Elenaã€Tracyã€Billã€Toddã€Ryanã€Zachã€Sarahã€Novaã€Timã€Stephanieã€Michaelã€Evanã€Nicolasã€Catherineã€Rachelleã€Daveã€Hollyã€Bubã€Kellyã€Magellanã€Ramziã€Donã€Sabinã€Jillã€Rheyaã€Jeskaã€Torleyã€Konaã€Callumã€Charityã€Ventrellaã€Jackã€Vektorã€Irisã€Chrisã€Nicoleã€Mickã€Reubenã€Blueã€Babbageã€Yedwabã€Deanaã€Laurenã€Brentã€Pathfinderã€Chadrickã€Altruimaã€Jesseã€Teenyã€Monroeã€Icculusã€Davidã€Tessã€Lizzieã€Patsyã€Isaacã€Lawrenceã€Cynã€Boã€Giaã€Annetteã€Mariusã€Tboneã€Jonathanã€Karenã€Ginsuã€Satokoã€Yukoã€Makikoã€Thomasã€Harryã€Sethã€Alexeiã€Brianã€Guyã€Runitaiã€Ethanã€Dataã€Corneliusã€Kennyã€Swissã€Zeroã€Natriaã€Wendyã€Stephenã€Teepleã€Thumperã€Lucyã€Deeã€Miaã€Lianaã€Warrenã€Brankaã€Auraã€beezã€Miloã€Hermiaã€Redã€Thraxã€Joeã€Sallyã€Magentaã€Moguraã€Paulã€Joseã€Rejeanã€Henrikã€Lexieã€Amberã€Loganã€Xanã€Noraã€Morpheusã€Donovanã€Leylaã€MichaelFrancisã€Beastã€Cubeã€Buckyã€Joshuaã€Stryfeã€Harmonyã€Teresaã€Claudiaã€Walkerã€Glennã€Fritzã€Fordakã€Juneã€Cleopetraã€Jeanã€Ivyã€Betsyã€Rooseveltã€Spikeã€Kenã€Whichã€Tofuã€Chiyoã€Robã€Zeeã€dustinã€Georgeã€Delã€Matthewã€Catã€Jacquiã€Lightfootã€Adrianã€Violaã€Alfredã€Noelã€Irfanã€Sunilã€Yoolã€Rikaã€Janeã€Xtremeã€Frontierã€a2ã€Neoã€Siobhanã€Yozã€Justinã€Elleã€Qarlã€Benjaminã€Isabelã€Gulliverã€Everettã€Christopherã€Izzyã€Stephanyã€Garryã€Sejongã€Seanã€Tobinã€Iridiumã€Metaã€Anthonyã€Jeremyã€JPã€Jakeã€Mauriceã€Madhaviã€Leopardã€Kyleã€Joonã€Kariã€Bertã€Belindaã€Jonã€Kristiã€Bridieã€Pramodã€KJã€Socratesã€Mariaã€Ivanã€Aricã€Yamasakiã€Adreanneã€Jayã€MitchKã€Cerenã€Cocoã€Durlã€Jennyã€Periapseã€Karticã€Storrsã€Lotteã€Sandyã€Rohnã€Colossusã€Zenã€BigPapiã€Bradã€Pastramiã€Kurzã€Maniã€Neuroã€Jaimeã€MJã€Rowanã€Sgtã€Elvisã€Geckoã€Samuelã€Sardonyxã€Leoã€Bryanã€Nikoã€Softã€Poppyã€Rachelã€Akiã€Angeloã€Banzaiã€Alexaã€Sueã€CeeLoã€Benderã€CGã€Gillianã€Pelleã€Nickã€Echoã€Zaraã€Christineã€Shamiranã€Emmaã€Blakeã€Keikoã€Plexusã€Joppaã€Sidewinderã€Ericaã€Ashleiã€Twilightã€Kristenã€Brettã€Qã€Enusã€Simonã€Bevisã€Kraftã€Kipã€Chandlerã€Ronã€LauraPã€Ramã€KyleJMã€Scouseã€Prosperoã€Melissaã€Martyã€Natã€Hamiltonã€Kendã€Lordanã€Jimmyã€Kosmoã€Seraphã€Greenã€Ekimã€Wiggoã€JTã€Romeã€Dorisã€Mizã€Benocã€Whumpã€Trinityã€Patchã€Kateã€TJã€Baoã€Joohwanã€Christyã€Sofiaã€Matiasã€Cogsworthã€Johanã€Orehã€Cheahã€Angelaã€Brandyã€Mangoã€Lanã€Aleksã€Gloriaã€Heidyã€Mitchellã€Spaceã€Coltonã€Bambersã€Einsteinã€Maggieã€Malbersã€Roseã€Winnieã€Stellaã€Miltonã€Rothmanã€Niallã€Marinã€Allisonã€Katieã€Dawnã€Kattã€Dustyã€Kalpanaã€Judyã€Andreaã€Ambroffã€Infinityã€Gailã€Ricoã€Raymondã€Yiã€Williamã€Christaã€Mã€Teaganã€Scoutã€Mollyã€Danteã€Corrã€Dynamikeã€Usiã€Kayleeã€Vidtutsã€Lilã€Danicaã€Saschaã€Kelvã€Jacobã€Nyaã€Rodneyã€Brandonã€Elsieã€Blondinã€Grantã€Katrinã€Nyxã€Gabrielã€Locklainnã€Claireã€Devinã€Minervaã€Montyã€Austinã€Bradfordã€Siã€Keiraã€Hã€Caitlinã€Ditaã€Makaiã€Jennã€Annã€Meredithã€Clareã€Joyã€Praveenã€Codyã€Edmundã€Rutheã€Sirenaã€Gayathriã€Spiderã€FJã€Davidoffã€Tianã€Jennieã€Louiseã€Oskarã€Landonã€Noelleã€Jarvã€Ingridã€Alã€Sommerã€Docã€Ariaã€Huinã€Grayã€Liliã€Virã€DJã€Yangã€Tã€Simoneã€Maestroã€Scottã€Charleneã€Quixoteã€Amandaã€Susanã€Zedã€Anneã€Enkiduã€Esbeeã€Joroanã€Katelinã€Roxieã€Tayã€Scarletã€Kevinã€Johnnyã€Wolfgangã€Andrenã€Bobã€Howardã€Merovã€Randã€Rayã€Michonã€Newellã€Galenã€Dessieã€Lesã€Michonã€Jenelleã€Geoã€Sizã€Shapiroã€Peteã€Calyleã€Seleneã€Allenã€Phoebeã€Goldinã€Kimmoraã€Dakotaã€Slatonã€Lindquistã€Zoeyã€Hariã€Othelloã€Rohitã€Sheldonã€Petraã€Vialeã€Gordonã€Kayeã€Pinkã€Fernyã€Emersonã€Davyã€Briã€Chanã€Juanã€Robertã€Terrenceã€Nathanã€Carlã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚ | 4 | The Imprudence Viewer was rocked hard by: |
5 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | ||
6 | http://www.imprudenceviewer.org | ||
7 | |||
8 | Imprudence is so awesome thanks to contributions from many generous people: | ||
9 | |||
10 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. | ||
11 | |||
12 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. | ||
13 | |||
14 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. | ||
15 | |||
16 | For a complete list of who did what, read the release notes! | ||
17 | |||
18 | |||
19 | Second Life Copyright (C) 1999-2009 Linden Research Inc. | ||
20 | |||
21 | Second Lifeã¯ã€ Philipã€Tessaã€Andrewã€Coryã€Jamesã€Benã€Charã€Charlieã€Colinã€Danã€Danielã€Dougã€Ericã€Hamletã€Haneyã€Eveã€Hunterã€Ianã€Jeffã€Jenniferã€Jimã€Johnã€Leeã€Markã€Peterã€Phoenixã€Richardã€Robinã€Xenonã€Steveã€Tanyaã€Eddieã€Aviã€Frankã€Bruceã€Aaronã€Aliceã€Bobã€Debraã€Eileenã€Helenã€Janetã€Louieã€Leviathaniaã€Stefanã€Rayã€Kevinã€Tomã€Mikebã€MikeTã€Burgessã€Elenaã€Tracyã€Billã€Toddã€Ryanã€Zachã€Sarahã€Novaã€Timã€Stephanieã€Michaelã€Evanã€Nicolasã€Catherineã€Rachelleã€Daveã€Hollyã€Bubã€Kellyã€Magellanã€Ramziã€Donã€Sabinã€Jillã€Rheyaã€Jeskaã€Torleyã€Konaã€Callumã€Charityã€Ventrellaã€Jackã€Vektorã€Irisã€Chrisã€Nicoleã€Mickã€Reubenã€Blueã€Babbageã€Yedwabã€Deanaã€Laurenã€Brentã€Pathfinderã€Chadrickã€Altruimaã€Jesseã€Teenyã€Monroeã€Icculusã€Davidã€Tessã€Lizzieã€Patsyã€Isaacã€Lawrenceã€Cynã€Boã€Giaã€Annetteã€Mariusã€Tboneã€Jonathanã€Karenã€Ginsuã€Satokoã€Yukoã€Makikoã€Thomasã€Harryã€Sethã€Alexeiã€Brianã€Guyã€Runitaiã€Ethanã€Dataã€Corneliusã€Kennyã€Swissã€Zeroã€Natriaã€Wendyã€Stephenã€Teepleã€Thumperã€Lucyã€Deeã€Miaã€Lianaã€Warrenã€Brankaã€Auraã€beezã€Miloã€Hermiaã€Redã€Thraxã€Joeã€Sallyã€Magentaã€Moguraã€Paulã€Joseã€Rejeanã€Henrikã€Lexieã€Amberã€Loganã€Xanã€Noraã€Morpheusã€Donovanã€Leylaã€MichaelFrancisã€Beastã€Cubeã€Buckyã€Joshuaã€Stryfeã€Harmonyã€Teresaã€Claudiaã€Walkerã€Glennã€Fritzã€Fordakã€Juneã€Cleopetraã€Jeanã€Ivyã€Betsyã€Rooseveltã€Spikeã€Kenã€Whichã€Tofuã€Chiyoã€Robã€Zeeã€dustinã€Georgeã€Delã€Matthewã€Catã€Jacquiã€Lightfootã€Adrianã€Violaã€Alfredã€Noelã€Irfanã€Sunilã€Yoolã€Rikaã€Janeã€Xtremeã€Frontierã€a2ã€Neoã€Siobhanã€Yozã€Justinã€Elleã€Qarlã€Benjaminã€Isabelã€Gulliverã€Everettã€Christopherã€Izzyã€Stephanyã€Garryã€Sejongã€Seanã€Tobinã€Iridiumã€Metaã€Anthonyã€Jeremyã€JPã€Jakeã€Mauriceã€Madhaviã€Leopardã€Kyleã€Joonã€Kariã€Bertã€Belindaã€Jonã€Kristiã€Bridieã€Pramodã€KJã€Socratesã€Mariaã€Ivanã€Aricã€Yamasakiã€Adreanneã€Jayã€MitchKã€Cerenã€Cocoã€Durlã€Jennyã€Periapseã€Karticã€Storrsã€Lotteã€Sandyã€Rohnã€Colossusã€Zenã€BigPapiã€Bradã€Pastramiã€Kurzã€Maniã€Neuroã€Jaimeã€MJã€Rowanã€Sgtã€Elvisã€Geckoã€Samuelã€Sardonyxã€Leoã€Bryanã€Nikoã€Softã€Poppyã€Rachelã€Akiã€Angeloã€Banzaiã€Alexaã€Sueã€CeeLoã€Benderã€CGã€Gillianã€Pelleã€Nickã€Echoã€Zaraã€Christineã€Shamiranã€Emmaã€Blakeã€Keikoã€Plexusã€Joppaã€Sidewinderã€Ericaã€Ashleiã€Twilightã€Kristenã€Brettã€Qã€Enusã€Simonã€Bevisã€Kraftã€Kipã€Chandlerã€Ronã€LauraPã€Ramã€KyleJMã€Scouseã€Prosperoã€Melissaã€Martyã€Natã€Hamiltonã€Kendã€Lordanã€Jimmyã€Kosmoã€Seraphã€Greenã€Ekimã€Wiggoã€JTã€Romeã€Dorisã€Mizã€Benocã€Whumpã€Trinityã€Patchã€Kateã€TJã€Baoã€Joohwanã€Christyã€Sofiaã€Matiasã€Cogsworthã€Johanã€Orehã€Cheahã€Angelaã€Brandyã€Mangoã€Lanã€Aleksã€Gloriaã€Heidyã€Mitchellã€Spaceã€Coltonã€Bambersã€Einsteinã€Maggieã€Malbersã€Roseã€Winnieã€Stellaã€Miltonã€Rothmanã€Niallã€Marinã€Allisonã€Katieã€Dawnã€Kattã€Dustyã€Kalpanaã€Judyã€Andreaã€Ambroffã€Infinityã€Gailã€Ricoã€Raymondã€Yiã€Williamã€Christaã€Mã€Teaganã€Scoutã€Mollyã€Danteã€Corrã€Dynamikeã€Usiã€Kayleeã€Vidtutsã€Lilã€Danicaã€Saschaã€Kelvã€Jacobã€Nyaã€Rodneyã€Brandonã€Elsieã€Blondinã€Grantã€Katrinã€Nyxã€Gabrielã€Locklainnã€Claireã€Devinã€Minervaã€Montyã€Austinã€Bradfordã€Siã€Keiraã€Hã€Caitlinã€Ditaã€Makaiã€Jennã€Annã€Meredithã€Clareã€Joyã€Praveenã€Codyã€Edmundã€Rutheã€Sirenaã€Gayathriã€Spiderã€FJã€Davidoffã€Tianã€Jennieã€Louiseã€Oskarã€Landonã€Noelleã€Jarvã€Ingridã€Alã€Sommerã€Docã€Ariaã€Huinã€Grayã€Liliã€Virã€DJã€Yangã€Tã€Simoneã€Maestroã€Scottã€Charleneã€Quixoteã€Amandaã€Susanã€Zedã€Anneã€Enkiduã€Esbeeã€Joroanã€Katelinã€Roxieã€Tayã€Scarletã€Kevinã€Johnnyã€Wolfgangã€Andrenã€Bobã€Howardã€Merovã€Randã€Rayã€Michonã€Newellã€Galenã€Dessieã€Lesã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚ | ||
5 | 22 | ||
6 | ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã“れã¾ã§ã§æœ€é«˜ã®ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã”å”力をã„ãŸã ã„ãŸä»¥ä¸‹ã®ä½äººã®çš†æ§˜ã«æ·±ã感è¬ã„ãŸã—ã¾ã™ã€‚ able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar | 23 | ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã“れã¾ã§ã§æœ€é«˜ã®ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã”å”力をã„ãŸã ã„ãŸä»¥ä¸‹ã®ä½äººã®çš†æ§˜ã«æ·±ã感è¬ã„ãŸã—ã¾ã™ã€‚ able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar |
7 | 24 | ||
diff --git a/linden/indra/newview/skins/default/xui/ja/floater_choose_group.xml b/linden/indra/newview/skins/default/xui/ja/floater_choose_group.xml index 08c91f1..0e3153c 100644 --- a/linden/indra/newview/skins/default/xui/ja/floater_choose_group.xml +++ b/linden/indra/newview/skins/default/xui/ja/floater_choose_group.xml | |||
@@ -5,4 +5,7 @@ | |||
5 | </text> | 5 | </text> |
6 | <button label="OK" label_selected="OK" name="OK" /> | 6 | <button label="OK" label_selected="OK" name="OK" /> |
7 | <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel" /> | 7 | <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel" /> |
8 | <string name="none"> | ||
9 | グループãªã— | ||
10 | </string> | ||
8 | </floater> | 11 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/ja/panel_groups.xml b/linden/indra/newview/skins/default/xui/ja/panel_groups.xml index 785fd86..adfdcd4 100644 --- a/linden/indra/newview/skins/default/xui/ja/panel_groups.xml +++ b/linden/indra/newview/skins/default/xui/ja/panel_groups.xml | |||
@@ -13,4 +13,7 @@ | |||
13 | <button label="抜ã‘ã‚‹" name="Leave" /> | 13 | <button label="抜ã‘ã‚‹" name="Leave" /> |
14 | <button label="作æˆ..." name="Create" /> | 14 | <button label="作æˆ..." name="Create" /> |
15 | <button label="検索..." name="Search..." /> | 15 | <button label="検索..." name="Search..." /> |
16 | <string name="none"> | ||
17 | グループãªã— | ||
18 | </string> | ||
16 | </panel> | 19 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/ko/floater_about.xml b/linden/indra/newview/skins/default/xui/ko/floater_about.xml index 8d532b7..075e8ea 100644 --- a/linden/indra/newview/skins/default/xui/ko/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/ko/floater_about.xml | |||
@@ -1,7 +1,24 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater name="floater_about" title="세컨드ë¼ì´í”„ ì •ë³´"> | 2 | <floater name="floater_about" title="세컨드ë¼ì´í”„ ì •ë³´"> |
3 | <text_editor name="credits_editor"> | 3 | <text_editor name="credits_editor"> |
4 | 세컨드ë¼ì´í”„ ì œìž‘ìžë“¤: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, ê·¸ ì™¸ì— ë§Žì€ ë¶„ë“¤ì´ ìˆ˜ê³ í•´ 주셨습니다. | 4 | The Imprudence Viewer was rocked hard by: |
5 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | ||
6 | http://www.imprudenceviewer.org | ||
7 | |||
8 | Imprudence is so awesome thanks to contributions from many generous people: | ||
9 | |||
10 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. | ||
11 | |||
12 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. | ||
13 | |||
14 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. | ||
15 | |||
16 | For a complete list of who did what, read the release notes! | ||
17 | |||
18 | |||
19 | Second Life Copyright (C) 1999-2009 Linden Research Inc. | ||
20 | |||
21 | 세컨드ë¼ì´í”„ ì œìž‘ìžë“¤: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, ê·¸ ì™¸ì— ë§Žì€ ë¶„ë“¤ì´ ìˆ˜ê³ í•´ 주셨습니다. | ||
5 | 22 | ||
6 | 현재 ë²„ì „ì´ ìµœìƒì˜ ë²„ì „ì´ ë 수 있ë„ë¡ ë„ì™€ì£¼ì‹ ì—¬ëŸ¬ë¶„ê»˜ ê°ì‚¬ë“œë¦½ë‹ˆë‹¤: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar | 23 | 현재 ë²„ì „ì´ ìµœìƒì˜ ë²„ì „ì´ ë 수 있ë„ë¡ ë„ì™€ì£¼ì‹ ì—¬ëŸ¬ë¶„ê»˜ ê°ì‚¬ë“œë¦½ë‹ˆë‹¤: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar |
7 | 24 | ||
diff --git a/linden/indra/newview/skins/default/xui/ko/floater_choose_group.xml b/linden/indra/newview/skins/default/xui/ko/floater_choose_group.xml index 2cb821a..53bb889 100644 --- a/linden/indra/newview/skins/default/xui/ko/floater_choose_group.xml +++ b/linden/indra/newview/skins/default/xui/ko/floater_choose_group.xml | |||
@@ -5,4 +5,7 @@ | |||
5 | </text> | 5 | </text> |
6 | <button label="확ì¸" label_selected="확ì¸" name="OK" /> | 6 | <button label="확ì¸" label_selected="확ì¸" name="OK" /> |
7 | <button label="취소" label_selected="취소" name="Cancel" /> | 7 | <button label="취소" label_selected="취소" name="Cancel" /> |
8 | <string name="none"> | ||
9 | 그룹 ì—†ìŒ | ||
10 | </string> | ||
8 | </floater> | 11 | </floater> |
diff --git a/linden/indra/newview/skins/default/xui/ko/panel_groups.xml b/linden/indra/newview/skins/default/xui/ko/panel_groups.xml index cdd28a6..8e66006 100644 --- a/linden/indra/newview/skins/default/xui/ko/panel_groups.xml +++ b/linden/indra/newview/skins/default/xui/ko/panel_groups.xml | |||
@@ -13,4 +13,7 @@ | |||
13 | <button label="탈퇴" name="Leave" width="90"/> | 13 | <button label="탈퇴" name="Leave" width="90"/> |
14 | <button label="만들기" name="Create" width="90"/> | 14 | <button label="만들기" name="Create" width="90"/> |
15 | <button label="검색" name="Search..." width="90"/> | 15 | <button label="검색" name="Search..." width="90"/> |
16 | <string name="none"> | ||
17 | 그룹 ì—†ìŒ | ||
18 | </string> | ||
16 | </panel> | 19 | </panel> |
diff --git a/linden/indra/newview/skins/default/xui/zh/floater_about.xml b/linden/indra/newview/skins/default/xui/zh/floater_about.xml index 334e7eb..fbcb953 100644 --- a/linden/indra/newview/skins/default/xui/zh/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/zh/floater_about.xml | |||
@@ -1,7 +1,24 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater name="floater_about" title="关于第二人生"> | 2 | <floater name="floater_about" title="关于第二人生"> |
3 | <text_editor name="credits_editor"> | 3 | <text_editor name="credits_editor"> |
4 | 第二人生的推出应感谢以下人物的贡献: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl ä»¥åŠæ›´å¤šäººã€‚ | 4 | The Imprudence Viewer was rocked hard by: |
5 | Jacek Antonelli, McCabe Maxsted, and Armin Weatherwax. | ||
6 | http://www.imprudenceviewer.org | ||
7 | |||
8 | Imprudence is so awesome thanks to contributions from many generous people: | ||
9 | |||
10 | For their patches and code contributions, we thank Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Asuka Neely, Balp Allen, Carjay McGinnis, Dale Glass, Felix Duesenburg, Henri Beauchamp, Kitty Barnett, Latif Khalifa, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Nicholaz Beresford, Paul Churchill, Peter Lameth, Robin Cornelius, Stephen Zenith, Thomas Shikami, Vadim Bigbear, Zi Ree, and Zwagoth Klaar. | ||
11 | |||
12 | For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. | ||
13 | |||
14 | Thanks also to the developers of the Green Life Emerald Viewer, Hippo Viewer, and Meerkat Viewer for viewer enhancements we have incorporated. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. | ||
15 | |||
16 | For a complete list of who did what, read the release notes! | ||
17 | |||
18 | |||
19 | Second Life Copyright (C) 1999-2009 Linden Research Inc. | ||
20 | |||
21 | 第二人生的推出应感谢以下人物的贡献: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les ä»¥åŠæ›´å¤šäººã€‚ | ||
5 | 22 | ||
6 | 感谢以下居民,他们的帮助ä¿è¯äº†è¿™æ¬¡ç¬¬äºŒäººç”Ÿçš„版本是有å²ä»¥æ¥æœ€å‡ºè‰²çš„: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar | 23 | 感谢以下居民,他们的帮助ä¿è¯äº†è¿™æ¬¡ç¬¬äºŒäººç”Ÿçš„版本是有å²ä»¥æ¥æœ€å‡ºè‰²çš„: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar |
7 | 24 | ||
diff --git a/linden/indra/newview/skins/silver/colors_base.xml b/linden/indra/newview/skins/silver/colors_base.xml index a69f43f..f9bf283 100644 --- a/linden/indra/newview/skins/silver/colors_base.xml +++ b/linden/indra/newview/skins/silver/colors_base.xml | |||
@@ -68,7 +68,8 @@ | |||
68 | <TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255" /> <!-- Text of read-only items embedded in notecards --> | 68 | <TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255" /> <!-- Text of read-only items embedded in notecards --> |
69 | <TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> | 69 | <TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> |
70 | <TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> | 70 | <TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> |
71 | <ScriptBgReadOnlyColor value="180, 180, 180, 255" /> <!-- Not used --> | 71 | <TextLinkColor value="0, 20, 255, 255"/> |
72 | <TextLinkHoverColor value="0, 50, 255, 255"/> | ||
72 | 73 | ||
73 | <!-- LISTBOXES --> | 74 | <!-- LISTBOXES --> |
74 | <ScrollBgReadOnlyColor value="255, 255, 255, 140" /> <!-- Background of read only lists --> | 75 | <ScrollBgReadOnlyColor value="255, 255, 255, 140" /> <!-- Background of read only lists --> |
@@ -81,7 +82,8 @@ | |||
81 | <ScrollHighlightedColor value="145, 180, 220, 128" /> <!-- Hover color --> | 82 | <ScrollHighlightedColor value="145, 180, 220, 128" /> <!-- Hover color --> |
82 | <ScrollbarThumbColor value="120, 160, 200, 255" /> <!-- Scroll bar --> | 83 | <ScrollbarThumbColor value="120, 160, 200, 255" /> <!-- Scroll bar --> |
83 | <ScrollbarTrackColor value="183, 202, 220, 255" /> <!-- Scroll bar background --> | 84 | <ScrollbarTrackColor value="183, 202, 220, 255" /> <!-- Scroll bar background --> |
84 | 85 | <ScrollReadOnlyColor value="180, 180, 180, 255" /> <!-- Color for inactive but not disabled lists --> | |
86 | |||
85 | <!-- MENUS --> | 87 | <!-- MENUS --> |
86 | <MenuBarBgColor value="185, 200, 220, 230" /> <!-- Menu bar background --> | 88 | <MenuBarBgColor value="185, 200, 220, 230" /> <!-- Menu bar background --> |
87 | <MenuBarGodBgColor value="100, 200, 130, 230" /> <!-- Menu bar background with God Mode enabled --> | 89 | <MenuBarGodBgColor value="100, 200, 130, 230" /> <!-- Menu bar background with God Mode enabled --> |
@@ -160,6 +162,9 @@ | |||
160 | <MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> | 162 | <MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> |
161 | <MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> | 163 | <MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> |
162 | <MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> | 164 | <MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> |
165 | <MapSelected value="255, 0, 0, 255" /> <!-- Selected avatars' glyph color --> | ||
166 | <MapImpDev value="90, 45, 101, 255" /> <!-- Imprudence developers glyph color --> | ||
167 | <MapPartner value="214, 40, 107, 255" /> <!-- (unused) Your avatar's partner's glyph color --> | ||
163 | 168 | ||
164 | <!-- MINI-MAP --> | 169 | <!-- MINI-MAP --> |
165 | <NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> | 170 | <NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> |
diff --git a/linden/indra/newview/skins/silver/textures/arrow_left.tga b/linden/indra/newview/skins/silver/textures/arrow_left.tga new file mode 100644 index 0000000..43fbf12 --- /dev/null +++ b/linden/indra/newview/skins/silver/textures/arrow_left.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/silver/textures/arrow_right.tga b/linden/indra/newview/skins/silver/textures/arrow_right.tga new file mode 100644 index 0000000..a92ac9c --- /dev/null +++ b/linden/indra/newview/skins/silver/textures/arrow_right.tga | |||
Binary files differ | |||
diff --git a/linden/indra/newview/skins/silver/xui/en-us/floater_chatterbox.xml b/linden/indra/newview/skins/silver/xui/en-us/floater_chatterbox.xml deleted file mode 100644 index 025a616..0000000 --- a/linden/indra/newview/skins/silver/xui/en-us/floater_chatterbox.xml +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <multi_floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" | ||
3 | height="390" name="floater_chatterbox" | ||
4 | rect_control="ChatterboxRect" title="Communicate" width="392"> | ||
5 | <icon enabled="false" image_name="tabarea.tga" | ||
6 | bg_alpha_color="blue" color="DefaultShadowLight" border="false" | ||
7 | bottom="-389" follows="left|right|bottom" height="17" left="1" scale_image="true" | ||
8 | mouse_opaque="false" name="chatterbox_tab_container" width="391"></icon> | ||
9 | <tab_container bottom="2" follows="left|right|top|bottom" height="370" left="0" | ||
10 | name="chatterbox_tabs" tab_position="bottom" tab_width="80" width="395" /> | ||
11 | </multi_floater> | ||
12 | |||
diff --git a/linden/indra/newview/skins/silver/xui/en-us/floater_script_ed_panel.xml b/linden/indra/newview/skins/silver/xui/en-us/floater_script_ed_panel.xml deleted file mode 100644 index 12ae6dc..0000000 --- a/linden/indra/newview/skins/silver/xui/en-us/floater_script_ed_panel.xml +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <panel bottom="-550" enabled="true" follows="left|top|right|bottom" height="508" | ||
3 | left="0" mouse_opaque="true" name="script panel" width="500"> | ||
4 | <text_editor type="string" length="1" bottom="-393" | ||
5 | embedded_items="false" enabled="true" follows="left|top|right|bottom" | ||
6 | font="Monospace" height="376" ignore_tab="false" left="4" | ||
7 | max_length="65536" mouse_opaque="true" name="Script Editor" width="492" | ||
8 | word_wrap="true" show_line_numbers="true"> | ||
9 | Loading... | ||
10 | </text_editor> | ||
11 | <button bottom="-499" enabled="true" follows="right|bottom" font="SansSerif" | ||
12 | halign="center" height="20" label="Save" label_selected="Save" left="360" | ||
13 | mouse_opaque="true" name="Save_btn" width="128" /> | ||
14 | <scroll_list background_visible="true" bottom="-457" column_padding="5" draw_border="true" | ||
15 | draw_heading="false" draw_stripes="true" enabled="true" | ||
16 | follows="left|right|bottom" height="60" left="4" mouse_opaque="true" | ||
17 | multi_select="false" name="lsl errors" width="492" /> | ||
18 | <combo_box allow_text_entry="false" bottom="-499" enabled="true" follows="left|bottom" | ||
19 | height="20" label="Insert..." left="12" max_chars="20" mouse_opaque="true" | ||
20 | name="Insert..." width="128" /> | ||
21 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
22 | bottom="-473" drop_shadow_visible="true" enabled="true" | ||
23 | follows="left|bottom" font="SansSerifSmall" h_pad="0" halign="left" | ||
24 | height="12" left="12" mouse_opaque="true" name="line_col" v_pad="0" | ||
25 | width="128" /> | ||
26 | <menu_bar bottom="-15" drop_shadow="false" enabled="true" follows="left|top|right" | ||
27 | height="18" left="8" mouse_opaque="false" name="script_menu" opaque="false" | ||
28 | tear_off="false" width="476"> | ||
29 | <menu bottom="0" drop_shadow="true" enabled="true" height="62" | ||
30 | left="0" mouse_opaque="false" name="File" opaque="true" tear_off="false" | ||
31 | width="138"> | ||
32 | <menu_item_call bottom_delta="-30" height="20" label="Save" left="0" mouse_opaque="true" | ||
33 | name="Save" width="138" /> | ||
34 | <menu_item_separator bottom_delta="-38" height="8" left="0" mouse_opaque="true" name="separator" | ||
35 | width="138" /> | ||
36 | <menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0" | ||
37 | mouse_opaque="true" name="Revert All Changes" width="138" /> | ||
38 | </menu> | ||
39 | <menu bottom="665" drop_shadow="true" enabled="true" height="198" | ||
40 | left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false" | ||
41 | width="139"> | ||
42 | <menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0" | ||
43 | mouse_opaque="true" name="Undo" width="139" /> | ||
44 | <menu_item_call bottom_delta="-50" enabled="false" height="20" label="Redo" left="0" | ||
45 | mouse_opaque="true" name="Redo" width="139" /> | ||
46 | <menu_item_separator bottom_delta="-58" enabled="true" height="8" label="-----------" left="0" | ||
47 | mouse_opaque="true" name="separator" width="139" /> | ||
48 | <menu_item_call bottom_delta="-78" enabled="false" height="20" label="Cut" left="0" | ||
49 | mouse_opaque="true" name="Cut" width="139" /> | ||
50 | <menu_item_call bottom_delta="-98" enabled="false" height="20" label="Copy" left="0" | ||
51 | mouse_opaque="true" name="Copy" width="139" /> | ||
52 | <menu_item_call bottom_delta="-118" enabled="false" height="20" label="Paste" left="0" | ||
53 | mouse_opaque="true" name="Paste" width="139" /> | ||
54 | <menu_item_separator bottom_delta="-126" enabled="true" height="8" label="-----------" left="0" | ||
55 | mouse_opaque="true" name="separator2" width="139" /> | ||
56 | <menu_item_call bottom_delta="-146" enabled="true" height="20" label="Select All" left="0" | ||
57 | mouse_opaque="true" name="Select All" width="139" /> | ||
58 | <menu_item_call bottom_delta="-166" enabled="false" height="20" label="Deselect" left="0" | ||
59 | mouse_opaque="true" name="Deselect" width="139" /> | ||
60 | <menu_item_separator bottom_delta="-174" enabled="true" height="8" label="-----------" left="0" | ||
61 | mouse_opaque="true" name="separator3" width="139" /> | ||
62 | <menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..." | ||
63 | left="0" mouse_opaque="true" name="Search / Replace..." width="139" /> | ||
64 | </menu> | ||
65 | <menu bottom="-18" drop_shadow="true" enabled="true" height="34" | ||
66 | left="0" mouse_opaque="false" name="Help" opaque="true" tear_off="false" | ||
67 | width="112"> | ||
68 | <menu_item_call bottom="-30" enabled="true" height="20" label="Help..." left="0" | ||
69 | mouse_opaque="true" name="Help..." width="112" /> | ||
70 | <menu_item_call bottom="-30" enabled="true" height="20" label="LSL Wiki Help..." left="0" | ||
71 | mouse_opaque="true" name="LSL Wiki Help..." width="112" /> | ||
72 | </menu> | ||
73 | </menu_bar> | ||
74 | <string name="loading"> | ||
75 | Loading... | ||
76 | </string> | ||
77 | <string name="can_not_view"> | ||
78 | You are not allowed to view this script. | ||
79 | </string> | ||
80 | <string name="public_objects_can_not_run"> | ||
81 | Public Objects cannot run scripts | ||
82 | </string> | ||
83 | <string name="script_running"> | ||
84 | Running | ||
85 | </string> | ||
86 | </panel> | ||
diff --git a/linden/indra/newview/skins/silver/xui/en-us/floater_script_queue.xml b/linden/indra/newview/skins/silver/xui/en-us/floater_script_queue.xml deleted file mode 100644 index c44457c..0000000 --- a/linden/indra/newview/skins/silver/xui/en-us/floater_script_queue.xml +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <floater bottom="-763" can_close="true" can_drag_on_left="false" can_minimize="true" | ||
3 | can_resize="true" enabled="true" height="400" left="408" min_height="100" | ||
4 | min_width="100" mouse_opaque="true" name="queue" title="Reset Progress" | ||
5 | width="300"> | ||
6 | <button bottom="-392" enabled="true" follows="right|bottom" font="SansSerif" | ||
7 | halign="center" height="24" label="Close" label_selected="Close" left="220" | ||
8 | mouse_opaque="true" name="close" width="64" /> | ||
9 | <scroll_list background_visible="true" bottom="-364" column_padding="5" draw_border="true" | ||
10 | draw_heading="false" draw_stripes="true" enabled="true" | ||
11 | follows="left|top|right|bottom" height="344" left="4" mouse_opaque="true" | ||
12 | multi_select="false" name="queue output" width="292" /> | ||
13 | </floater> | ||
diff --git a/linden/indra/newview/skins/silver/xui/en-us/floater_windlight_options.xml b/linden/indra/newview/skins/silver/xui/en-us/floater_windlight_options.xml index 11859cc..d801251 100644 --- a/linden/indra/newview/skins/silver/xui/en-us/floater_windlight_options.xml +++ b/linden/indra/newview/skins/silver/xui/en-us/floater_windlight_options.xml | |||
@@ -4,29 +4,35 @@ | |||
4 | min_width="400" mouse_opaque="true" name="WindLight floater" | 4 | min_width="400" mouse_opaque="true" name="WindLight floater" |
5 | rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" | 5 | rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" |
6 | width="700"> | 6 | width="700"> |
7 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 7 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
8 | bottom="-50" drop_shadow_visible="true" follows="left|top|right" | 8 | bottom="-50" drop_shadow_visible="true" follows="left|top|right" |
9 | font="SansSerif" h_pad="0" halign="left" height="16" | 9 | font="SansSerif" h_pad="0" halign="left" height="16" |
10 | left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" | 10 | left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" |
11 | width="110"> | 11 | width="110"> |
12 | Sky Presets: | 12 | Sky Presets: |
13 | </text> | 13 | </text> |
14 | <combo_box allow_text_entry="false" bottom="-50" follows="left|top" height="18" | 14 | <combo_box allow_text_entry="false" bottom="-52" follows="left|top" height="18" |
15 | left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" | 15 | left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" |
16 | width="150" /> | 16 | width="150" /> |
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
18 | label="" label_selected="" left_delta="-25" image_overlay="arrow_left.tga" | ||
19 | mouse_opaque="true" name="prev" scale_image="true" width="20" /> | ||
20 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | ||
21 | label="" label_selected="" left_delta="180" image_overlay="arrow_right.tga" | ||
22 | mouse_opaque="true" name="next" scale_image="true" width="20" /> | ||
17 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" | 23 | <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" |
18 | label="New" label_selected="New" left_delta="170" | 24 | label="New" label_selected="New" left_delta="40" |
19 | mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> | 25 | mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> |
20 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 26 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
21 | label="Save" label_selected="Save" left_delta="80" | 27 | label="Save" label_selected="Save" left_delta="70" |
22 | mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> | 28 | mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> |
23 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 29 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
24 | label="Delete" label_selected="Delete" left_delta="80" | 30 | label="Delete" label_selected="Delete" left_delta="70" |
25 | mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> | 31 | mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> |
26 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" | 32 | <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" |
27 | label="Day Cycle Editor" label_selected="Day Cycle Editor" | 33 | label="Day Cycle Editor" label_selected="Day Cycle Editor" |
28 | left_delta="120" mouse_opaque="true" name="WLDayCycleMenuButton" | 34 | left_delta="100" mouse_opaque="true" name="WLDayCycleMenuButton" |
29 | scale_image="true" width="120" /> | 35 | scale_image="true" width="125" /> |
30 | <tab_container bottom="-220" follows="left|top" height="160" left="0" | 36 | <tab_container bottom="-220" follows="left|top" height="160" left="0" |
31 | mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> | 37 | mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> |
32 | <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" | 38 | <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" |
diff --git a/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml deleted file mode 100644 index 62738dc..0000000 --- a/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml +++ /dev/null | |||
@@ -1,430 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | ||
2 | <panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430"> | ||
3 | <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab" | ||
4 | tab_min_width="50" tab_position="top" width="419"> | ||
5 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
6 | label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418"> | ||
7 | <string name="CaptionTextAcctInfo"> | ||
8 | [ACCTTYPE] | ||
9 | [PAYMENTINFO] | ||
10 | [AGEVERIFICATION] | ||
11 | </string> | ||
12 | <string name="AcctTypeResident"> | ||
13 | Resident | ||
14 | </string> | ||
15 | <string name="AcctTypeTrial"> | ||
16 | Trial | ||
17 | </string> | ||
18 | <string name="AcctTypeCharterMember"> | ||
19 | Charter Member | ||
20 | </string> | ||
21 | <string name="AcctTypeEmployee"> | ||
22 | Linden Lab Employee | ||
23 | </string> | ||
24 | <string name="PaymentInfoUsed"> | ||
25 | Payment Info Used | ||
26 | </string> | ||
27 | <string name="PaymentInfoOnFile"> | ||
28 | Payment Info On File | ||
29 | </string> | ||
30 | <string name="NoPaymentInfoOnFile"> | ||
31 | No Payment Info On File | ||
32 | </string> | ||
33 | <string name="AgeVerified"> | ||
34 | Age-verified | ||
35 | </string> | ||
36 | <string name="NotAgeVerified"> | ||
37 | Not Age-verified | ||
38 | </string> | ||
39 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
40 | bottom="-24" drop_shadow_visible="true" follows="left|top" | ||
41 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
42 | mouse_opaque="true" name="Name:" v_pad="0" width="70"> | ||
43 | Name: | ||
44 | </text> | ||
45 | <name_editor bevel_style="in" border_style="line" | ||
46 | border_thickness="1" bottom="-24" enabled="false" follows="left|top" | ||
47 | font="SansSerifSmall" height="16" is_unicode="false" left_delta="75" | ||
48 | max_length="254" mouse_opaque="false" name="name" | ||
49 | width="180" /> | ||
50 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
51 | bottom="-24" drop_shadow_visible="true" follows="left|top" | ||
52 | font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279" | ||
53 | mouse_opaque="true" name="online_yes" v_pad="0" width="121"> | ||
54 | Currently Online | ||
55 | </text> | ||
56 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
57 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | ||
58 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | ||
59 | mouse_opaque="true" name="label" v_pad="0" width="121"> | ||
60 | Born: | ||
61 | </text> | ||
62 | <line_editor bevel_style="in" border_style="line" | ||
63 | border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" | ||
64 | font="SansSerifSmall" height="16" is_unicode="false" left="279" | ||
65 | max_length="254" mouse_opaque="false" name="born" | ||
66 | width="121" /> | ||
67 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
68 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | ||
69 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | ||
70 | mouse_opaque="true" name="label2" v_pad="0" width="121"> | ||
71 | Account: | ||
72 | </text> | ||
73 | <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279" | ||
74 | mouse_opaque="false" name="acct_border" width="121" /> | ||
75 | <text bg_visible="false" border_drop_shadow_visible="false" | ||
76 | border_visible="true" bottom_delta="0" drop_shadow_visible="true" | ||
77 | follows="left|top" font="SansSerifSmall" height="48" left="279" | ||
78 | mouse_opaque="false" name="acct" width="121" /> | ||
79 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
80 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | ||
81 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" | ||
82 | mouse_opaque="true" name="partner_label" | ||
83 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" | ||
84 | v_pad="0" width="130"> | ||
85 | Partner: | ||
86 | </text> | ||
87 | <button bottom_delta="2" follows="left|top" font="SansSerif" halign="center" | ||
88 | height="16" label="i" label_selected="i" left_delta="44" | ||
89 | mouse_opaque="true" name="partner_info" | ||
90 | tool_tip="Click to open partner's profile" width="18" /> | ||
91 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" | ||
92 | height="16" label="?" label_selected="?" left_delta="24" | ||
93 | mouse_opaque="true" name="partner_help" width="18" /> | ||
94 | <line_editor bevel_style="in" border_style="line" | ||
95 | border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" | ||
96 | font="SansSerifSmall" height="16" is_unicode="false" left="279" | ||
97 | max_length="254" mouse_opaque="false" name="partner_edit" | ||
98 | tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" | ||
99 | width="121"> | ||
100 | [FIRST] [LAST] | ||
101 | </line_editor> | ||
102 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
103 | bottom="-44" drop_shadow_visible="true" follows="left|top" | ||
104 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
105 | mouse_opaque="true" name="Photo:" v_pad="0" width="70"> | ||
106 | Photo: | ||
107 | </text> | ||
108 | <texture_picker allow_no_texture="true" bottom="-179" can_apply_immediately="false" | ||
109 | default_image_name="None" follows="left|top" height="151" label="" | ||
110 | left="79" mouse_opaque="true" name="img" | ||
111 | tool_tip="Click to choose a picture" width="180" /> | ||
112 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
113 | bottom="-183" drop_shadow_visible="true" follows="left|top" | ||
114 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
115 | mouse_opaque="true" name="Groups:" v_pad="0" width="70"> | ||
116 | Groups: | ||
117 | </text> | ||
118 | <scroll_list background_visible="true" bottom="-258" column_padding="5" draw_border="true" | ||
119 | follows="left|top" height="90" left="79" mouse_opaque="false" | ||
120 | multi_select="false" name="groups" width="321" /> | ||
121 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
122 | bottom="-280" drop_shadow_visible="true" follows="left|top" | ||
123 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
124 | mouse_opaque="true" name="About:" v_pad="0" width="70"> | ||
125 | About: | ||
126 | </text> | ||
127 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
128 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | ||
129 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | ||
130 | mouse_opaque="true" name="(500 chars)" v_pad="0" width="70"> | ||
131 | (500 chars) | ||
132 | </text> | ||
133 | <text_editor bottom="-375" embedded_items="false" | ||
134 | enabled="true" follows="left|top" font="SansSerifSmall" height="110" | ||
135 | is_unicode="false" left="79" max_length="511" mouse_opaque="true" | ||
136 | name="about" width="321" word_wrap="true" /> | ||
137 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
138 | bottom="-403" drop_shadow_visible="true" follows="left|top" | ||
139 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | ||
140 | mouse_opaque="true" name="Give item:" v_pad="0" width="75"> | ||
141 | Give item: | ||
142 | </text> | ||
143 | <view_border blevel_style="in" border_thickness="0" bottom="-466" follows="left|top" | ||
144 | height="466" left_delta="4" mouse_opaque="false" name="drop_target_rect" | ||
145 | width="409" /> | ||
146 | <view_border blevel_style="in" bottom="-403" follows="left|top" height="16" left_delta="75" | ||
147 | mouse_opaque="false" name="drop_target_rect_vis" width="321" /> | ||
148 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
149 | bottom_delta="0" drop_shadow_visible="true" follows="left|top" | ||
150 | font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0" | ||
151 | mouse_opaque="true" name="Give inventory" | ||
152 | tool_tip="Drop inventory items here to give them to this person." v_pad="2" | ||
153 | width="321"> | ||
154 | Drop inventory item here. | ||
155 | </text> | ||
156 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
157 | initial_value="false" label="Show in search" left="75" mouse_opaque="true" | ||
158 | name="allow_publish" | ||
159 | tool_tip="Publish extra profile information such as description and image in Search." | ||
160 | width="130" /> | ||
161 | <button bottom="-423" follows="left|top" font="SansSerif" halign="center" height="16" | ||
162 | label="?" label_selected="?" left_delta="145" mouse_opaque="true" name="?" | ||
163 | width="20" /> | ||
164 | <button bottom="-428" font="SansSerif" halign="center" height="20" label="Find on Map" | ||
165 | label_selected="Find on Map" left="24" mouse_opaque="true" | ||
166 | name="Find on Map" width="100" /> | ||
167 | <button bottom="-428" font="SansSerif" halign="center" height="20" | ||
168 | label="Offer Teleport..." label_selected="Offer Teleport..." | ||
169 | left_delta="102" mouse_opaque="true" name="Offer Teleport..." width="140" /> | ||
170 | <button bottom="-428" font="SansSerif" halign="center" height="20" | ||
171 | label="Add Friend..." label_selected="Add Friend..." left_delta="142" | ||
172 | mouse_opaque="true" name="Add Friend..." width="130" /> | ||
173 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Pay..." | ||
174 | label_selected="Pay..." left="24" mouse_opaque="true" name="Pay..." | ||
175 | width="100" /> | ||
176 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" | ||
177 | label="Instant Message..." label_selected="Instant Message..." | ||
178 | left_delta="102" mouse_opaque="true" name="Instant Message..." | ||
179 | tool_tip="Instant Message (IM)" width="140" /> | ||
180 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Mute" | ||
181 | label_selected="Mute" left_delta="142" mouse_opaque="true" name="Mute" | ||
182 | width="130" /> | ||
183 | </panel> | ||
184 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
185 | label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418"> | ||
186 | <line_editor bevel_style="in" border_style="line" | ||
187 | border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top" | ||
188 | font="SansSerifSmall" height="16" is_unicode="false" left="10" | ||
189 | max_length="254" mouse_opaque="true" name="url_edit" | ||
190 | width="400" /> | ||
191 | <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center" | ||
192 | height="18" label="Load" label_selected="Load" left="10" | ||
193 | mouse_opaque="true" name="load" enabled="false" | ||
194 | tool_tip="Load this profile page with embedded web browser." width="80" > | ||
195 | <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item> | ||
196 | <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item> | ||
197 | </flyout_button> | ||
198 | <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" | ||
199 | height="18" label="?" label_selected="?" left_delta="85" | ||
200 | mouse_opaque="true" name="web_profile_help" width="18" /> | ||
201 | <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16" | ||
202 | initial_value="false" label="Automatically load web profiles" | ||
203 | left_delta="30" mouse_opaque="true" name="auto_load" | ||
204 | tool_tip="Automatically load ALL profile webpages without asking first." | ||
205 | width="127" /> | ||
206 | <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400" | ||
207 | ignore_ui_scale="false" left="10" name="profile_html" start_url="" | ||
208 | width="400" /> | ||
209 | <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70" | ||
210 | top="25" /> | ||
211 | </panel> | ||
212 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
213 | label="Interests" left="1" mouse_opaque="true" name="Interests" width="418"> | ||
214 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
215 | bottom="-36" drop_shadow_visible="true" follows="left|top" | ||
216 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
217 | mouse_opaque="true" name="I Want To:" v_pad="0" width="70"> | ||
218 | I Want To: | ||
219 | </text> | ||
220 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
221 | initial_value="false" label="Build" left_delta="70" mouse_opaque="true" | ||
222 | name="chk0" width="90" /> | ||
223 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
224 | initial_value="false" label="Explore" left_delta="170" mouse_opaque="true" | ||
225 | name="chk1" width="90" /> | ||
226 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
227 | initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true" | ||
228 | name="chk2" width="57" /> | ||
229 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
230 | initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true" | ||
231 | name="chk6" width="92" /> | ||
232 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
233 | initial_value="false" label="Group" left_delta="-170" mouse_opaque="true" | ||
234 | name="chk3" width="90" /> | ||
235 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
236 | initial_value="false" label="Buy" left_delta="170" mouse_opaque="true" | ||
237 | name="chk4" width="90" /> | ||
238 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
239 | initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true" | ||
240 | name="chk5" width="50" /> | ||
241 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
242 | initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" | ||
243 | name="chk7" width="92" /> | ||
244 | <line_editor bevel_style="in" border_style="line" | ||
245 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" | ||
246 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | ||
247 | max_length="254" mouse_opaque="true" name="want_to_edit" | ||
248 | width="330" /> | ||
249 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
250 | bottom_delta="-26" drop_shadow_visible="true" follows="left|top" | ||
251 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
252 | mouse_opaque="true" name="Skills:" v_pad="0" width="70"> | ||
253 | Skills: | ||
254 | </text> | ||
255 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
256 | initial_value="false" label="Textures" left_delta="70" mouse_opaque="true" | ||
257 | name="schk0" width="90" /> | ||
258 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
259 | initial_value="false" label="Architecture" left_delta="170" | ||
260 | mouse_opaque="true" name="schk1" width="93" /> | ||
261 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
262 | initial_value="false" label="Event Planning" left_delta="0" | ||
263 | mouse_opaque="true" name="schk2" width="105" /> | ||
264 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
265 | initial_value="false" label="Modeling" left_delta="-170" | ||
266 | mouse_opaque="true" name="schk3" width="90" /> | ||
267 | <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" | ||
268 | initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true" | ||
269 | name="schk4" width="90" /> | ||
270 | <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" | ||
271 | initial_value="false" label="Custom Characters" left_delta="170" | ||
272 | mouse_opaque="true" name="schk5" width="127" /> | ||
273 | <line_editor bevel_style="in" border_style="line" | ||
274 | border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" | ||
275 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | ||
276 | max_length="254" mouse_opaque="true" name="skills_edit" | ||
277 | width="330" /> | ||
278 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
279 | bottom_delta="-30" drop_shadow_visible="true" follows="left|top" | ||
280 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
281 | mouse_opaque="true" name="Languages:" v_pad="0" width="70"> | ||
282 | Languages: | ||
283 | </text> | ||
284 | <line_editor bevel_style="in" border_style="line" | ||
285 | border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" | ||
286 | font="SansSerifSmall" height="16" is_unicode="false" left="74" | ||
287 | max_length="254" mouse_opaque="true" name="languages_edit" | ||
288 | width="330" /> | ||
289 | </panel> | ||
290 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
291 | label="Picks" left="1" mouse_opaque="true" name="Picks" width="418"> | ||
292 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
293 | bottom="-20" drop_shadow_visible="true" follows="left|top" | ||
294 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" | ||
295 | mouse_opaque="true" | ||
296 | name="Tell everyone about your favorite places in Second Life." v_pad="0" | ||
297 | width="302"> | ||
298 | Tell everyone about your favorite places in Second Life. | ||
299 | </text> | ||
300 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | ||
301 | height="20" label="New..." label_selected="New..." left="114" | ||
302 | mouse_opaque="true" name="New..." width="75" /> | ||
303 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" | ||
304 | label="Delete..." label_selected="Delete..." left_delta="79" | ||
305 | mouse_opaque="true" name="Delete..." width="75" /> | ||
306 | <tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false" | ||
307 | name="picks tab" tab_position="left" width="412" /> | ||
308 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
309 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" | ||
310 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" | ||
311 | name="loading_text" v_pad="0" width="302"> | ||
312 | Loading... | ||
313 | </text> | ||
314 | </panel> | ||
315 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
316 | label="Classified" left="1" mouse_opaque="true" name="Classified" | ||
317 | width="418"> | ||
318 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
319 | bottom="-20" drop_shadow_visible="true" follows="left|top" | ||
320 | font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" | ||
321 | mouse_opaque="true" | ||
322 | name="Place an ad in Second Life's classified listings." v_pad="0" | ||
323 | width="302"> | ||
324 | Place an ad in Second Life's classified listings. | ||
325 | </text> | ||
326 | <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" | ||
327 | height="20" label="New..." label_selected="New..." left="114" | ||
328 | mouse_opaque="true" name="New..." width="75" /> | ||
329 | <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" | ||
330 | label="Delete..." label_selected="Delete..." left_delta="79" | ||
331 | mouse_opaque="true" name="Delete..." width="75" /> | ||
332 | <tab_container bottom="-443" follows="left|top" height="395" left="4" mouse_opaque="false" | ||
333 | name="classified tab" tab_position="left" width="412" /> | ||
334 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
335 | bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" | ||
336 | h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" | ||
337 | name="loading_text" v_pad="0" width="302"> | ||
338 | Loading... | ||
339 | </text> | ||
340 | </panel> | ||
341 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
342 | label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418"> | ||
343 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
344 | bottom="-36" drop_shadow_visible="true" follows="left|top" | ||
345 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
346 | mouse_opaque="true" name="Photo:" v_pad="0" width="61"> | ||
347 | Photo: | ||
348 | </text> | ||
349 | <texture_picker allow_no_texture="true" bottom="-171" can_apply_immediately="false" | ||
350 | default_image_name="None" follows="left|top" height="151" label="" | ||
351 | left="70" mouse_opaque="true" name="img" | ||
352 | tool_tip="Click to choose a picture" width="135" /> | ||
353 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
354 | bottom="-203" drop_shadow_visible="true" follows="left|top" | ||
355 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" | ||
356 | mouse_opaque="true" name="Info:" v_pad="0" width="61"> | ||
357 | Info: | ||
358 | </text> | ||
359 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
360 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | ||
361 | font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" | ||
362 | mouse_opaque="true" name="(250 chars)" v_pad="0" width="65"> | ||
363 | (250 chars) | ||
364 | </text> | ||
365 | <text_editor bottom="-347" embedded_items="false" | ||
366 | enabled="true" follows="left|top" font="SansSerifSmall" height="160" | ||
367 | is_unicode="false" left="70" max_length="254" mouse_opaque="false" | ||
368 | name="about" width="330" word_wrap="true" /> | ||
369 | </panel> | ||
370 | <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" | ||
371 | label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> | ||
372 | <string name="Loading"> | ||
373 | Loading... | ||
374 | </string> | ||
375 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
376 | bottom="-52" drop_shadow_visible="true" follows="left|top" | ||
377 | font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10" | ||
378 | mouse_opaque="true" name="label" v_pad="0" width="412"> | ||
379 | Use this space to record your notes about this person. Keep track | ||
380 | of trades in progress, joint projects, etc. Only you can see these | ||
381 | notes. This person cannot see them, nor can other people. | ||
382 | </text> | ||
383 | <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top" | ||
384 | font="SansSerif" height="256" is_unicode="false" left="10" | ||
385 | max_length="1023" mouse_opaque="true" name="notes edit" width="400" | ||
386 | word_wrap="false" /> | ||
387 | </panel> | ||
388 | </tab_container> | ||
389 | <button bottom="-483" font="SansSerif" halign="center" height="20" label="OK" | ||
390 | label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" /> | ||
391 | <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel" | ||
392 | label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel" | ||
393 | width="100" /> | ||
394 | <button bottom_delta="132" font="SansSerif" halign="center" height="20" label="Kick" | ||
395 | label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" /> | ||
396 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze" | ||
397 | label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze" | ||
398 | tool_tip="Stop this resident's movement and chat." width="72" /> | ||
399 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" | ||
400 | label="Unfreeze" label_selected="Unfreeze" left="4" mouse_opaque="true" | ||
401 | name="Unfreeze" tool_tip="Thaw resident" width="72" /> | ||
402 | <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="CSR" | ||
403 | label_selected="CSR" left="4" mouse_opaque="true" name="csr_btn" | ||
404 | tool_tip="Open customer service tool for this resident" width="72" /> | ||
405 | <string name="ShowOnMapNonFriend"> | ||
406 | Show location on the map. | ||
407 | Disabled because you have not | ||
408 | formed a friendship with them. | ||
409 | </string> | ||
410 | <string name="ShowOnMapFriendOffline"> | ||
411 | Show location on the map. | ||
412 | Disabled because they are not online. | ||
413 | </string> | ||
414 | <string name="ShowOnMapFriendOnline"> | ||
415 | Show location on the map. | ||
416 | </string> | ||
417 | <string name="TeleportGod"> | ||
418 | Force a teleport to your location. | ||
419 | </string> | ||
420 | <string name="TeleportPrelude"> | ||
421 | Offer a teleport to your location. | ||
422 | Disabled until you leave Orientation Island. | ||
423 | </string> | ||
424 | <string name="TeleportNormal"> | ||
425 | Offer a teleport to your location. | ||
426 | </string> | ||
427 | <string name="Loading"> | ||
428 | Loading... | ||
429 | </string> | ||
430 | </panel> | ||
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py index 158d092..76a176d 100755 --- a/linden/indra/newview/viewer_manifest.py +++ b/linden/indra/newview/viewer_manifest.py | |||
@@ -773,26 +773,28 @@ class LinuxManifest(ViewerManifest): | |||
773 | 773 | ||
774 | self.package_file = installer_name + '.tar.bz2' | 774 | self.package_file = installer_name + '.tar.bz2' |
775 | 775 | ||
776 | if("package" in self.args['actions'] or | 776 | # Disabled for now. It's a waste of time to package every compile. |
777 | "unpacked" in self.args['actions']): | 777 | |
778 | 778 | # if("package" in self.args['actions'] or | |
779 | # temporarily move directory tree so that it has the right | 779 | # "unpacked" in self.args['actions']): |
780 | # name in the tarfile | 780 | # |
781 | self.run_command("mv %(dst)s %(inst)s" % { | 781 | # # temporarily move directory tree so that it has the right |
782 | 'dst': self.get_dst_prefix(), | 782 | # # name in the tarfile |
783 | 'inst': self.build_path_of(installer_name)}) | 783 | # self.run_command("mv %(dst)s %(inst)s" % { |
784 | try: | 784 | # 'dst': self.get_dst_prefix(), |
785 | # --numeric-owner hides the username of the builder for | 785 | # 'inst': self.build_path_of(installer_name)}) |
786 | # security etc. | 786 | # try: |
787 | self.run_command('tar -C %(dir)s --numeric-owner -cjf ' | 787 | # # --numeric-owner hides the username of the builder for |
788 | '%(inst_path)s.tar.bz2 %(inst_name)s' % { | 788 | # # security etc. |
789 | 'dir': self.get_build_prefix(), | 789 | # self.run_command('tar -C %(dir)s --numeric-owner -cjf ' |
790 | 'inst_name': installer_name, | 790 | # '%(inst_path)s.tar.bz2 %(inst_name)s' % { |
791 | 'inst_path':self.build_path_of(installer_name)}) | 791 | # 'dir': self.get_build_prefix(), |
792 | finally: | 792 | # 'inst_name': installer_name, |
793 | self.run_command("mv %(inst)s %(dst)s" % { | 793 | # 'inst_path':self.build_path_of(installer_name)}) |
794 | 'dst': self.get_dst_prefix(), | 794 | # finally: |
795 | 'inst': self.build_path_of(installer_name)}) | 795 | # self.run_command("mv %(inst)s %(dst)s" % { |
796 | # 'dst': self.get_dst_prefix(), | ||
797 | # 'inst': self.build_path_of(installer_name)}) | ||
796 | 798 | ||
797 | 799 | ||
798 | class Linux_i686Manifest(LinuxManifest): | 800 | class Linux_i686Manifest(LinuxManifest): |
@@ -823,14 +825,11 @@ class Linux_i686Manifest(LinuxManifest): | |||
823 | self.path("libELFIO.so") | 825 | self.path("libELFIO.so") |
824 | self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3") | 826 | self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3") |
825 | 827 | ||
826 | self.path("libopenal.so") # symlink | ||
827 | self.path("libopenal.so.1") | 828 | self.path("libopenal.so.1") |
828 | self.path("libalut.so") | 829 | self.path("libalut.so.0") |
829 | 830 | ||
830 | # Gstreamer libs | 831 | # Gstreamer libs |
831 | self.path("libgstbase-0.10.so") # symlink | ||
832 | self.path("libgstbase-0.10.so.0") | 832 | self.path("libgstbase-0.10.so.0") |
833 | self.path("libgstreamer-0.10.so") # symlink | ||
834 | self.path("libgstreamer-0.10.so.0") | 833 | self.path("libgstreamer-0.10.so.0") |
835 | self.path("libgstaudio-0.10.so.0") | 834 | self.path("libgstaudio-0.10.so.0") |
836 | self.path("libgstbase-0.10.so.0") | 835 | self.path("libgstbase-0.10.so.0") |
@@ -847,18 +846,10 @@ class Linux_i686Manifest(LinuxManifest): | |||
847 | self.path("libgstvideo-0.10.so.0") | 846 | self.path("libgstvideo-0.10.so.0") |
848 | 847 | ||
849 | # Gstreamer plugin dependencies | 848 | # Gstreamer plugin dependencies |
850 | self.path("libavcodec.so.52") | ||
851 | self.path("libavformat.so.52") | ||
852 | self.path("libavutil.so.49") | ||
853 | self.path("libxvidcore.so.4") | ||
854 | self.path("libfaac.so.0") | ||
855 | self.path("libfaad.so.1") | ||
856 | self.path("libmp3lame.so.0") | ||
857 | self.path("libogg.so.0") | 849 | self.path("libogg.so.0") |
850 | self.path("libtheora.so.0") | ||
858 | self.path("libvorbis.so.0") | 851 | self.path("libvorbis.so.0") |
859 | self.path("libvorbisenc.so.2") | 852 | self.path("libvorbisenc.so.2") |
860 | self.path("libxml2.so.2") | ||
861 | self.path("libxvidcore.so.4") | ||
862 | 853 | ||
863 | # Gstreamer plugins | 854 | # Gstreamer plugins |
864 | if self.prefix("gstreamer-plugins"): | 855 | if self.prefix("gstreamer-plugins"): |
@@ -873,7 +864,6 @@ class Linux_i686Manifest(LinuxManifest): | |||
873 | self.path("libgstdecodebin2.so") | 864 | self.path("libgstdecodebin2.so") |
874 | self.path("libgstdecodebin.so") | 865 | self.path("libgstdecodebin.so") |
875 | self.path("libgstesd.so") | 866 | self.path("libgstesd.so") |
876 | self.path("libgstffmpegcolorspace.so") | ||
877 | self.path("libgstffmpeg.so") | 867 | self.path("libgstffmpeg.so") |
878 | self.path("libgstgnomevfs.so") | 868 | self.path("libgstgnomevfs.so") |
879 | self.path("libgsticydemux.so") | 869 | self.path("libgsticydemux.so") |
diff --git a/linden/install.xml b/linden/install.xml index c2053d6..964c3ef 100644 --- a/linden/install.xml +++ b/linden/install.xml | |||
@@ -461,16 +461,16 @@ | |||
461 | <key>linux</key> | 461 | <key>linux</key> |
462 | <map> | 462 | <map> |
463 | <key>md5sum</key> | 463 | <key>md5sum</key> |
464 | <string>2f1a9e14f9213c2c9564c1c1cfdd6d47</string> | 464 | <string>674b2a79cef8ddd28f53b28b44dcffe2</string> |
465 | <key>url</key> | 465 | <key>url</key> |
466 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri> | 466 | <uri>http://imprudenceviewer.org/download/libs/glib-2.20.5-linux-20091009.tar.bz2</uri> |
467 | </map> | 467 | </map> |
468 | <key>windows</key> | 468 | <key>windows</key> |
469 | <map> | 469 | <map> |
470 | <key>md5sum</key> | 470 | <key>md5sum</key> |
471 | <string>3d5e29d444dde4815b36082eedfc775a</string> | 471 | <string>b1e0e16472c0e5d3b6291870e3f20b0c</string> |
472 | <key>url</key> | 472 | <key>url</key> |
473 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-windows-20080817.tar.bz2</uri> | 473 | <uri>http://imprudenceviewer.org/download/libs/glib-2.18.4-windows-03162009.tar.bz2</uri> |
474 | </map> | 474 | </map> |
475 | </map> | 475 | </map> |
476 | </map> | 476 | </map> |
@@ -498,9 +498,9 @@ | |||
498 | <key>linux</key> | 498 | <key>linux</key> |
499 | <map> | 499 | <map> |
500 | <key>md5sum</key> | 500 | <key>md5sum</key> |
501 | <string>c829b638b6eef71ca63418cb9aea46a2</string> | 501 | <string>591900261bddbe3d1e579f7e6070081a</string> |
502 | <key>url</key> | 502 | <key>url</key> |
503 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20080613.tar.bz2</uri> | 503 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-0.10.24-linux-20091005.tar.bz2</uri> |
504 | </map> | 504 | </map> |
505 | <key>linux64</key> | 505 | <key>linux64</key> |
506 | <map> | 506 | <map> |
@@ -512,9 +512,9 @@ | |||
512 | <key>windows</key> | 512 | <key>windows</key> |
513 | <map> | 513 | <map> |
514 | <key>md5sum</key> | 514 | <key>md5sum</key> |
515 | <string>f8db21e781735ba5dd84f3043d20e882</string> | 515 | <string>70ffd9d5e1c45a634be1beed70371784</string> |
516 | <key>url</key> | 516 | <key>url</key> |
517 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-0.10.22-windows-04172009.tar.bz2</uri> | 517 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-0.10.22-windows-20090903.tar.bz2</uri> |
518 | </map> | 518 | </map> |
519 | </map> | 519 | </map> |
520 | </map> | 520 | </map> |
@@ -524,21 +524,32 @@ | |||
524 | <string>lgpl</string> | 524 | <string>lgpl</string> |
525 | <key>packages</key> | 525 | <key>packages</key> |
526 | <map> | 526 | <map> |
527 | <key>linux</key> | ||
528 | <map> | ||
529 | <key>md5sum</key> | ||
530 | <string>2cce992f4506fbc11f827aa80eb499f4</string> | ||
531 | <key>url</key> | ||
532 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-plugins-linux-20091008.tar.bz2</uri> | ||
533 | </map> | ||
527 | <key>windows</key> | 534 | <key>windows</key> |
528 | <map> | 535 | <map> |
529 | <key>md5sum</key> | 536 | <key>md5sum</key> |
530 | <string>9693550810903d5bca10e018fccd7994</string> | 537 | <string>77b954b9313459cb7cd6046bf91de296</string> |
531 | <key>url</key> | 538 | <key>url</key> |
532 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-plugins-windows-20090608.tar.bz2</uri> | 539 | <uri>http://imprudenceviewer.org/download/libs/gstreamer-plugins-windows-20090903.tar.bz2</uri> |
533 | </map> | 540 | </map> |
534 | </map> | 541 | </map> |
535 | </map> | 542 | </map> |
536 | <key>gtk-atk-pango-glib</key> | 543 | <key>gtk-etc</key> |
537 | <map> | 544 | <map> |
538 | <key>copyright</key> | 545 | <key>copyright</key> |
539 | <string>Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald</string> | 546 | <string>Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald |
547 | atk: Copyright 2001 Sun Microsystems Inc. | ||
548 | cairo: Copyright © 2002 University of Southern California, Copyright © 2005 Red Hat, Inc. | ||
549 | |||
550 | </string> | ||
540 | <key>description</key> | 551 | <key>description</key> |
541 | <string>Libraries associated with GTK for gui features. atk: interfaces for accessibility; glib: low-level core functionality for using GTK+ and GNOME; pango: layout/rendering of text w/ emphasis on internationalization.</string> | 552 | <string>GTK+ and associated libraries (atk, cairo, pango, pixman)</string> |
542 | <key>license</key> | 553 | <key>license</key> |
543 | <string>lgpl</string> | 554 | <string>lgpl</string> |
544 | <key>packages</key> | 555 | <key>packages</key> |
@@ -546,16 +557,9 @@ | |||
546 | <key>linux</key> | 557 | <key>linux</key> |
547 | <map> | 558 | <map> |
548 | <key>md5sum</key> | 559 | <key>md5sum</key> |
549 | <string>21c16a74f8fc9a62e3ab944a6eb7403d</string> | 560 | <string>143844d33c5075bf30f8af1fd86a6f09</string> |
550 | <key>url</key> | ||
551 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20080616.tar.bz</uri> | ||
552 | </map> | ||
553 | <key>windows</key> | ||
554 | <map> | ||
555 | <key>md5sum</key> | ||
556 | <string>d963750bcd333a108b3697d220c87d09</string> | ||
557 | <key>url</key> | 561 | <key>url</key> |
558 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20080613.tar.bz2</uri> | 562 | <uri>http://imprudenceviewer.org/download/libs/gtk-etc-linux-20091008.tar.bz2</uri> |
559 | </map> | 563 | </map> |
560 | </map> | 564 | </map> |
561 | </map> | 565 | </map> |
@@ -729,9 +733,9 @@ anguage Infrstructure (CLI) international standard</string> | |||
729 | <key>windows</key> | 733 | <key>windows</key> |
730 | <map> | 734 | <map> |
731 | <key>md5sum</key> | 735 | <key>md5sum</key> |
732 | <string>a3975dcdb9a3ba0ca179b673b5e9b55e</string> | 736 | <string>200bdf3c5a5489210fcee965f639a3f9</string> |
733 | <key>url</key> | 737 | <key>url</key> |
734 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-windows-20090306.tar.bz2</uri> | 738 | <uri>http://imprudenceviewer.org/download/libs/libpng-1.2.34-1-windows-04172009.tar.bz2</uri> |
735 | </map> | 739 | </map> |
736 | </map> | 740 | </map> |
737 | </map> | 741 | </map> |
@@ -763,9 +767,9 @@ anguage Infrstructure (CLI) international standard</string> | |||
763 | <key>linux</key> | 767 | <key>linux</key> |
764 | <map> | 768 | <map> |
765 | <key>md5sum</key> | 769 | <key>md5sum</key> |
766 | <string>4b5d2dcfe8a49b73fb69f10aab441092</string> | 770 | <string>cec4328f5808b49836c467831a5f285e</string> |
767 | <key>url</key> | 771 | <key>url</key> |
768 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20080613.tar.bz2</uri> | 772 | <uri>http://imprudenceviewer.org/download/libs/libxml2-2.7.4-r1-linux-20091005.tar.bz2</uri> |
769 | </map> | 773 | </map> |
770 | <key>linux64</key> | 774 | <key>linux64</key> |
771 | <map> | 775 | <map> |
@@ -914,7 +918,7 @@ anguage Infrstructure (CLI) international standard</string> | |||
914 | <key>description</key> | 918 | <key>description</key> |
915 | <string>Ogg: container format Vorbis: audio compression scheme</string> | 919 | <string>Ogg: container format Vorbis: audio compression scheme</string> |
916 | <key>license</key> | 920 | <key>license</key> |
917 | <string>ogg-vorbis</string> | 921 | <string>xiph-bsd</string> |
918 | <key>packages</key> | 922 | <key>packages</key> |
919 | <map> | 923 | <map> |
920 | <key>darwin</key> | 924 | <key>darwin</key> |
@@ -927,9 +931,9 @@ anguage Infrstructure (CLI) international standard</string> | |||
927 | <key>linux</key> | 931 | <key>linux</key> |
928 | <map> | 932 | <map> |
929 | <key>md5sum</key> | 933 | <key>md5sum</key> |
930 | <string>6dc0536329a0aadf76e3054ffd4da61c</string> | 934 | <string>92c614b34fc283588625805076d58e93</string> |
931 | <key>url</key> | 935 | <key>url</key> |
932 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.2.0-linux-20081201.tar.bz2</uri> | 936 | <uri>http://imprudenceviewer.org/download/libs/ogg-vorbis-linux-20091003.tar.bz2</uri> |
933 | </map> | 937 | </map> |
934 | <key>linux64</key> | 938 | <key>linux64</key> |
935 | <map> | 939 | <map> |
@@ -947,79 +951,79 @@ anguage Infrstructure (CLI) international standard</string> | |||
947 | </map> | 951 | </map> |
948 | </map> | 952 | </map> |
949 | </map> | 953 | </map> |
950 | <key>openSSL</key> | 954 | <key>openal</key> |
951 | <map> | 955 | <map> |
956 | <key>copyright</key> | ||
957 | <string>Copyright (C) 2008 by authors.</string> | ||
958 | <key>description</key> | ||
959 | <string>3D Audio library</string> | ||
952 | <key>license</key> | 960 | <key>license</key> |
953 | <string>openSSL</string> | 961 | <string>lgpl</string> |
954 | <key>packages</key> | 962 | <key>packages</key> |
955 | <map> | 963 | <map> |
956 | <key>darwin</key> | 964 | <key>darwin</key> |
957 | <map> | 965 | <map> |
958 | <key>md5sum</key> | 966 | <key>md5sum</key> |
959 | <string>a7b49e0f3eedbd5de117a3524c414b3a</string> | 967 | <string>f30b851e089108978c8218295a405159</string> |
960 | <key>url</key> | 968 | <key>url</key> |
961 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-darwin-20080812.tar.bz2</uri> | 969 | <uri>http://imprudenceviewer.org/download/libs/openal-darwin-20090418.tar.bz2</uri> |
962 | </map> | 970 | </map> |
963 | <key>linux</key> | 971 | <key>linux</key> |
964 | <map> | 972 | <map> |
965 | <key>md5sum</key> | 973 | <key>md5sum</key> |
966 | <string>f219ef07b02e2abb9282345c3a8f2b39</string> | 974 | <string>6f69d70ec18a3c3c2dee81bf6331c784</string> |
967 | <key>url</key> | 975 | <key>url</key> |
968 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-linux-20080812.tar.bz2</uri> | 976 | <uri>http://imprudenceviewer.org/download/libs/openal-linux-20091009.tar.bz2</uri> |
969 | </map> | ||
970 | <key>linux64</key> | ||
971 | <map> | ||
972 | <key>md5sum</key> | ||
973 | <string>00b23f28a2457d9dabbaff0b29ee7323</string> | ||
974 | <key>url</key> | ||
975 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux64-20080909.tar.bz2</uri> | ||
976 | </map> | 977 | </map> |
977 | <key>windows</key> | 978 | <key>windows</key> |
978 | <map> | 979 | <map> |
979 | <key>md5sum</key> | 980 | <key>md5sum</key> |
980 | <string>dd85209081b832e836de6e1538541d89</string> | 981 | <string>7c33758dc0a047c244de03133dd76c2a</string> |
981 | <key>url</key> | 982 | <key>url</key> |
982 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8j-windows-20090129.tar.bz2</uri> | 983 | <uri>http://imprudence.s3.amazonaws.com/extras/openal-soft-1.6.372-windows-01262009.tar.bz2</uri> |
983 | </map> | 984 | </map> |
984 | </map> | 985 | </map> |
985 | </map> | 986 | </map> |
986 | <key>openal-soft</key> | 987 | <key>openSSL</key> |
987 | <map> | 988 | <map> |
988 | <key>copyright</key> | ||
989 | <string>Copyright (C) 2008 by authors.</string> | ||
990 | <key>description</key> | ||
991 | <string>3D Audio library</string> | ||
992 | <key>license</key> | 989 | <key>license</key> |
993 | <string>lgpl</string> | 990 | <string>openSSL</string> |
994 | <key>packages</key> | 991 | <key>packages</key> |
995 | <map> | 992 | <map> |
996 | <key>darwin</key> | 993 | <key>darwin</key> |
997 | <map> | 994 | <map> |
998 | <key>md5sum</key> | 995 | <key>md5sum</key> |
999 | <string>a0757244e3e6688fde2ffeea35cc1f96</string> | 996 | <string>a7b49e0f3eedbd5de117a3524c414b3a</string> |
1000 | <key>url</key> | 997 | <key>url</key> |
1001 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-darwin-20080924.tar.bz2</uri> | 998 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-darwin-20080812.tar.bz2</uri> |
1002 | </map> | 999 | </map> |
1003 | <key>linux</key> | 1000 | <key>linux</key> |
1004 | <map> | 1001 | <map> |
1005 | <key>md5sum</key> | 1002 | <key>md5sum</key> |
1006 | <string>f0d9a8d1318b519cffe6c40c9cac4e21</string> | 1003 | <string>f219ef07b02e2abb9282345c3a8f2b39</string> |
1007 | <key>url</key> | 1004 | <key>url</key> |
1008 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-linux-20081010c-59a71b14-plughw.tar.bz2</uri> | 1005 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-linux-20080812.tar.bz2</uri> |
1006 | </map> | ||
1007 | <key>linux32</key> | ||
1008 | <map> | ||
1009 | <key>md5sum</key> | ||
1010 | <string>1037114c5b7ad906daca2b4820080b5b</string> | ||
1011 | <key>url</key> | ||
1012 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux-i686-gcc-4.1-20080915.tar.bz2</uri> | ||
1009 | </map> | 1013 | </map> |
1010 | <key>linux64</key> | 1014 | <key>linux64</key> |
1011 | <map> | 1015 | <map> |
1012 | <key>md5sum</key> | 1016 | <key>md5sum</key> |
1013 | <string>5ad0a3ab623356c1ad61394ba238f99f</string> | 1017 | <string>00b23f28a2457d9dabbaff0b29ee7323</string> |
1014 | <key>url</key> | 1018 | <key>url</key> |
1015 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-soft-1.6.372-linux64-20081219.tar.bz2</uri> | 1019 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux64-20080909.tar.bz2</uri> |
1016 | </map> | 1020 | </map> |
1017 | <key>windows</key> | 1021 | <key>windows</key> |
1018 | <map> | 1022 | <map> |
1019 | <key>md5sum</key> | 1023 | <key>md5sum</key> |
1020 | <string>a0757244e3e6688fde2ffeea35cc1f96</string> | 1024 | <string>8a75180cae12d268071c090abb031ba5</string> |
1021 | <key>url</key> | 1025 | <key>url</key> |
1022 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-windows-20080924.tar.bz2</uri> | 1026 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-windows-20080613.tar.bz2</uri> |
1023 | </map> | 1027 | </map> |
1024 | </map> | 1028 | </map> |
1025 | </map> | 1029 | </map> |
@@ -1115,6 +1119,25 @@ anguage Infrstructure (CLI) international standard</string> | |||
1115 | </map> | 1119 | </map> |
1116 | </map> | 1120 | </map> |
1117 | </map> | 1121 | </map> |
1122 | <key>theora</key> | ||
1123 | <map> | ||
1124 | <key>copyright</key> | ||
1125 | <string>Copyright (C) 2002-2009 Xiph.org Foundation</string> | ||
1126 | <key>description</key> | ||
1127 | <string>Ogg Theora video format</string> | ||
1128 | <key>license</key> | ||
1129 | <string>xiph-bsd</string> | ||
1130 | <key>packages</key> | ||
1131 | <map> | ||
1132 | <key>linux</key> | ||
1133 | <map> | ||
1134 | <key>md5sum</key> | ||
1135 | <string>a6e6e250efaf3f25db4699d9b5dfec4b</string> | ||
1136 | <key>url</key> | ||
1137 | <uri>http://imprudenceviewer.org/download/libs/theora-linux-20091003.tar.bz2</uri> | ||
1138 | </map> | ||
1139 | </map> | ||
1140 | </map> | ||
1118 | <key>tut</key> | 1141 | <key>tut</key> |
1119 | <map> | 1142 | <map> |
1120 | <key>copyright</key> | 1143 | <key>copyright</key> |
@@ -1258,9 +1281,9 @@ anguage Infrstructure (CLI) international standard</string> | |||
1258 | <key>windows</key> | 1281 | <key>windows</key> |
1259 | <map> | 1282 | <map> |
1260 | <key>md5sum</key> | 1283 | <key>md5sum</key> |
1261 | <string>9ad657cc5146fef77ffa8dd1c069018f</string> | 1284 | <string>0efbf671a0d686bb0141895e91fbfc46</string> |
1262 | <key>url</key> | 1285 | <key>url</key> |
1263 | <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-windows-20080723.tar.bz2</uri> | 1286 | <uri>http://imprudenceviewer.org/download/libs/zlib-1.1.4-windows-20090829.tar.bz2</uri> |
1264 | </map> | 1287 | </map> |
1265 | </map> | 1288 | </map> |
1266 | </map> | 1289 | </map> |
@@ -1408,7 +1431,7 @@ Cass Everitt - cass@r3.nu | |||
1408 | <key>url</key> | 1431 | <key>url</key> |
1409 | <string>http://www.mozilla.org/MPL/MPL-1.1.html</string> | 1432 | <string>http://www.mozilla.org/MPL/MPL-1.1.html</string> |
1410 | </map> | 1433 | </map> |
1411 | <key>ogg-vorbis</key> | 1434 | <key>xiph-bsd</key> |
1412 | <map> | 1435 | <map> |
1413 | <key>url</key> | 1436 | <key>url</key> |
1414 | <string>http://www.xiph.org/licenses/bsd/</string> | 1437 | <string>http://www.xiph.org/licenses/bsd/</string> |
diff --git a/linden/scripts/install.py b/linden/scripts/install.py index 5069918..1db9bb3 100755 --- a/linden/scripts/install.py +++ b/linden/scripts/install.py | |||
@@ -64,7 +64,7 @@ def add_indra_lib_path(): | |||
64 | base_dir = add_indra_lib_path() | 64 | base_dir = add_indra_lib_path() |
65 | 65 | ||
66 | import copy | 66 | import copy |
67 | import md5 | 67 | from hashlib import md5 |
68 | import optparse | 68 | import optparse |
69 | import os | 69 | import os |
70 | import platform | 70 | import platform |
@@ -75,8 +75,6 @@ import tempfile | |||
75 | import urllib2 | 75 | import urllib2 |
76 | import urlparse | 76 | import urlparse |
77 | 77 | ||
78 | from sets import Set as set, ImmutableSet as frozenset | ||
79 | |||
80 | from indra.base import llsd | 78 | from indra.base import llsd |
81 | from indra.util import helpformatter | 79 | from indra.util import helpformatter |
82 | 80 | ||
@@ -106,7 +104,7 @@ class InstallFile(object): | |||
106 | return "ifile{%s:%s}" % (self.pkgname, self.url) | 104 | return "ifile{%s:%s}" % (self.pkgname, self.url) |
107 | 105 | ||
108 | def _is_md5sum_match(self): | 106 | def _is_md5sum_match(self): |
109 | hasher = md5.new(file(self.filename, 'rb').read()) | 107 | hasher = md5(file(self.filename, 'rb').read()) |
110 | if hasher.hexdigest() == self.md5sum: | 108 | if hasher.hexdigest() == self.md5sum: |
111 | return True | 109 | return True |
112 | return False | 110 | return False |