aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
Diffstat (limited to 'linden')
-rw-r--r--linden/doc/contributions.txt1
-rw-r--r--linden/etc/message.xml12
-rw-r--r--linden/indra/lib/python/indra/base/llsd.py142
-rw-r--r--linden/indra/lib/python/indra/util/fastest_elementtree.py31
-rw-r--r--linden/indra/llcommon/indra_constants.h1
-rw-r--r--linden/indra/llcommon/llkeythrottle.h2
-rw-r--r--linden/indra/llcommon/llversionviewer.h2
-rw-r--r--linden/indra/llinventory/llinventory.cpp43
-rw-r--r--linden/indra/llinventory/llsaleinfo.cpp11
-rw-r--r--linden/indra/llmath/CMakeLists.txt4
-rw-r--r--linden/indra/llmath/llcalc.cpp155
-rw-r--r--linden/indra/llmath/llcalc.h85
-rw-r--r--linden/indra/llmath/llcalcparser.cpp45
-rw-r--r--linden/indra/llmath/llcalcparser.h155
-rw-r--r--linden/indra/llmessage/lliosocket.cpp3
-rw-r--r--linden/indra/llmessage/llpumpio.cpp18
-rw-r--r--linden/indra/llmessage/llpumpio.h9
-rw-r--r--linden/indra/llmessage/llurlrequest.cpp23
-rw-r--r--linden/indra/llui/lllineeditor.cpp33
-rw-r--r--linden/indra/llui/lllineeditor.h4
-rw-r--r--linden/indra/llui/llspinctrl.cpp17
-rw-r--r--linden/indra/newview/app_settings/settings.xml24
-rw-r--r--linden/indra/newview/llappviewer.cpp5
-rw-r--r--linden/indra/newview/llfloatersnapshot.cpp47
-rw-r--r--linden/indra/newview/llfloaterworldmap.cpp2
-rw-r--r--linden/indra/newview/llinventorymodel.cpp533
-rw-r--r--linden/indra/newview/llinventorymodel.h38
-rw-r--r--linden/indra/newview/llmaniptranslate.h2
-rw-r--r--linden/indra/newview/llnetmap.cpp19
-rw-r--r--linden/indra/newview/llpanelface.cpp31
-rw-r--r--linden/indra/newview/llpanelface.h1
-rw-r--r--linden/indra/newview/llpanelgeneral.cpp2
-rw-r--r--linden/indra/newview/llpanelgeneral.h1
-rw-r--r--linden/indra/newview/llpanelobject.cpp61
-rw-r--r--linden/indra/newview/llpanelobject.h1
-rw-r--r--linden/indra/newview/llstartup.cpp3
-rw-r--r--linden/indra/newview/llviewerinventory.cpp41
-rw-r--r--linden/indra/newview/llviewermenu.cpp163
-rw-r--r--linden/indra/newview/llviewerregion.cpp6
-rw-r--r--linden/indra/newview/llviewerwindow.cpp4
-rw-r--r--linden/indra/newview/llwindebug.cpp4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/alerts.xml67
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml48
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml54
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_land.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml92
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml138
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml45
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml11
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/strings.xml363
-rw-r--r--linden/indra/newview/skins/default/xui/fr/floater_about_land.xml1016
-rw-r--r--linden/indra/newview/skins/silver/colors_base.xml14
-rw-r--r--linden/install.xml7
56 files changed, 2301 insertions, 1354 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 48c1429..ac24d99 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -209,6 +209,7 @@ Matthew Dowd
209McCabe Maxsted 209McCabe Maxsted
210 VWR-1318 210 VWR-1318
211 VWR-7893 211 VWR-7893
212 VWR-8689
212Michelle2 Zenovka 213Michelle2 Zenovka
213 VWR-2652 214 VWR-2652
214 VWR-2834 215 VWR-2834
diff --git a/linden/etc/message.xml b/linden/etc/message.xml
index 80dc560..0695d05 100644
--- a/linden/etc/message.xml
+++ b/linden/etc/message.xml
@@ -564,6 +564,18 @@
564 <boolean>true</boolean> 564 <boolean>true</boolean>
565 565
566 <key>FetchInventoryDescendents</key> 566 <key>FetchInventoryDescendents</key>
567 <boolean>false</boolean>
568
569 <key>WebFetchInventoryDescendents</key>
570 <boolean>true</boolean>
571
572 <key>FetchInventory</key>
573 <boolean>true</boolean>
574
575 <key>FetchLibDescendents</key>
576 <boolean>true</boolean>
577
578 <key>FetchLib</key>
567 <boolean>true</boolean> 579 <boolean>true</boolean>
568 </map> 580 </map>
569 581
diff --git a/linden/indra/lib/python/indra/base/llsd.py b/linden/indra/lib/python/indra/base/llsd.py
index 995ace7..521b79c 100644
--- a/linden/indra/lib/python/indra/base/llsd.py
+++ b/linden/indra/lib/python/indra/base/llsd.py
@@ -33,19 +33,26 @@ import time
33import types 33import types
34import re 34import re
35 35
36from indra.util.fastest_elementtree import fromstring 36from indra.util.fastest_elementtree import ElementTreeError, fromstring
37from indra.base import lluuid 37from indra.base import lluuid
38 38
39int_regex = re.compile("[-+]?\d+") 39try:
40real_regex = re.compile("[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?") 40 import cllsd
41alpha_regex = re.compile("[a-zA-Z]+") 41except ImportError:
42date_regex = re.compile("(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})T(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})(?P<second_float>\.\d{2})?Z") 42 cllsd = None
43
44int_regex = re.compile(r"[-+]?\d+")
45real_regex = re.compile(r"[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?")
46alpha_regex = re.compile(r"[a-zA-Z]+")
47date_regex = re.compile(r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})T"
48 r"(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})"
49 r"(?P<second_float>(\.\d+)?)Z")
43#date: d"YYYY-MM-DDTHH:MM:SS.FFZ" 50#date: d"YYYY-MM-DDTHH:MM:SS.FFZ"
44 51
45class LLSDParseError(Exception): 52class LLSDParseError(Exception):
46 pass 53 pass
47 54
48class LLSDSerializationError(Exception): 55class LLSDSerializationError(TypeError):
49 pass 56 pass
50 57
51 58
@@ -64,10 +71,10 @@ def format_datestr(v):
64 """ Formats a datetime object into the string format shared by xml and notation serializations.""" 71 """ Formats a datetime object into the string format shared by xml and notation serializations."""
65 second_str = "" 72 second_str = ""
66 if v.microsecond > 0: 73 if v.microsecond > 0:
67 seconds = v.second + float(v.microsecond) / 1000000 74 seconds = v.second + float(v.microsecond) / 1e6
68 second_str = "%05.2f" % seconds 75 second_str = "%05.2f" % seconds
69 else: 76 else:
70 second_str = "%d" % v.second 77 second_str = "%02d" % v.second
71 return '%s%sZ' % (v.strftime('%Y-%m-%dT%H:%M:'), second_str) 78 return '%s%sZ' % (v.strftime('%Y-%m-%dT%H:%M:'), second_str)
72 79
73 80
@@ -89,7 +96,7 @@ def parse_datestr(datestr):
89 seconds_float = match.group('second_float') 96 seconds_float = match.group('second_float')
90 microsecond = 0 97 microsecond = 0
91 if seconds_float: 98 if seconds_float:
92 microsecond = int(seconds_float[1:]) * 10000 99 microsecond = int(float('0' + seconds_float) * 1e6)
93 return datetime.datetime(year, month, day, hour, minute, second, microsecond) 100 return datetime.datetime(year, month, day, hour, minute, second, microsecond)
94 101
95 102
@@ -116,7 +123,7 @@ def uuid_to_python(node):
116 return lluuid.UUID(node.text) 123 return lluuid.UUID(node.text)
117 124
118def str_to_python(node): 125def str_to_python(node):
119 return unicode(node.text or '').encode('utf8', 'replace') 126 return node.text or ''
120 127
121def bin_to_python(node): 128def bin_to_python(node):
122 return binary(base64.decodestring(node.text or '')) 129 return binary(base64.decodestring(node.text or ''))
@@ -189,9 +196,13 @@ class LLSDXMLFormatter(object):
189 if(contents is None or contents is ''): 196 if(contents is None or contents is ''):
190 return "<%s />" % (name,) 197 return "<%s />" % (name,)
191 else: 198 else:
199 if type(contents) is unicode:
200 contents = contents.encode('utf-8')
192 return "<%s>%s</%s>" % (name, contents, name) 201 return "<%s>%s</%s>" % (name, contents, name)
193 202
194 def xml_esc(self, v): 203 def xml_esc(self, v):
204 if type(v) is unicode:
205 v = v.encode('utf-8')
195 return v.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;') 206 return v.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;')
196 207
197 def LLSD(self, v): 208 def LLSD(self, v):
@@ -237,9 +248,14 @@ class LLSDXMLFormatter(object):
237 raise LLSDSerializationError("Cannot serialize unknown type: %s (%s)" % ( 248 raise LLSDSerializationError("Cannot serialize unknown type: %s (%s)" % (
238 t, something)) 249 t, something))
239 250
240 def format(self, something): 251 def _format(self, something):
241 return '<?xml version="1.0" ?>' + self.elt("llsd", self.generate(something)) 252 return '<?xml version="1.0" ?>' + self.elt("llsd", self.generate(something))
242 253
254 def format(self, something):
255 if cllsd:
256 return cllsd.llsd_to_xml(something)
257 return self._format(something)
258
243_g_xml_formatter = None 259_g_xml_formatter = None
244def format_xml(something): 260def format_xml(something):
245 global _g_xml_formatter 261 global _g_xml_formatter
@@ -356,8 +372,10 @@ class LLSDNotationFormatter(object):
356 def UUID(self, v): 372 def UUID(self, v):
357 return "u%s" % v 373 return "u%s" % v
358 def BINARY(self, v): 374 def BINARY(self, v):
359 raise LLSDSerializationError("binary notation not yet supported") 375 return 'b64"' + base64.encodestring(v) + '"'
360 def STRING(self, v): 376 def STRING(self, v):
377 if isinstance(v, unicode):
378 v = v.encode('utf-8')
361 return "'%s'" % v.replace("\\", "\\\\").replace("'", "\\'") 379 return "'%s'" % v.replace("\\", "\\\\").replace("'", "\\'")
362 def URI(self, v): 380 def URI(self, v):
363 return 'l"%s"' % str(v).replace("\\", "\\\\").replace('"', '\\"') 381 return 'l"%s"' % str(v).replace("\\", "\\\\").replace('"', '\\"')
@@ -366,16 +384,24 @@ class LLSDNotationFormatter(object):
366 def ARRAY(self, v): 384 def ARRAY(self, v):
367 return "[%s]" % ','.join([self.generate(item) for item in v]) 385 return "[%s]" % ','.join([self.generate(item) for item in v])
368 def MAP(self, v): 386 def MAP(self, v):
369 return "{%s}" % ','.join(["'%s':%s" % (key.replace("\\", "\\\\").replace("'", "\\'"), self.generate(value)) 387 def fix(key):
388 if isinstance(key, unicode):
389 return key.encode('utf-8')
390 return key
391 return "{%s}" % ','.join(["'%s':%s" % (fix(key).replace("\\", "\\\\").replace("'", "\\'"), self.generate(value))
370 for key, value in v.items()]) 392 for key, value in v.items()])
371 393
372 def generate(self, something): 394 def generate(self, something):
373 t = type(something) 395 t = type(something)
374 if self.type_map.has_key(t): 396 handler = self.type_map.get(t)
375 return self.type_map[t](something) 397 if handler:
398 return handler(something)
376 else: 399 else:
377 raise LLSDSerializationError("Cannot serialize unknown type: %s (%s)" % ( 400 try:
378 t, something)) 401 return self.ARRAY(iter(something))
402 except TypeError:
403 raise LLSDSerializationError(
404 "Cannot serialize unknown type: %s (%s)" % (t, something))
379 405
380 def format(self, something): 406 def format(self, something):
381 return self.generate(something) 407 return self.generate(something)
@@ -479,7 +505,6 @@ class LLSDBinaryParser(object):
479 raise LLSDParseError("invalid map key at byte %d." % ( 505 raise LLSDParseError("invalid map key at byte %d." % (
480 self._index - 1,)) 506 self._index - 1,))
481 value = self._parse() 507 value = self._parse()
482 #print "kv:",key,value
483 rv[key] = value 508 rv[key] = value
484 count += 1 509 count += 1
485 cc = self._buffer[self._index] 510 cc = self._buffer[self._index]
@@ -636,11 +661,23 @@ class LLSDNotationParser(object):
636 # 'd' = date in seconds since epoch 661 # 'd' = date in seconds since epoch
637 return self._parse_date() 662 return self._parse_date()
638 elif cc == 'b': 663 elif cc == 'b':
639 raise LLSDParseError("binary notation not yet supported") 664 return self._parse_binary()
640 else: 665 else:
641 raise LLSDParseError("invalid token at index %d: %d" % ( 666 raise LLSDParseError("invalid token at index %d: %d" % (
642 self._index - 1, ord(cc))) 667 self._index - 1, ord(cc)))
643 668
669 def _parse_binary(self):
670 i = self._index
671 if self._buffer[i:i+2] == '64':
672 q = self._buffer[i+2]
673 e = self._buffer.find(q, i+3)
674 try:
675 return base64.decodestring(self._buffer[i+3:e])
676 finally:
677 self._index = e + 1
678 else:
679 raise LLSDParseError('random horrible binary format not supported')
680
644 def _parse_map(self): 681 def _parse_map(self):
645 """ map: { string:object, string:object } """ 682 """ map: { string:object, string:object } """
646 rv = {} 683 rv = {}
@@ -653,30 +690,23 @@ class LLSDNotationParser(object):
653 if cc in ("'", '"', 's'): 690 if cc in ("'", '"', 's'):
654 key = self._parse_string(cc) 691 key = self._parse_string(cc)
655 found_key = True 692 found_key = True
656 #print "key:",key
657 elif cc.isspace() or cc == ',': 693 elif cc.isspace() or cc == ',':
658 cc = self._buffer[self._index] 694 cc = self._buffer[self._index]
659 self._index += 1 695 self._index += 1
660 else: 696 else:
661 raise LLSDParseError("invalid map key at byte %d." % ( 697 raise LLSDParseError("invalid map key at byte %d." % (
662 self._index - 1,)) 698 self._index - 1,))
699 elif cc.isspace() or cc == ':':
700 cc = self._buffer[self._index]
701 self._index += 1
702 continue
663 else: 703 else:
664 if cc.isspace() or cc == ':':
665 #print "skipping whitespace '%s'" % cc
666 cc = self._buffer[self._index]
667 self._index += 1
668 continue
669 self._index += 1 704 self._index += 1
670 value = self._parse() 705 value = self._parse()
671 #print "kv:",key,value
672 rv[key] = value 706 rv[key] = value
673 found_key = False 707 found_key = False
674 cc = self._buffer[self._index] 708 cc = self._buffer[self._index]
675 self._index += 1 709 self._index += 1
676 #if cc == '}':
677 # break
678 #cc = self._buffer[self._index]
679 #self._index += 1
680 710
681 return rv 711 return rv
682 712
@@ -840,6 +870,14 @@ def format_binary(something):
840 return '<?llsd/binary?>\n' + _format_binary_recurse(something) 870 return '<?llsd/binary?>\n' + _format_binary_recurse(something)
841 871
842def _format_binary_recurse(something): 872def _format_binary_recurse(something):
873 def _format_list(something):
874 array_builder = []
875 array_builder.append('[' + struct.pack('!i', len(something)))
876 for item in something:
877 array_builder.append(_format_binary_recurse(item))
878 array_builder.append(']')
879 return ''.join(array_builder)
880
843 if something is None: 881 if something is None:
844 return '!' 882 return '!'
845 elif isinstance(something, LLSD): 883 elif isinstance(something, LLSD):
@@ -857,7 +895,10 @@ def _format_binary_recurse(something):
857 return 'u' + something._bits 895 return 'u' + something._bits
858 elif isinstance(something, binary): 896 elif isinstance(something, binary):
859 return 'b' + struct.pack('!i', len(something)) + something 897 return 'b' + struct.pack('!i', len(something)) + something
860 elif isinstance(something, (str, unicode)): 898 elif isinstance(something, str):
899 return 's' + struct.pack('!i', len(something)) + something
900 elif isinstance(something, unicode):
901 something = something.encode('utf-8')
861 return 's' + struct.pack('!i', len(something)) + something 902 return 's' + struct.pack('!i', len(something)) + something
862 elif isinstance(something, uri): 903 elif isinstance(something, uri):
863 return 'l' + struct.pack('!i', len(something)) + something 904 return 'l' + struct.pack('!i', len(something)) + something
@@ -865,35 +906,50 @@ def _format_binary_recurse(something):
865 seconds_since_epoch = time.mktime(something.timetuple()) 906 seconds_since_epoch = time.mktime(something.timetuple())
866 return 'd' + struct.pack('!d', seconds_since_epoch) 907 return 'd' + struct.pack('!d', seconds_since_epoch)
867 elif isinstance(something, (list, tuple)): 908 elif isinstance(something, (list, tuple)):
868 array_builder = [] 909 return _format_list(something)
869 array_builder.append('[' + struct.pack('!i', len(something)))
870 for item in something:
871 array_builder.append(_format_binary_recurse(item))
872 array_builder.append(']')
873 return ''.join(array_builder)
874 elif isinstance(something, dict): 910 elif isinstance(something, dict):
875 map_builder = [] 911 map_builder = []
876 map_builder.append('{' + struct.pack('!i', len(something))) 912 map_builder.append('{' + struct.pack('!i', len(something)))
877 for key, value in something.items(): 913 for key, value in something.items():
914 if isinstance(key, unicode):
915 key = key.encode('utf-8')
878 map_builder.append('k' + struct.pack('!i', len(key)) + key) 916 map_builder.append('k' + struct.pack('!i', len(key)) + key)
879 map_builder.append(_format_binary_recurse(value)) 917 map_builder.append(_format_binary_recurse(value))
880 map_builder.append('}') 918 map_builder.append('}')
881 return ''.join(map_builder) 919 return ''.join(map_builder)
882 else: 920 else:
883 raise LLSDSerializationError("Cannot serialize unknown type: %s (%s)" % ( 921 try:
884 type(something), something)) 922 return _format_list(list(something))
923 except TypeError:
924 raise LLSDSerializationError(
925 "Cannot serialize unknown type: %s (%s)" %
926 (type(something), something))
927
928
929def parse_binary(something):
930 header = '<?llsd/binary?>\n'
931 if not something.startswith(header):
932 raise LLSDParseError('LLSD binary encoding header not found')
933 return LLSDBinaryParser().parse(something[len(header):])
934
935def parse_xml(something):
936 try:
937 return to_python(fromstring(something)[0])
938 except ElementTreeError, err:
939 raise LLSDParseError(*err.args)
885 940
941def parse_notation(something):
942 return LLSDNotationParser().parse(something)
886 943
887def parse(something): 944def parse(something):
888 try: 945 try:
889 if something.startswith('<?llsd/binary?>'): 946 if something.startswith('<?llsd/binary?>'):
890 just_binary = something.split('\n', 1)[1] 947 return parse_binary(something)
891 return LLSDBinaryParser().parse(just_binary)
892 # This should be better. 948 # This should be better.
893 elif something.startswith('<'): 949 elif something.startswith('<'):
894 return to_python(fromstring(something)[0]) 950 return parse_xml(something)
895 else: 951 else:
896 return LLSDNotationParser().parse(something) 952 return parse_notation(something)
897 except KeyError, e: 953 except KeyError, e:
898 raise Exception('LLSD could not be parsed: %s' % (e,)) 954 raise Exception('LLSD could not be parsed: %s' % (e,))
899 955
diff --git a/linden/indra/lib/python/indra/util/fastest_elementtree.py b/linden/indra/lib/python/indra/util/fastest_elementtree.py
index 64aed09..2470143 100644
--- a/linden/indra/lib/python/indra/util/fastest_elementtree.py
+++ b/linden/indra/lib/python/indra/util/fastest_elementtree.py
@@ -2,9 +2,9 @@
2@file fastest_elementtree.py 2@file fastest_elementtree.py
3@brief Concealing some gnarly import logic in here. This should export the interface of elementtree. 3@brief Concealing some gnarly import logic in here. This should export the interface of elementtree.
4 4
5$LicenseInfo:firstyear=2006&license=mit$ 5$LicenseInfo:firstyear=2008&license=mit$
6 6
7Copyright (c) 2006-2008, Linden Research, Inc. 7Copyright (c) 2008, Linden Research, Inc.
8 8
9Permission is hereby granted, free of charge, to any person obtaining a copy 9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal 10of this software and associated documentation files (the "Software"), to deal
@@ -26,27 +26,40 @@ THE SOFTWARE.
26$/LicenseInfo$ 26$/LicenseInfo$
27""" 27"""
28 28
29# Using celementree might cause some unforeseen problems so here's a 29# The parsing exception raised by the underlying library depends
30# on the ElementTree implementation we're using, so we provide an
31# alias here.
32#
33# Use ElementTreeError as the exception type for catching parsing
34# errors.
35
36
37# Using cElementTree might cause some unforeseen problems, so here's a
30# convenient off switch. 38# convenient off switch.
31 39
32# *NOTE: turned off cause of problems. :-( *TODO: debug 40use_celementree = True
33use_celementree = False
34 41
35try: 42try:
36 if not use_celementree: 43 if not use_celementree:
37 raise ImportError() 44 raise ImportError()
38 from cElementTree import * ## This does not work under Windows 45 # Python 2.3 and 2.4.
46 from cElementTree import *
47 ElementTreeError = SyntaxError
39except ImportError: 48except ImportError:
40 try: 49 try:
41 if not use_celementree: 50 if not use_celementree:
42 raise ImportError() 51 raise ImportError()
43 ## This is the name of cElementTree under python 2.5 52 # Python 2.5 and above.
44 from xml.etree.cElementTree import * 53 from xml.etree.cElementTree import *
54 ElementTreeError = SyntaxError
45 except ImportError: 55 except ImportError:
56 # Pure Python code.
46 try: 57 try:
47 ## This is the old name of elementtree, for use with 2.3 58 # Python 2.3 and 2.4.
48 from elementtree.ElementTree import * 59 from elementtree.ElementTree import *
49 except ImportError: 60 except ImportError:
50 ## This is the name of elementtree under python 2.5 61 # Python 2.5 and above.
51 from xml.etree.ElementTree import * 62 from xml.etree.ElementTree import *
52 63
64 # The pure Python ElementTree module uses Expat for parsing.
65 from xml.parsers.expat import ExpatError as ElementTreeError
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index 1c48a5c..fcb2aaf 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -251,6 +251,7 @@ const U8 GOD_NOT = 0;
251const LLUUID LL_UUID_ALL_AGENTS("44e87126-e794-4ded-05b3-7c42da3d5cdb"); 251const LLUUID LL_UUID_ALL_AGENTS("44e87126-e794-4ded-05b3-7c42da3d5cdb");
252 252
253// Governor Linden's agent id. 253// Governor Linden's agent id.
254const LLUUID ALEXANDRIA_LINDEN_ID("ba2a564a-f0f1-4b82-9c61-b7520bfcd09f");
254const LLUUID GOVERNOR_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1"); 255const LLUUID GOVERNOR_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1");
255const LLUUID REALESTATE_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1"); 256const LLUUID REALESTATE_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1");
256// Maintenance's group id. 257// Maintenance's group id.
diff --git a/linden/indra/llcommon/llkeythrottle.h b/linden/indra/llcommon/llkeythrottle.h
index eb1519a..25d0fe0 100644
--- a/linden/indra/llcommon/llkeythrottle.h
+++ b/linden/indra/llcommon/llkeythrottle.h
@@ -243,7 +243,7 @@ public:
243 } 243 }
244 244
245 // Set the throttling behavior 245 // Set the throttling behavior
246 void setParameters( U32 limit, F32 interval, BOOL realtime ) 246 void setParameters( U32 limit, F32 interval, BOOL realtime = TRUE )
247 { 247 {
248 // limit is the maximum number of keys 248 // limit is the maximum number of keys
249 // allowed per interval (in seconds or frames) 249 // allowed per interval (in seconds or frames)
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h
index 4032c5b..4b99b71 100644
--- a/linden/indra/llcommon/llversionviewer.h
+++ b/linden/indra/llcommon/llversionviewer.h
@@ -45,6 +45,6 @@ const char * const IMP_VIEWER_NAME = "Imprudence";
45const S32 IMP_VERSION_MAJOR = 1; 45const S32 IMP_VERSION_MAJOR = 1;
46const S32 IMP_VERSION_MINOR = 1; 46const S32 IMP_VERSION_MINOR = 1;
47const S32 IMP_VERSION_PATCH = 0; 47const S32 IMP_VERSION_PATCH = 0;
48const char * const IMP_VERSION_TEST = "alpha"; 48const char * const IMP_VERSION_TEST = "RC1";
49 49
50#endif 50#endif
diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp
index 0a8a1fb..e492889 100644
--- a/linden/indra/llinventory/llinventory.cpp
+++ b/linden/indra/llinventory/llinventory.cpp
@@ -60,6 +60,9 @@ static const std::string INV_SALE_INFO_LABEL("sale_info");
60static const std::string INV_FLAGS_LABEL("flags"); 60static const std::string INV_FLAGS_LABEL("flags");
61static const std::string INV_CREATION_DATE_LABEL("created_at"); 61static const std::string INV_CREATION_DATE_LABEL("created_at");
62 62
63// key used by agent-inventory-service
64static const std::string INV_ASSET_TYPE_LABEL_WS("type_default");
65static const std::string INV_FOLDER_ID_LABEL_WS("category_id");
63///---------------------------------------------------------------------------- 66///----------------------------------------------------------------------------
64/// Local function declarations, constants, enums, and typedefs 67/// Local function declarations, constants, enums, and typedefs
65///---------------------------------------------------------------------------- 68///----------------------------------------------------------------------------
@@ -1087,11 +1090,13 @@ LLSD LLInventoryItem::asLLSD() const
1087 sd[INV_SHADOW_ID_LABEL] = shadow_id; 1090 sd[INV_SHADOW_ID_LABEL] = shadow_id;
1088 } 1091 }
1089 sd[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(mType); 1092 sd[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(mType);
1093 sd[INV_INVENTORY_TYPE_LABEL] = mInventoryType;
1090 const char* inv_type_str = LLInventoryType::lookup(mInventoryType); 1094 const char* inv_type_str = LLInventoryType::lookup(mInventoryType);
1091 if(inv_type_str) 1095 if(inv_type_str)
1092 { 1096 {
1093 sd[INV_INVENTORY_TYPE_LABEL] = inv_type_str; 1097 sd[INV_INVENTORY_TYPE_LABEL] = inv_type_str;
1094 } 1098 }
1099 //sd[INV_FLAGS_LABEL] = (S32)mFlags;
1095 sd[INV_FLAGS_LABEL] = ll_sd_from_U32(mFlags); 1100 sd[INV_FLAGS_LABEL] = ll_sd_from_U32(mFlags);
1096 sd[INV_SALE_INFO_LABEL] = mSaleInfo; 1101 sd[INV_SALE_INFO_LABEL] = mSaleInfo;
1097 sd[INV_NAME_LABEL] = mName; 1102 sd[INV_NAME_LABEL] = mName;
@@ -1164,17 +1169,40 @@ bool LLInventoryItem::fromLLSD(LLSD& sd)
1164 w = INV_ASSET_TYPE_LABEL; 1169 w = INV_ASSET_TYPE_LABEL;
1165 if (sd.has(w)) 1170 if (sd.has(w))
1166 { 1171 {
1167 mType = LLAssetType::lookup(sd[w].asString()); 1172 if (sd[w].isString())
1173 {
1174 mType = LLAssetType::lookup(sd[w].asString().c_str());
1175 }
1176 else if (sd[w].isInteger())
1177 {
1178 S8 type = (U8)sd[w].asInteger();
1179 mType = static_cast<LLAssetType::EType>(type);
1180 }
1168 } 1181 }
1169 w = INV_INVENTORY_TYPE_LABEL; 1182 w = INV_INVENTORY_TYPE_LABEL;
1170 if (sd.has(w)) 1183 if (sd.has(w))
1171 { 1184 {
1172 mInventoryType = LLInventoryType::lookup(sd[w].asString()); 1185 if (sd[w].isString())
1186 {
1187 mInventoryType = LLInventoryType::lookup(sd[w].asString().c_str());
1188 }
1189 else if (sd[w].isInteger())
1190 {
1191 S8 type = (U8)sd[w].asInteger();
1192 mInventoryType = static_cast<LLInventoryType::EType>(type);
1193 }
1173 } 1194 }
1174 w = INV_FLAGS_LABEL; 1195 w = INV_FLAGS_LABEL;
1175 if (sd.has(w)) 1196 if (sd.has(w))
1176 { 1197 {
1177 mFlags = ll_U32_from_sd(sd[w]); 1198 if (sd[w].isBinary())
1199 {
1200 mFlags = ll_U32_from_sd(sd[w]);
1201 }
1202 else if(sd[w].isInteger())
1203 {
1204 mFlags = sd[w].asInteger();
1205 }
1178 } 1206 }
1179 w = INV_NAME_LABEL; 1207 w = INV_NAME_LABEL;
1180 if (sd.has(w)) 1208 if (sd.has(w))
@@ -1532,7 +1560,7 @@ bool LLInventoryCategory::fromLLSD(LLSD& sd)
1532{ 1560{
1533 std::string w; 1561 std::string w;
1534 1562
1535 w = INV_ITEM_ID_LABEL; 1563 w = INV_FOLDER_ID_LABEL_WS;
1536 if (sd.has(w)) 1564 if (sd.has(w))
1537 { 1565 {
1538 mUUID = sd[w]; 1566 mUUID = sd[w];
@@ -1548,6 +1576,13 @@ bool LLInventoryCategory::fromLLSD(LLSD& sd)
1548 S8 type = (U8)sd[w].asInteger(); 1576 S8 type = (U8)sd[w].asInteger();
1549 mPreferredType = static_cast<LLAssetType::EType>(type); 1577 mPreferredType = static_cast<LLAssetType::EType>(type);
1550 } 1578 }
1579 w = INV_ASSET_TYPE_LABEL_WS;
1580 if (sd.has(w))
1581 {
1582 S8 type = (U8)sd[w].asInteger();
1583 mPreferredType = static_cast<LLAssetType::EType>(type);
1584 }
1585
1551 w = INV_NAME_LABEL; 1586 w = INV_NAME_LABEL;
1552 if (sd.has(w)) 1587 if (sd.has(w))
1553 { 1588 {
diff --git a/linden/indra/llinventory/llsaleinfo.cpp b/linden/indra/llinventory/llsaleinfo.cpp
index 4895378..fef6b05 100644
--- a/linden/indra/llinventory/llsaleinfo.cpp
+++ b/linden/indra/llinventory/llsaleinfo.cpp
@@ -114,7 +114,16 @@ bool LLSaleInfo::fromLLSD(LLSD& sd, BOOL& has_perm_mask, U32& perm_mask)
114{ 114{
115 const char *w; 115 const char *w;
116 116
117 mSaleType = lookup(sd["sale_type"].asString().c_str()); 117 if (sd["sale_type"].isString())
118 {
119 mSaleType = lookup(sd["sale_type"].asString().c_str());
120 }
121 else if(sd["sale_type"].isInteger())
122 {
123 S8 type = (U8)sd["sale_type"].asInteger();
124 mSaleType = static_cast<LLSaleInfo::EForSale>(type);
125 }
126
118 mSalePrice = llclamp(sd["sale_price"].asInteger(), 0, S32_MAX); 127 mSalePrice = llclamp(sd["sale_price"].asInteger(), 0, S32_MAX);
119 w = "perm_mask"; 128 w = "perm_mask";
120 if (sd.has(w)) 129 if (sd.has(w))
diff --git a/linden/indra/llmath/CMakeLists.txt b/linden/indra/llmath/CMakeLists.txt
index 6a329fa..e5ec3e1 100644
--- a/linden/indra/llmath/CMakeLists.txt
+++ b/linden/indra/llmath/CMakeLists.txt
@@ -11,6 +11,8 @@ include_directories(
11 11
12set(llmath_SOURCE_FILES 12set(llmath_SOURCE_FILES
13 llbboxlocal.cpp 13 llbboxlocal.cpp
14 llcalc.cpp
15 llcalcparser.cpp
14 llcamera.cpp 16 llcamera.cpp
15 llcoordframe.cpp 17 llcoordframe.cpp
16 llline.cpp 18 llline.cpp
@@ -40,6 +42,8 @@ set(llmath_HEADER_FILES
40 camera.h 42 camera.h
41 coordframe.h 43 coordframe.h
42 llbboxlocal.h 44 llbboxlocal.h
45 llcalc.h
46 llcalcparser.h
43 llcamera.h 47 llcamera.h
44 llcoord.h 48 llcoord.h
45 llcoordframe.h 49 llcoordframe.h
diff --git a/linden/indra/llmath/llcalc.cpp b/linden/indra/llmath/llcalc.cpp
new file mode 100644
index 0000000..ff3f91f
--- /dev/null
+++ b/linden/indra/llmath/llcalc.cpp
@@ -0,0 +1,155 @@
1/*
2 * LLCalc.cpp
3 * SecondLife
4 *
5 * Created by Aimee Walton on 28/09/2008.
6 * Copyright 2008 Aimee Walton.
7 *
8 */
9
10#include "linden_common.h"
11
12#include "llcalc.h"
13
14#include <boost/spirit/core.hpp>
15#include <boost/spirit/error_handling.hpp>
16
17#include "llcalcparser.h"
18#include "llmath.h"
19
20
21// Variable names for use in the build floater
22const char* LLCalc::X_POS = "XP";
23const char* LLCalc::Y_POS = "YP";
24const char* LLCalc::Z_POS = "ZP";
25const char* LLCalc::X_SCALE = "XS";
26const char* LLCalc::Y_SCALE = "YS";
27const char* LLCalc::Z_SCALE = "ZS";
28const char* LLCalc::X_ROT = "XR";
29const char* LLCalc::Y_ROT = "YR";
30const char* LLCalc::Z_ROT = "ZR";
31const char* LLCalc::HOLLOW = "HLW";
32const char* LLCalc::CUT_BEGIN = "CB";
33const char* LLCalc::CUT_END = "CE";
34const char* LLCalc::PATH_BEGIN = "PB";
35const char* LLCalc::PATH_END = "PE";
36const char* LLCalc::TWIST_BEGIN = "TB";
37const char* LLCalc::TWIST_END = "TE";
38const char* LLCalc::X_SHEAR = "XSH";
39const char* LLCalc::Y_SHEAR = "YSH";
40const char* LLCalc::X_TAPER = "XTP";
41const char* LLCalc::Y_TAPER = "YTP";
42const char* LLCalc::RADIUS_OFFSET = "ROF";
43const char* LLCalc::REVOLUTIONS = "REV";
44const char* LLCalc::SKEW = "SKW";
45const char* LLCalc::X_HOLE = "XHL";
46const char* LLCalc::Y_HOLE = "YHL";
47const char* LLCalc::TEX_U_SCALE = "TSU";
48const char* LLCalc::TEX_V_SCALE = "TSV";
49const char* LLCalc::TEX_U_OFFSET = "TOU";
50const char* LLCalc::TEX_V_OFFSET = "TOV";
51const char* LLCalc::TEX_ROTATION = "TROT";
52const char* LLCalc::TEX_TRANSPARENCY = "TRNS";
53const char* LLCalc::TEX_GLOW = "GLOW";
54
55
56LLCalc* LLCalc::sInstance = NULL;
57
58LLCalc::LLCalc() : mLastErrorPos(0)
59{
60// mUserVariables = new calc_map_t;
61 mVariables = new calc_map_t;
62 mConstants = new calc_map_t;
63
64 // Init table of constants
65 (*mConstants)["PI"] = F_PI;
66 (*mConstants)["TWO_PI"] = F_TWO_PI;
67 (*mConstants)["PI_BY_TWO"] = F_PI_BY_TWO;
68 (*mConstants)["SQRT2"] = F_SQRT2;
69 (*mConstants)["DEG_TO_RAD"] = DEG_TO_RAD;
70 (*mConstants)["RAD_TO_DEG"] = RAD_TO_DEG;
71 (*mConstants)["GRAVITY"] = GRAVITY;
72}
73
74LLCalc::~LLCalc()
75{
76 delete mConstants;
77 delete mVariables;
78// delete mUserVariables;
79}
80
81//static
82void LLCalc::cleanUp()
83{
84 delete sInstance;
85 sInstance = NULL;
86}
87
88//static
89LLCalc* LLCalc::getInstance()
90{
91 if (!sInstance) sInstance = new LLCalc();
92 return sInstance;
93}
94
95void LLCalc::setVar(const std::string& name, const F32& value)
96{
97 (*mVariables)[name] = value;
98}
99
100void LLCalc::clearVar(const std::string& name)
101{
102 mVariables->erase(name);
103}
104
105void LLCalc::clearAllVariables()
106{
107 mVariables->clear();
108}
109
110/*
111void LLCalc::updateVariables(LLSD& vars)
112{
113 LLSD::map_iterator cIt = vars.beginMap();
114 for(; cIt != vars.endMap(); cIt++)
115 {
116 setVar(cIt->first, (F32)(LLSD::Real)cIt->second);
117 }
118}
119*/
120
121bool LLCalc::evalString(const std::string& expression, F32& result)
122{
123 using namespace boost::spirit;
124
125 std::string expr_upper = expression;
126 LLStringUtil::toUpper(expr_upper);
127
128 LLCalcParser calc(result, mConstants, mVariables);
129
130 mLastErrorPos = 0;
131 std::string::iterator start = expr_upper.begin();
132 parse_info<std::string::iterator> info;
133
134 try
135 {
136 info = parse(start, expr_upper.end(), calc, space_p);
137 lldebugs << "Math expression: " << expression << " = " << result << llendl;
138 }
139 catch(parser_error<std::string, std::string::iterator> &e)
140 {
141 mLastErrorPos = e.where - expr_upper.begin();
142
143 llinfos << "Calc parser exception: " << e.descriptor << " at " << mLastErrorPos << " in expression: " << expression << llendl;
144 return false;
145 }
146
147 if (!info.full)
148 {
149 mLastErrorPos = info.stop - expr_upper.begin();
150 llinfos << "Unhandled syntax error at " << mLastErrorPos << " in expression: " << expression << llendl;
151 return false;
152 }
153
154 return true;
155}
diff --git a/linden/indra/llmath/llcalc.h b/linden/indra/llmath/llcalc.h
new file mode 100644
index 0000000..a376895
--- /dev/null
+++ b/linden/indra/llmath/llcalc.h
@@ -0,0 +1,85 @@
1/*
2 * LLCalc.h
3 * SecondLife
4 *
5 * Created by Aimee Walton on 28/09/2008.
6 * Copyright 2008 Aimee Walton.
7 *
8 */
9
10#ifndef LL_CALC_H
11#define LL_CALC_H
12
13#include <map>
14#include <string>
15
16//#include "llsd.h"
17
18class LLCalc
19{
20public:
21 LLCalc();
22 ~LLCalc();
23
24 // Variable name constants
25 static const char* X_POS;
26 static const char* Y_POS;
27 static const char* Z_POS;
28 static const char* X_SCALE;
29 static const char* Y_SCALE;
30 static const char* Z_SCALE;
31 static const char* X_ROT;
32 static const char* Y_ROT;
33 static const char* Z_ROT;
34 static const char* HOLLOW;
35 static const char* CUT_BEGIN;
36 static const char* CUT_END;
37 static const char* PATH_BEGIN;
38 static const char* PATH_END;
39 static const char* TWIST_BEGIN;
40 static const char* TWIST_END;
41 static const char* X_SHEAR;
42 static const char* Y_SHEAR;
43 static const char* X_TAPER;
44 static const char* Y_TAPER;
45 static const char* RADIUS_OFFSET;
46 static const char* REVOLUTIONS;
47 static const char* SKEW;
48 static const char* X_HOLE;
49 static const char* Y_HOLE;
50 static const char* TEX_U_SCALE;
51 static const char* TEX_V_SCALE;
52 static const char* TEX_U_OFFSET;
53 static const char* TEX_V_OFFSET;
54 static const char* TEX_ROTATION;
55 static const char* TEX_TRANSPARENCY;
56 static const char* TEX_GLOW;
57
58 void setVar(const std::string& name, const F32& value);
59 void clearVar(const std::string& name);
60 void clearAllVariables();
61// void updateVariables(LLSD& vars);
62
63 bool evalString(const std::string& expression, F32& result);
64 std::string::size_type getLastErrorPos() { return mLastErrorPos; }
65
66 static LLCalc* getInstance();
67 static void cleanUp();
68
69 typedef std::map<std::string, F32> calc_map_t;
70
71private:
72 std::string::size_type mLastErrorPos;
73
74 calc_map_t* mConstants;
75 calc_map_t* mVariables;
76
77 // *TODO: Add support for storing user defined variables, and stored functions.
78 // Will need UI work, and a means to save them between sessions.
79// calc_map_t* mUserVariables;
80
81 // "There shall be only one"
82 static LLCalc* sInstance;
83};
84
85#endif // LL_CALC_H
diff --git a/linden/indra/llmath/llcalcparser.cpp b/linden/indra/llmath/llcalcparser.cpp
new file mode 100644
index 0000000..1546c09
--- /dev/null
+++ b/linden/indra/llmath/llcalcparser.cpp
@@ -0,0 +1,45 @@
1/*
2 * LLCalcParser.cpp
3 * SecondLife
4 *
5 * Created by Aimee Walton on 28/09/2008.
6 * Copyright 2008 Aimee Walton.
7 *
8 */
9
10#include "linden_common.h"
11
12#include "llcalcparser.h"
13
14F32 LLCalcParser::lookup(const std::string::iterator& start, const std::string::iterator& end) const
15{
16 LLCalc::calc_map_t::iterator iter;
17
18 std::string name(start, end);
19
20 if (mConstants)
21 {
22 iter = mConstants->find(name);
23 if (iter != mConstants->end())
24 {
25 return (*iter).second;
26 }
27 }
28 else
29 {
30 // This should never happen!
31 boost::spirit::throw_(end, std::string("Missing constants table"));
32 }
33
34 if (mVariables)
35 {
36 iter = mVariables->find(name);
37 if (iter != mVariables->end())
38 {
39 return (*iter).second;
40 }
41 }
42
43 boost::spirit::throw_(end, std::string("Unknown symbol " + name));
44 return 0.f;
45}
diff --git a/linden/indra/llmath/llcalcparser.h b/linden/indra/llmath/llcalcparser.h
new file mode 100644
index 0000000..c405b62
--- /dev/null
+++ b/linden/indra/llmath/llcalcparser.h
@@ -0,0 +1,155 @@
1/*
2 * LLCalcParser.h
3 * SecondLife
4 *
5 * Created by Aimee Walton on 28/09/2008.
6 * Copyright 2008 Aimee Walton.
7 *
8 */
9
10#ifndef LL_CALCPARSER_H
11#define LL_CALCPARSER_H
12
13#include <boost/spirit/attribute.hpp>
14#include <boost/spirit/core.hpp>
15#include <boost/spirit/error_handling.hpp>
16#include <boost/spirit/iterator/position_iterator.hpp>
17#include <boost/spirit/phoenix/binders.hpp>
18//#include <boost/spirit/symbols/symbols.hpp>
19#include <map>
20#include <string>
21
22#include "llcalc.h"
23#include "llmath.h"
24
25struct LLCalcParser : boost::spirit::grammar<LLCalcParser>
26{
27 LLCalcParser(F32& result, LLCalc::calc_map_t* constants, LLCalc::calc_map_t* vars) :
28 mResult(result), mConstants(constants), mVariables(vars) {};
29
30 struct value_closure : boost::spirit::closure<value_closure, F32>
31 {
32 member1 value;
33 };
34
35 template <typename ScannerT>
36 struct definition
37 {
38 // Rule declarations
39 boost::spirit::rule<ScannerT> statement, identifier;
40 boost::spirit::rule<ScannerT, value_closure::context_t> expression, term,
41 power,
42 unary_expr,
43 factor,
44 /*unary_func,
45 /binary_func,*/
46 group;
47
48 // start() should return the starting symbol
49 boost::spirit::rule<ScannerT> const& start() const { return statement; }
50
51 definition(LLCalcParser const& self)
52 {
53 using namespace boost::spirit;
54 using namespace phoenix;
55
56 assertion<std::string> assert_domain("Domain error");
57// assertion<std::string> assert_symbol("Unknown symbol");
58 assertion<std::string> assert_syntax("Syntax error");
59
60 identifier =
61 lexeme_d[(alpha_p | '_') >> *(alnum_p | '_')]
62 ;
63
64 group =
65 '(' >> expression[group.value = arg1] >> assert_syntax(ch_p(')'))
66 ;
67
68 /*unary_func =
69 ((str_p("SIN") >> '(' >> expression[unary_func.value = bind(&sin)(DEG_TO_RAD * arg1)]) |
70 (str_p("COS") >> '(' >> expression[unary_func.value = bind(&cos)(DEG_TO_RAD * arg1)]) |
71 (str_p("TAN") >> '(' >> expression[unary_func.value = bind(&tan)(DEG_TO_RAD * arg1)]) |
72 (str_p("ASIN") >> '(' >> expression[unary_func.value = (bind(&asin)(arg1)) * RAD_TO_DEG]) |
73 (str_p("ACOS") >> '(' >> expression[unary_func.value = bind(&acos)(arg1) * RAD_TO_DEG]) |
74 (str_p("ATAN") >> '(' >> expression[unary_func.value = bind(&atan)(arg1) * RAD_TO_DEG]) |
75 (str_p("SQRT") >> '(' >> expression[unary_func.value = bind(&sqrt)(arg1)]) |
76 (str_p("LOG") >> '(' >> expression[unary_func.value = bind(&log)(arg1)]) |
77 (str_p("EXP") >> '(' >> expression[unary_func.value = bind(&exp)(arg1)]) |
78 (str_p("ABS") >> '(' >> expression[unary_func.value = bind(&fabs)(arg1)])
79 ) >> assert_syntax(ch_p(')'))
80 ;
81
82 binary_func =
83 ((str_p("ATAN2") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
84 expression[binary_func.value = bind(&atan2)(binary_func.value, arg1) * RAD_TO_DEG]) |
85 (str_p("MIN") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
86 expression[binary_func.value = bind(&LLCalcParser::min)(self, binary_func.value, arg1)]) |
87 (str_p("MAX") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
88 expression[binary_func.value = bind(&LLCalcParser::max)(self, binary_func.value, arg1)])
89 ) >> assert_syntax(ch_p(')'))
90 ;*/
91
92 // *TODO: Localisation of the decimal point?
93 // Problem, LLLineEditor::postvalidateFloat accepts a comma when appropriate
94 // for the current locale. However to do that here could clash with using
95 // the comma as a separator when passing arguments to functions.
96 factor =
97 (ureal_p[factor.value = arg1] |
98 group[factor.value = arg1] |
99 /*unary_func[factor.value = arg1] |
100 binary_func[factor.value = arg1] |*/
101 // Lookup throws an Unknown Symbol error if it is unknown, while this works fine,
102 // would be "neater" to handle symbol lookup from here with an assertive parser.
103// constants_p[factor.value = arg1]|
104 identifier[factor.value = bind(&LLCalcParser::lookup)(self, arg1, arg2)]
105 ) >>
106 // Detect and throw math errors.
107 assert_domain(eps_p(bind(&LLCalcParser::checkNaN)(self, factor.value)))
108 ;
109
110 unary_expr =
111 !ch_p('+') >> factor[unary_expr.value = arg1] |
112 '-' >> factor[unary_expr.value = -arg1]
113 ;
114
115 power =
116 unary_expr[power.value = arg1] >>
117 *('^' >> assert_syntax(unary_expr[power.value = bind(&powf)(power.value, arg1)]))
118 ;
119
120 term =
121 power[term.value = arg1] >>
122 *(('*' >> assert_syntax(power[term.value *= arg1])) |
123 ('/' >> assert_syntax(power[term.value /= arg1]))
124 )
125 ;
126
127 expression =
128 assert_syntax(term[expression.value = arg1]) >>
129 *(('+' >> assert_syntax(term[expression.value += arg1])) |
130 ('-' >> assert_syntax(term[expression.value -= arg1]))
131 )
132 ;
133
134 statement =
135 !ch_p('=') >> ( expression )[var(self.mResult) = arg1] >> (end_p)
136 ;
137 }
138 };
139
140private:
141 // Member functions for semantic actions
142 F32 lookup(const std::string::iterator&, const std::string::iterator&) const;
143 F32 min(const F32& a, const F32& b) const { return llmin(a, b); }
144 F32 max(const F32& a, const F32& b) const { return llmax(a, b); }
145
146 bool checkNaN(const F32& a) const { return !llisnan(a); }
147
148 LLCalc::calc_map_t* mConstants;
149 LLCalc::calc_map_t* mVariables;
150// LLCalc::calc_map_t* mUserVariables;
151
152 F32& mResult;
153};
154
155#endif // LL_CALCPARSER_H
diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp
index dec83b0..28fee37 100644
--- a/linden/indra/llmessage/lliosocket.cpp
+++ b/linden/indra/llmessage/lliosocket.cpp
@@ -355,8 +355,11 @@ LLIOPipe::EStatus LLIOSocketReader::process_impl(
355 } 355 }
356 else if(APR_STATUS_IS_EAGAIN(status)) 356 else if(APR_STATUS_IS_EAGAIN(status))
357 { 357 {
358/*Commented out by Aura 9-9-8 for DEV-19961.
358 // everything is fine, but we can terminate this process pump. 359 // everything is fine, but we can terminate this process pump.
360
359 rv = STATUS_BREAK; 361 rv = STATUS_BREAK;
362*/
360 } 363 }
361 else 364 else
362 { 365 {
diff --git a/linden/indra/llmessage/llpumpio.cpp b/linden/indra/llmessage/llpumpio.cpp
index c92612f..6adf9c2 100644
--- a/linden/indra/llmessage/llpumpio.cpp
+++ b/linden/indra/llmessage/llpumpio.cpp
@@ -269,6 +269,13 @@ bool LLPumpIO::setTimeoutSeconds(F32 timeout)
269 return true; 269 return true;
270} 270}
271 271
272void LLPumpIO::adjustTimeoutSeconds(F32 delta)
273{
274 // If no chain is running, bail
275 if(current_chain_t() == mCurrentChain) return;
276 (*mCurrentChain).adjustTimeoutSeconds(delta);
277}
278
272static std::string events_2_string(apr_int16_t events) 279static std::string events_2_string(apr_int16_t events)
273{ 280{
274 std::ostringstream ostr; 281 std::ostringstream ostr;
@@ -1161,3 +1168,14 @@ void LLPumpIO::LLChainInfo::setTimeoutSeconds(F32 timeout)
1161 mTimer.stop(); 1168 mTimer.stop();
1162 } 1169 }
1163} 1170}
1171
1172void LLPumpIO::LLChainInfo::adjustTimeoutSeconds(F32 delta)
1173{
1174 LLMemType m1(LLMemType::MTYPE_IO_PUMP);
1175 if(mTimer.getStarted())
1176 {
1177 F64 expiry = mTimer.expiresAt();
1178 expiry += delta;
1179 mTimer.setExpiryAt(expiry);
1180 }
1181}
diff --git a/linden/indra/llmessage/llpumpio.h b/linden/indra/llmessage/llpumpio.h
index d2392a3..daff723 100644
--- a/linden/indra/llmessage/llpumpio.h
+++ b/linden/indra/llmessage/llpumpio.h
@@ -166,6 +166,14 @@ public:
166 bool setTimeoutSeconds(F32 timeout); 166 bool setTimeoutSeconds(F32 timeout);
167 167
168 /** 168 /**
169 * @brief Adjust the timeout of the running chain.
170 *
171 * This method has no effect if there is no timeout on the chain.
172 * @param delta The number of seconds to add to/remove from the timeout.
173 */
174 void adjustTimeoutSeconds(F32 delta);
175
176 /**
169 * @brief Set up file descriptors for for the running chain. 177 * @brief Set up file descriptors for for the running chain.
170 * @see rebuildPollset() 178 * @see rebuildPollset()
171 * 179 *
@@ -349,6 +357,7 @@ protected:
349 // methods 357 // methods
350 LLChainInfo(); 358 LLChainInfo();
351 void setTimeoutSeconds(F32 timeout); 359 void setTimeoutSeconds(F32 timeout);
360 void adjustTimeoutSeconds(F32 delta);
352 361
353 // basic member data 362 // basic member data
354 bool mInit; 363 bool mInit;
diff --git a/linden/indra/llmessage/llurlrequest.cpp b/linden/indra/llmessage/llurlrequest.cpp
index ee62798..e561597 100644
--- a/linden/indra/llmessage/llurlrequest.cpp
+++ b/linden/indra/llmessage/llurlrequest.cpp
@@ -68,6 +68,7 @@ public:
68 LLChannelDescriptors mChannels; 68 LLChannelDescriptors mChannels;
69 U8* mLastRead; 69 U8* mLastRead;
70 U32 mBodyLimit; 70 U32 mBodyLimit;
71 S32 mByteAccumulator;
71 bool mIsBodyLimitSet; 72 bool mIsBodyLimitSet;
72}; 73};
73 74
@@ -76,8 +77,8 @@ LLURLRequestDetail::LLURLRequestDetail() :
76 mResponseBuffer(NULL), 77 mResponseBuffer(NULL),
77 mLastRead(NULL), 78 mLastRead(NULL),
78 mBodyLimit(0), 79 mBodyLimit(0),
80 mByteAccumulator(0),
79 mIsBodyLimitSet(false) 81 mIsBodyLimitSet(false)
80
81{ 82{
82 LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST); 83 LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
83 mCurlRequest = new LLCurlEasyRequest(); 84 mCurlRequest = new LLCurlEasyRequest();
@@ -264,8 +265,25 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
264 { 265 {
265 CURLcode result; 266 CURLcode result;
266 bool newmsg = mDetail->mCurlRequest->getResult(&result); 267 bool newmsg = mDetail->mCurlRequest->getResult(&result);
267 if (!newmsg) 268 if(!newmsg)
268 { 269 {
270 // we're still waiting or prcessing, check how many
271 // bytes we have accumulated.
272 const S32 MIN_ACCUMULATION = 100000;
273 if(pump && (mDetail->mByteAccumulator > MIN_ACCUMULATION))
274 {
275 // This is a pretty sloppy calculation, but this
276 // tries to make the gross assumption that if data
277 // is coming in at 56kb/s, then this transfer will
278 // probably succeed. So, if we're accumlated
279 // 100,000 bytes (MIN_ACCUMULATION) then let's
280 // give this client another 2s to complete.
281 const F32 TIMEOUT_ADJUSTMENT = 2.0f;
282 mDetail->mByteAccumulator = 0;
283 pump->adjustTimeoutSeconds(TIMEOUT_ADJUSTMENT);
284 }
285
286 // keep processing
269 break; 287 break;
270 } 288 }
271 289
@@ -434,6 +452,7 @@ size_t LLURLRequest::downCallback(
434 req->mDetail->mChannels.out(), 452 req->mDetail->mChannels.out(),
435 (U8*)data, 453 (U8*)data,
436 bytes); 454 bytes);
455 req->mDetail->mByteAccumulator += bytes;
437 return bytes; 456 return bytes;
438} 457}
439 458
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 12d1929..9c8ee94 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -41,6 +41,7 @@
41#include "llgl.h" 41#include "llgl.h"
42#include "lltimer.h" 42#include "lltimer.h"
43 43
44#include "llcalc.h"
44//#include "llclipboard.h" 45//#include "llclipboard.h"
45#include "llcontrol.h" 46#include "llcontrol.h"
46#include "llbutton.h" 47#include "llbutton.h"
@@ -129,6 +130,7 @@ LLLineEditor::LLLineEditor(const std::string& name, const LLRect& rect,
129 mDrawAsterixes( FALSE ), 130 mDrawAsterixes( FALSE ),
130 mHandleEditKeysDirectly( FALSE ), 131 mHandleEditKeysDirectly( FALSE ),
131 mSelectAllonFocusReceived( FALSE ), 132 mSelectAllonFocusReceived( FALSE ),
133 mSelectAllonCommit( TRUE ),
132 mPassDelete(FALSE), 134 mPassDelete(FALSE),
133 mReadOnly(FALSE), 135 mReadOnly(FALSE),
134 mImage( sImage ), 136 mImage( sImage ),
@@ -226,7 +228,10 @@ void LLLineEditor::onCommit()
226 updateHistory(); 228 updateHistory();
227 229
228 LLUICtrl::onCommit(); 230 LLUICtrl::onCommit();
229 selectAll(); 231
232 // Selection on commit needs to be turned off when evaluating maths
233 // expressions, to allow indication of the error position
234 if (mSelectAllonCommit) selectAll();
230} 235}
231 236
232 237
@@ -2082,6 +2087,32 @@ BOOL LLLineEditor::prevalidateASCII(const LLWString &str)
2082 return rv; 2087 return rv;
2083} 2088}
2084 2089
2090BOOL LLLineEditor::evaluateFloat()
2091{
2092 bool success;
2093 F32 result = 0.f;
2094 std::string expr = getText();
2095
2096 success = LLCalc::getInstance()->evalString(expr, result);
2097
2098 if (!success)
2099 {
2100 // Move the cursor to near the error on failure
2101 setCursor(LLCalc::getInstance()->getLastErrorPos());
2102 // *TODO: Translated error message indicating the type of error? Select error text?
2103 }
2104 else
2105 {
2106 // Replace the expression with the result
2107 std::ostringstream result_str;
2108 result_str << result;
2109 setText(result_str.str());
2110 selectAll();
2111 }
2112
2113 return success;
2114}
2115
2085void LLLineEditor::onMouseCaptureLost() 2116void LLLineEditor::onMouseCaptureLost()
2086{ 2117{
2087 endSelection(); 2118 endSelection();
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index 09a240b..6738151 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -188,6 +188,7 @@ public:
188 188
189 void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; } 189 void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; }
190 void setSelectAllonFocusReceived(BOOL b); 190 void setSelectAllonFocusReceived(BOOL b);
191 void setSelectAllonCommit(BOOL b) { mSelectAllonCommit = b; }
191 192
192 void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data)); 193 void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data));
193 194
@@ -208,6 +209,8 @@ public:
208 static BOOL prevalidateASCII(const LLWString &str); 209 static BOOL prevalidateASCII(const LLWString &str);
209 210
210 static BOOL postvalidateFloat(const std::string &str); 211 static BOOL postvalidateFloat(const std::string &str);
212
213 BOOL evaluateFloat();
211 214
212 // line history support: 215 // line history support:
213 void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off 216 void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off
@@ -297,6 +300,7 @@ protected:
297 300
298 BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system 301 BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system
299 BOOL mSelectAllonFocusReceived; 302 BOOL mSelectAllonFocusReceived;
303 BOOL mSelectAllonCommit;
300 BOOL mPassDelete; 304 BOOL mPassDelete;
301 305
302 BOOL mReadOnly; 306 BOOL mReadOnly;
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp
index a106af4..b12d095 100644
--- a/linden/indra/llui/llspinctrl.cpp
+++ b/linden/indra/llui/llspinctrl.cpp
@@ -49,7 +49,7 @@
49#include "llfocusmgr.h" 49#include "llfocusmgr.h"
50#include "llresmgr.h" 50#include "llresmgr.h"
51 51
52const U32 MAX_STRING_LENGTH = 32; 52const U32 MAX_STRING_LENGTH = 255;
53 53
54static LLRegisterWidget<LLSpinCtrl> r2("spinner"); 54static LLRegisterWidget<LLSpinCtrl> r2("spinner");
55 55
@@ -123,7 +123,7 @@ LLSpinCtrl::LLSpinCtrl( const std::string& name, const LLRect& rect, const std::
123 mEditor = new LLLineEditor( std::string("SpinCtrl Editor"), editor_rect, LLStringUtil::null, font, 123 mEditor = new LLLineEditor( std::string("SpinCtrl Editor"), editor_rect, LLStringUtil::null, font,
124 MAX_STRING_LENGTH, 124 MAX_STRING_LENGTH,
125 &LLSpinCtrl::onEditorCommit, NULL, NULL, this, 125 &LLSpinCtrl::onEditorCommit, NULL, NULL, this,
126 &LLLineEditor::prevalidateFloat ); 126 &LLLineEditor::prevalidateASCII );
127 mEditor->setFollowsLeft(); 127 mEditor->setFollowsLeft();
128 mEditor->setFollowsBottom(); 128 mEditor->setFollowsBottom();
129 mEditor->setFocusReceivedCallback( &LLSpinCtrl::onEditorGainFocus, this ); 129 mEditor->setFocusReceivedCallback( &LLSpinCtrl::onEditorGainFocus, this );
@@ -132,6 +132,7 @@ LLSpinCtrl::LLSpinCtrl( const std::string& name, const LLRect& rect, const std::
132 // it's easier to understand 132 // it's easier to understand
133 //mEditor->setSelectAllonFocusReceived(TRUE); 133 //mEditor->setSelectAllonFocusReceived(TRUE);
134 mEditor->setIgnoreTab(TRUE); 134 mEditor->setIgnoreTab(TRUE);
135 mEditor->setSelectAllonCommit(FALSE);
135 addChild(mEditor); 136 addChild(mEditor);
136 137
137 updateEditor(); 138 updateEditor();
@@ -292,9 +293,10 @@ void LLSpinCtrl::onEditorCommit( LLUICtrl* caller, void *userdata )
292 LLSpinCtrl* self = (LLSpinCtrl*) userdata; 293 LLSpinCtrl* self = (LLSpinCtrl*) userdata;
293 llassert( caller == self->mEditor ); 294 llassert( caller == self->mEditor );
294 295
295 std::string text = self->mEditor->getText(); 296 if( self->mEditor->evaluateFloat() )
296 if( LLLineEditor::postvalidateFloat( text ) )
297 { 297 {
298 std::string text = self->mEditor->getText();
299
298 LLLocale locale(LLLocale::USER_LOCALE); 300 LLLocale locale(LLLocale::USER_LOCALE);
299 F32 val = (F32) atof(text.c_str()); 301 F32 val = (F32) atof(text.c_str());
300 302
@@ -322,9 +324,12 @@ void LLSpinCtrl::onEditorCommit( LLUICtrl* caller, void *userdata )
322 success = TRUE; 324 success = TRUE;
323 } 325 }
324 } 326 }
325 self->updateEditor();
326 327
327 if( !success ) 328 if( success )
329 {
330 self->updateEditor();
331 }
332 else
328 { 333 {
329 self->reportInvalidData(); 334 self->reportInvalidData();
330 } 335 }
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 7e591bf..01f6add 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -1849,17 +1849,6 @@
1849 <integer>0</integer> 1849 <integer>0</integer>
1850 </array> 1850 </array>
1851 </map> 1851 </map>
1852 <key>CompressSnapshotsToDisk</key>
1853 <map>
1854 <key>Comment</key>
1855 <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
1856 <key>Persist</key>
1857 <integer>1</integer>
1858 <key>Type</key>
1859 <string>Boolean</string>
1860 <key>Value</key>
1861 <integer>0</integer>
1862 </map>
1863 <key>ConnectAsGod</key> 1852 <key>ConnectAsGod</key>
1864 <map> 1853 <map>
1865 <key>Comment</key> 1854 <key>Comment</key>
@@ -4387,7 +4376,7 @@
4387 <key>Type</key> 4376 <key>Type</key>
4388 <string>Boolean</string> 4377 <string>Boolean</string>
4389 <key>Value</key> 4378 <key>Value</key>
4390 <integer>0</integer> 4379 <integer>1</integer>
4391 </map> 4380 </map>
4392 <key>LipSyncOoh</key> 4381 <key>LipSyncOoh</key>
4393 <map> 4382 <map>
@@ -4730,6 +4719,17 @@
4730 <key>Value</key> 4719 <key>Value</key>
4731 <integer>1</integer> 4720 <integer>1</integer>
4732 </map> 4721 </map>
4722 <key>MiniMapTeleport</key>
4723 <map>
4724 <key>Comment</key>
4725 <string>Teleport on Mini-Map double click </string>
4726 <key>Persist</key>
4727 <integer>1</integer>
4728 <key>Type</key>
4729 <string>Boolean</string>
4730 <key>Value</key>
4731 <integer>1</integer>
4732 </map>
4733 <key>MiniMapScale</key> 4733 <key>MiniMapScale</key>
4734 <map> 4734 <map>
4735 <key>Comment</key> 4735 <key>Comment</key>
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 2cf418e..9e68078 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -109,6 +109,7 @@
109#include "llpostprocess.h" 109#include "llpostprocess.h"
110#include "llwlparammanager.h" 110#include "llwlparammanager.h"
111#include "llwaterparammanager.h" 111#include "llwaterparammanager.h"
112#include "llcalc.h"
112 113
113#include "lldebugview.h" 114#include "lldebugview.h"
114#include "llconsole.h" 115#include "llconsole.h"
@@ -1176,6 +1177,8 @@ bool LLAppViewer::cleanup()
1176 LLNotifyBox::cleanup(); 1177 LLNotifyBox::cleanup();
1177 1178
1178 LLWorldMap::getInstance()->reset(); // release any images 1179 LLWorldMap::getInstance()->reset(); // release any images
1180
1181 LLCalc::cleanUp();
1179 1182
1180 llinfos << "Global stuff deleted" << llendflush; 1183 llinfos << "Global stuff deleted" << llendflush;
1181 1184
@@ -1602,7 +1605,7 @@ bool LLAppViewer::initConfiguration()
1602 1605
1603 // - set procedural settings 1606 // - set procedural settings
1604 gSavedSettings.setString("ClientSettingsFile", 1607 gSavedSettings.setString("ClientSettingsFile",
1605 gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFileName("Global"))); 1608 gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "settings_imprudence.xml"));
1606 1609
1607 gSavedSettings.setString("VersionChannelName", IMP_VIEWER_NAME); 1610 gSavedSettings.setString("VersionChannelName", IMP_VIEWER_NAME);
1608 1611
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp
index 954bf9f..6e66103 100644
--- a/linden/indra/newview/llfloatersnapshot.cpp
+++ b/linden/indra/newview/llfloatersnapshot.cpp
@@ -992,6 +992,7 @@ public:
992 static void onClickLess(void* data) ; 992 static void onClickLess(void* data) ;
993 static void onClickMore(void* data) ; 993 static void onClickMore(void* data) ;
994 static void onClickUICheck(LLUICtrl *ctrl, void* data); 994 static void onClickUICheck(LLUICtrl *ctrl, void* data);
995 static void onClickHighResCheck(LLUICtrl *ctrl, void* data);
995 static void onClickHUDCheck(LLUICtrl *ctrl, void* data); 996 static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
996 static void onClickKeepOpenCheck(LLUICtrl *ctrl, void* data); 997 static void onClickKeepOpenCheck(LLUICtrl *ctrl, void* data);
997 static void onClickKeepAspectCheck(LLUICtrl *ctrl, void* data); 998 static void onClickKeepAspectCheck(LLUICtrl *ctrl, void* data);
@@ -1105,6 +1106,10 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
1105{ 1106{
1106 LLSnapshotLivePreview* previewp = getPreviewView(floaterp); 1107 LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
1107 1108
1109 LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floaterp);
1110 if (shot_type != LLSnapshotLivePreview::SNAPSHOT_LOCAL)
1111 gSavedSettings.setBOOL("HighResSnapshot", FALSE);
1112
1108 S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ; 1113 S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ;
1109 1114
1110 LLComboBox* combo; 1115 LLComboBox* combo;
@@ -1234,6 +1239,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
1234 floater->childSetVisible("snapshot_height", is_advance); 1239 floater->childSetVisible("snapshot_height", is_advance);
1235 floater->childSetVisible("keep_aspect_check", is_advance); 1240 floater->childSetVisible("keep_aspect_check", is_advance);
1236 floater->childSetVisible("ui_check", is_advance); 1241 floater->childSetVisible("ui_check", is_advance);
1242 floater->childSetVisible("high_res_check", is_advance && is_local);
1237 floater->childSetVisible("hud_check", is_advance); 1243 floater->childSetVisible("hud_check", is_advance);
1238 floater->childSetVisible("keep_open_check", is_advance); 1244 floater->childSetVisible("keep_open_check", is_advance);
1239 floater->childSetVisible("freeze_frame_check", is_advance); 1245 floater->childSetVisible("freeze_frame_check", is_advance);
@@ -1246,7 +1252,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
1246 layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; 1252 layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
1247 floater->childSetValue("layer_types", "colors"); 1253 floater->childSetValue("layer_types", "colors");
1248 if(is_advance) 1254 if(is_advance)
1249 { 1255 {
1250 setResolution(floater, "postcard_size_combo"); 1256 setResolution(floater, "postcard_size_combo");
1251 } 1257 }
1252 break; 1258 break;
@@ -1434,7 +1440,26 @@ void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
1434 1440
1435 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; 1441 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1436 if (view) 1442 if (view)
1443 {
1444 BOOL high_res_snapshot = gSavedSettings.getBOOL("HighResSnapshot");
1445 if (high_res_snapshot) gSavedSettings.setBOOL("HighResSnapshot", FALSE);
1446 view->childSetEnabled("high_res_check", !check->get());
1447 checkAutoSnapshot(getPreviewView(view), TRUE);
1448 }
1449}
1450
1451// static
1452void LLFloaterSnapshot::Impl::onClickHighResCheck(LLUICtrl *ctrl, void* data)
1453{
1454 LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
1455 gSavedSettings.setBOOL( "HighResSnapshot", check->get() );
1456
1457 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1458 if (view)
1437 { 1459 {
1460 BOOL ui_in_snapshot = gSavedSettings.getBOOL("RenderUIInSnapshot");
1461 if (ui_in_snapshot) gSavedSettings.setBOOL("RenderUIInSnapshot", FALSE);
1462 view->childSetEnabled("ui_check", !check->get());
1438 checkAutoSnapshot(getPreviewView(view), TRUE); 1463 checkAutoSnapshot(getPreviewView(view), TRUE);
1439 } 1464 }
1440} 1465}
@@ -1912,6 +1937,9 @@ BOOL LLFloaterSnapshot::postBuild()
1912 1937
1913 childSetCommitCallback("ui_check", Impl::onClickUICheck, this); 1938 childSetCommitCallback("ui_check", Impl::onClickUICheck, this);
1914 1939
1940 childSetCommitCallback("high_res_check", Impl::onClickHighResCheck, this);
1941 childSetValue("high_res_check", gSavedSettings.getBOOL("HighResSnapshot"));
1942
1915 childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this); 1943 childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this);
1916 childSetValue("hud_check", gSavedSettings.getBOOL("RenderHUDInSnapshot")); 1944 childSetValue("hud_check", gSavedSettings.getBOOL("RenderHUDInSnapshot"));
1917 1945
@@ -2001,8 +2029,23 @@ void LLFloaterSnapshot::draw()
2001 childSetEnabled("send_btn", FALSE); 2029 childSetEnabled("send_btn", FALSE);
2002 childSetEnabled("save_btn", FALSE); 2030 childSetEnabled("save_btn", FALSE);
2003 } 2031 }
2004 2032
2005 BOOL ui_in_snapshot = gSavedSettings.getBOOL("RenderUIInSnapshot"); 2033 BOOL ui_in_snapshot = gSavedSettings.getBOOL("RenderUIInSnapshot");
2034
2035 if (previewp->getSnapshotType() != LLSnapshotLivePreview::SNAPSHOT_LOCAL)
2036 {
2037 childSetValue("high_res_check", FALSE);
2038 childSetEnabled("ui_check", TRUE);
2039 }
2040 else
2041 {
2042 if (ui_in_snapshot)
2043 {
2044 gSavedSettings.setBOOL("HighResSnapshot", FALSE);
2045 childSetEnabled("high_res_check", FALSE);
2046 }
2047 }
2048
2006 childSetValue("ui_check", ui_in_snapshot); 2049 childSetValue("ui_check", ui_in_snapshot);
2007 childSetToolTip("ui_check", std::string("If selected shows the UI in the snapshot")); 2050 childSetToolTip("ui_check", std::string("If selected shows the UI in the snapshot"));
2008 } 2051 }
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp
index b56bfcb..8396454 100644
--- a/linden/indra/newview/llfloaterworldmap.cpp
+++ b/linden/indra/newview/llfloaterworldmap.cpp
@@ -743,7 +743,7 @@ void LLFloaterWorldMap::updateLocation()
743void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord) 743void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord)
744{ 744{
745 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name); 745 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name);
746 z_coord = llclamp(z_coord, 0, 1000); 746 z_coord = llclamp(z_coord, 0, 4096);
747 if (sim_info) 747 if (sim_info)
748 { 748 {
749 LLVector3 local_pos; 749 LLVector3 local_pos;
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index b1e3017..73f0fb3 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -73,7 +73,6 @@ F32 LLInventoryModel::sMinTimeBetweenFetches = 0.3f;
73F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f; 73F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f;
74BOOL LLInventoryModel::sTimelyFetchPending = FALSE; 74BOOL LLInventoryModel::sTimelyFetchPending = FALSE;
75LLFrameTimer LLInventoryModel::sFetchTimer; 75LLFrameTimer LLInventoryModel::sFetchTimer;
76LLInventoryModel::cat_map_t LLInventoryModel::sBulkFetchMap;
77S16 LLInventoryModel::sBulkFetchCount = 0; 76S16 LLInventoryModel::sBulkFetchCount = 0;
78 77
79// RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue 78// RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue
@@ -85,7 +84,7 @@ static std::deque<LLUUID> sFetchQueue;
85 84
86//BOOL decompress_file(const char* src_filename, const char* dst_filename); 85//BOOL decompress_file(const char* src_filename, const char* dst_filename);
87const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; 86const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f;
88const S32 MAX_FETCH_RETRIES = 5; 87const S32 MAX_FETCH_RETRIES = 10;
89const char CACHE_FORMAT_STRING[] = "%s.inv"; 88const char CACHE_FORMAT_STRING[] = "%s.inv";
90const char* NEW_CATEGORY_NAME = "New Folder"; 89const char* NEW_CATEGORY_NAME = "New Folder";
91const char* NEW_CATEGORY_NAMES[LLAssetType::AT_COUNT] = 90const char* NEW_CATEGORY_NAMES[LLAssetType::AT_COUNT] =
@@ -990,13 +989,24 @@ BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer)
990// Call this method when it's time to update everyone on a new state, 989// Call this method when it's time to update everyone on a new state,
991// by default, the inventory model will not update observers 990// by default, the inventory model will not update observers
992// automatically. 991// automatically.
993void LLInventoryModel::notifyObservers() 992// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
993void LLInventoryModel::notifyObservers(const std::string service_name)
994{ 994{
995 for (observer_list_t::iterator iter = mObservers.begin(); 995 for (observer_list_t::iterator iter = mObservers.begin();
996 iter != mObservers.end(); ) 996 iter != mObservers.end(); )
997 { 997 {
998 LLInventoryObserver* observer = *iter; 998 LLInventoryObserver* observer = *iter;
999 observer->changed(mModifyMask); 999
1000 if (service_name.empty())
1001 {
1002 observer->changed(mModifyMask);
1003 }
1004 else
1005 {
1006 observer->mMessageName = service_name;
1007 observer->changed(mModifyMask);
1008 }
1009
1000 // safe way to incrament since changed may delete entries! (@!##%@!@&*!) 1010 // safe way to incrament since changed may delete entries! (@!##%@!@&*!)
1001 iter = mObservers.upper_bound(observer); 1011 iter = mObservers.upper_bound(observer);
1002 } 1012 }
@@ -1038,6 +1048,79 @@ void LLInventoryModel::mock(const LLUUID& root_id)
1038} 1048}
1039*/ 1049*/
1040 1050
1051//If we get back a normal response, handle it here
1052void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
1053{
1054 start_new_inventory_observer();
1055
1056 /*LLUUID agent_id;
1057 agent_id = content["agent_id"].asUUID();
1058 if(agent_id != gAgent.getID())
1059 {
1060 llwarns << "Got a inventory update for the wrong agent: " << agent_id
1061 << llendl;
1062 return;
1063 }*/
1064 item_array_t items;
1065 update_map_t update;
1066 S32 count = content["items"].size();
1067 bool all_one_folder = true;
1068 LLUUID folder_id;
1069 // Does this loop ever execute more than once? -Gigs
1070 for(S32 i = 0; i < count; ++i)
1071 {
1072 LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
1073 titem->unpackMessage(content["items"][i]);
1074
1075 lldebugs << "LLInventoryModel::messageUpdateCore() item id:"
1076 << titem->getUUID() << llendl;
1077 items.push_back(titem);
1078 // examine update for changes.
1079 LLViewerInventoryItem* itemp = gInventory.getItem(titem->getUUID());
1080 if(itemp)
1081 {
1082 if(titem->getParentUUID() == itemp->getParentUUID())
1083 {
1084 update[titem->getParentUUID()];
1085 }
1086 else
1087 {
1088 ++update[titem->getParentUUID()];
1089 --update[itemp->getParentUUID()];
1090 }
1091 }
1092 else
1093 {
1094 ++update[titem->getParentUUID()];
1095 }
1096 if (folder_id.isNull())
1097 {
1098 folder_id = titem->getParentUUID();
1099 }
1100 else
1101 {
1102 all_one_folder = false;
1103 }
1104 }
1105
1106 U32 changes = 0x0;
1107 //as above, this loop never seems to loop more than once per call
1108 for (item_array_t::iterator it = items.begin(); it != items.end(); ++it)
1109 {
1110 changes |= gInventory.updateItem(*it);
1111 }
1112 gInventory.notifyObservers("fetchinventory");
1113 gViewerWindow->getWindow()->decBusyCount();
1114}
1115
1116//If we get back an error (not found, etc...), handle it here
1117void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::string& reason)
1118{
1119 llinfos << "fetchInventory::error "
1120 << status << ": " << reason << llendl;
1121 gInventory.notifyObservers("fetchinventory");
1122}
1123
1041void LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) 1124void LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)
1042{ 1125{
1043 LLViewerInventoryCategory* cat = getCategory(folder_id); 1126 LLViewerInventoryCategory* cat = getCategory(folder_id);
@@ -1065,21 +1148,31 @@ void LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)
1065} 1148}
1066 1149
1067//Initialize statics. 1150//Initialize statics.
1068LLAlertDialog* LLInventoryModel::fetchDescendentsResponder::sRetryDialog=NULL;
1069LLSD LLInventoryModel::fetchDescendentsResponder::sRetrySD;
1070
1071bool LLInventoryModel::isBulkFetchProcessingComplete() 1151bool LLInventoryModel::isBulkFetchProcessingComplete()
1072{ 1152{
1073 return ( (sFetchQueue.empty() 1153 return ( (sFetchQueue.empty()
1074 && sBulkFetchMap.empty() 1154 && sBulkFetchCount<=0) ? TRUE : FALSE ) ;
1075 && sBulkFetchCount==0) ? TRUE : FALSE ) ;
1076} 1155}
1077 1156
1157class fetchDescendentsResponder: public LLHTTPClient::Responder
1158{
1159 public:
1160 fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
1161 //fetchDescendentsResponder() {};
1162 void result(const LLSD& content);
1163 void error(U32 status, const std::string& reason);
1164 public:
1165 typedef std::vector<LLViewerInventoryCategory*> folder_ref_t;
1166 protected:
1167 LLSD mRequestSD;
1168};
1169
1078//If we get back a normal response, handle it here 1170//If we get back a normal response, handle it here
1079void LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content) 1171void fetchDescendentsResponder::result(const LLSD& content)
1080{ 1172{
1081 if (content.has("folders")) 1173 if (content.has("folders"))
1082 { 1174 {
1175
1083 for(LLSD::array_const_iterator folder_it = content["folders"].beginArray(); 1176 for(LLSD::array_const_iterator folder_it = content["folders"].beginArray();
1084 folder_it != content["folders"].endArray(); 1177 folder_it != content["folders"].endArray();
1085 ++folder_it) 1178 ++folder_it)
@@ -1087,19 +1180,54 @@ void LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)
1087 LLSD folder_sd = *folder_it; 1180 LLSD folder_sd = *folder_it;
1088 1181
1089 1182
1090 LLUUID agent_id = folder_sd["agent-id"]; 1183 //LLUUID agent_id = folder_sd["agent_id"];
1091 1184
1092 if(agent_id != gAgent.getID()) //This should never happen. 1185 //if(agent_id != gAgent.getID()) //This should never happen.
1093 { 1186 //{
1094 llwarns << "Got a UpdateInventoryItem for the wrong agent." 1187 // llwarns << "Got a UpdateInventoryItem for the wrong agent."
1095 << llendl; 1188 // << llendl;
1096 break; 1189 // break;
1097 } 1190 //}
1098 LLUUID parent_id = folder_sd["folder-id"]; 1191
1099 LLUUID owner_id = folder_sd["owner-id"]; 1192 LLUUID parent_id = folder_sd["folder_id"];
1193 LLUUID owner_id = folder_sd["owner_id"];
1100 S32 version = (S32)folder_sd["version"].asInteger(); 1194 S32 version = (S32)folder_sd["version"].asInteger();
1101 S32 descendents = (S32)folder_sd["descendents"].asInteger(); 1195 S32 descendents = (S32)folder_sd["descendents"].asInteger();
1102 LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); 1196 LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
1197
1198 if (parent_id.isNull())
1199 {
1200 LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
1201 for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
1202 item_it != folder_sd["items"].endArray();
1203 ++item_it)
1204 {
1205 LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
1206 if (lost_uuid.notNull())
1207 {
1208 LLSD item = *item_it;
1209 titem->unpackMessage(item);
1210
1211 LLInventoryModel::update_list_t update;
1212 LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1);
1213 update.push_back(new_folder);
1214 gInventory.accountForUpdate(update);
1215
1216 titem->setParent(lost_uuid);
1217 titem->updateParentOnServer(FALSE);
1218 gInventory.updateItem(titem);
1219 gInventory.notifyObservers("fetchDescendents");
1220
1221 }
1222 }
1223 }
1224
1225 LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id);
1226 if (!pcat)
1227 {
1228 continue;
1229 }
1230
1103 for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray(); 1231 for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray();
1104 category_it != folder_sd["categories"].endArray(); 1232 category_it != folder_sd["categories"].endArray();
1105 ++category_it) 1233 ++category_it)
@@ -1107,7 +1235,7 @@ void LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)
1107 LLSD category = *category_it; 1235 LLSD category = *category_it;
1108 tcategory->fromLLSD(category); 1236 tcategory->fromLLSD(category);
1109 1237
1110 if (sFullFetchStarted) 1238 if (LLInventoryModel::sFullFetchStarted)
1111 { 1239 {
1112 sFetchQueue.push_back(tcategory->getUUID()); 1240 sFetchQueue.push_back(tcategory->getUUID());
1113 } 1241 }
@@ -1139,37 +1267,37 @@ void LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)
1139 } 1267 }
1140 } 1268 }
1141 1269
1142 if (content.has("bad-folders")) 1270 if (content.has("bad_folders"))
1143 { 1271 {
1144 for(LLSD::array_const_iterator folder_it = content["bad-folders"].beginArray(); 1272 for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray();
1145 folder_it != content["bad-folders"].endArray(); 1273 folder_it != content["bad_folders"].endArray();
1146 ++folder_it) 1274 ++folder_it)
1147 { 1275 {
1148 LLSD folder_sd = *folder_it; 1276 LLSD folder_sd = *folder_it;
1149 1277
1150 //These folders failed on the dataserver. We probably don't want to retry them. 1278 //These folders failed on the dataserver. We probably don't want to retry them.
1151 llinfos << "Folder " << folder_sd["folder-id"].asString() 1279 llinfos << "Folder " << folder_sd["folder_id"].asString()
1152 << "Error: " << folder_sd["error"].asString() << llendl; 1280 << "Error: " << folder_sd["error"].asString() << llendl;
1153 } 1281 }
1154 } 1282 }
1155 1283
1156 LLInventoryModel::incrBulkFetch(-1); 1284 LLInventoryModel::incrBulkFetch(-1);
1157 1285
1158 if (isBulkFetchProcessingComplete()) 1286 if (LLInventoryModel::isBulkFetchProcessingComplete())
1159 { 1287 {
1160 llinfos << "Inventory fetch completed" << llendl; 1288 llinfos << "Inventory fetch completed" << llendl;
1161 if (sFullFetchStarted) 1289 if (LLInventoryModel::sFullFetchStarted)
1162 { 1290 {
1163 sAllFoldersFetched = TRUE; 1291 LLInventoryModel::sAllFoldersFetched = TRUE;
1164 } 1292 }
1165 stopBackgroundFetch(); 1293 LLInventoryModel::stopBackgroundFetch();
1166 } 1294 }
1167 1295
1168 gInventory.notifyObservers(); 1296 gInventory.notifyObservers("fetchDescendents");
1169} 1297}
1170 1298
1171//If we get back an error (not found, etc...), handle it here 1299//If we get back an error (not found, etc...), handle it here
1172void LLInventoryModel::fetchDescendentsResponder::error(U32 status, const std::string& reason) 1300void fetchDescendentsResponder::error(U32 status, const std::string& reason)
1173{ 1301{
1174 llinfos << "fetchDescendentsResponder::error " 1302 llinfos << "fetchDescendentsResponder::error "
1175 << status << ": " << reason << llendl; 1303 << status << ": " << reason << llendl;
@@ -1183,61 +1311,22 @@ void LLInventoryModel::fetchDescendentsResponder::error(U32 status, const std::s
1183 ++folder_it) 1311 ++folder_it)
1184 { 1312 {
1185 LLSD folder_sd = *folder_it; 1313 LLSD folder_sd = *folder_it;
1186 sRetrySD["folders"].append(folder_sd); 1314 LLUUID folder_id = folder_sd["folder_id"];
1187 } 1315 sFetchQueue.push_front(folder_id);
1188 sMinTimeBetweenFetches = 10.0f; //Add 10 seconds for every time out in this sequence.
1189
1190 if (!sRetryDialog) //The dialog isn't up. Prompt the resident.
1191 {
1192 sRetryDialog = gViewerWindow->alertXml("RetryFetchInventoryDescendents", onClickRetry, this);
1193 } 1316 }
1194 } 1317 }
1195 else 1318 else
1196 { 1319 {
1197 if (isBulkFetchProcessingComplete()) 1320 if (LLInventoryModel::isBulkFetchProcessingComplete())
1198 { 1321 {
1199 if (sFullFetchStarted) 1322 if (LLInventoryModel::sFullFetchStarted)
1200 { 1323 {
1201 sAllFoldersFetched = TRUE; 1324 LLInventoryModel::sAllFoldersFetched = TRUE;
1202 } 1325 }
1203 stopBackgroundFetch(); 1326 LLInventoryModel::stopBackgroundFetch();
1204 } 1327 }
1205 } 1328 }
1206 gInventory.notifyObservers(); 1329 gInventory.notifyObservers("fetchDescendents");
1207}
1208
1209void LLInventoryModel::fetchDescendentsResponder::onClickRetry(S32 option, void* userdata)
1210{
1211 if (option == 0)
1212 {
1213 std::string url;
1214
1215 LLViewerRegion * agent_region = gAgent.getRegion();
1216 if (agent_region)
1217 {
1218 url = agent_region->getCapability("FetchInventoryDescendents");
1219 }
1220
1221 if (!url.empty()) //Capability found. Build up LLSD and use it.
1222 {
1223 LLSD body = sRetrySD;
1224 LLInventoryModel::incrBulkFetch(1);
1225 LLHTTPClient::post(url, body, new LLInventoryModel::fetchDescendentsResponder(body),300);
1226 }
1227 }
1228 else
1229 {
1230 if (isBulkFetchProcessingComplete())
1231 {
1232 if (sFullFetchStarted)
1233 {
1234 sAllFoldersFetched = TRUE;
1235 }
1236 stopBackgroundFetch();
1237 }
1238 }
1239 sRetryDialog=NULL;
1240 sRetrySD.clear();
1241} 1330}
1242 1331
1243//static Bundle up a bunch of requests to send all at once. 1332//static Bundle up a bunch of requests to send all at once.
@@ -1250,7 +1339,7 @@ void LLInventoryModel::bulkFetch(std::string url)
1250 1339
1251 S16 max_concurrent_fetches=8; 1340 S16 max_concurrent_fetches=8;
1252 F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely. 1341 F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely.
1253 if (sMinTimeBetweenFetches <= new_min_time) sMinTimeBetweenFetches=new_min_time; //HACK! See above. 1342 if (sMinTimeBetweenFetches < new_min_time) sMinTimeBetweenFetches=new_min_time; //HACK! See above.
1254 1343
1255 if(gDisconnected 1344 if(gDisconnected
1256 || sBulkFetchCount > max_concurrent_fetches 1345 || sBulkFetchCount > max_concurrent_fetches
@@ -1263,84 +1352,83 @@ void LLInventoryModel::bulkFetch(std::string url)
1263 //redundant requests. When we get rid of the old code entirely, we can change 1352 //redundant requests. When we get rid of the old code entirely, we can change
1264 //the dequeue to a map. In the new model, there is no benefit to queue order. 1353 //the dequeue to a map. In the new model, there is no benefit to queue order.
1265 U32 folder_count=0; 1354 U32 folder_count=0;
1266 U32 max_batch_size=10; 1355 U32 max_batch_size=5;
1267 while( !(sFetchQueue.empty() ) ) 1356
1268 { 1357 U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1;
1269 LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front()); 1358
1270 1359 LLSD body;
1271 if (cat) 1360 LLSD body_lib;
1272 { 1361 while( !(sFetchQueue.empty() ) && (folder_count < max_batch_size) )
1273 if ( !gInventory.isCategoryComplete(cat->getUUID()) ) //grab this folder. 1362 {
1274 { 1363 if (sFetchQueue.front().isNull()) //DEV-17797
1275 sBulkFetchMap[(cat->getUUID())] = cat; 1364 {
1276 } 1365 LLSD folder_sd;
1277 else if (sFullFetchStarted) 1366 folder_sd["folder_id"] = LLUUID::null.asString();
1278 { //Already have this folder but append child folders to list. 1367 folder_sd["owner_id"] = gAgent.getID();
1279 // add all children to queue 1368 folder_sd["sort_order"] = (LLSD::Integer)sort_order;
1280 parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID()); 1369 folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE;
1281 if (cat_it != gInventory.mParentChildCategoryTree.end()) 1370 folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
1282 { 1371 body["folders"].append(folder_sd);
1283 cat_array_t* child_categories = cat_it->second; 1372 folder_count++;
1284 1373 }
1285 for (S32 child_num = 0; child_num < child_categories->count(); child_num++) 1374 else
1286 { 1375 {
1287 sFetchQueue.push_back(child_categories->get(child_num)->getUUID()); 1376
1288 }
1289 }
1290 1377
1291 } 1378 LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());
1292 } 1379
1380 if (cat)
1381 {
1382 if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
1383 {
1384 LLSD folder_sd;
1385 folder_sd["folder_id"] = cat->getUUID();
1386 folder_sd["owner_id"] = cat->getOwnerID();
1387 folder_sd["sort_order"] = (LLSD::Integer)sort_order;
1388 folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted;
1389 folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
1390
1391 if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID())
1392 body_lib["folders"].append(folder_sd);
1393 else
1394 body["folders"].append(folder_sd);
1395 folder_count++;
1396 }
1397 if (sFullFetchStarted)
1398 { //Already have this folder but append child folders to list.
1399 // add all children to queue
1400 parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID());
1401 if (cat_it != gInventory.mParentChildCategoryTree.end())
1402 {
1403 cat_array_t* child_categories = cat_it->second;
1404
1405 for (S32 child_num = 0; child_num < child_categories->count(); child_num++)
1406 {
1407 sFetchQueue.push_back(child_categories->get(child_num)->getUUID());
1408 }
1409 }
1410
1411 }
1412 }
1413 }
1293 sFetchQueue.pop_front(); 1414 sFetchQueue.pop_front();
1294 } 1415 }
1295 1416
1296
1297 if (!sBulkFetchMap.empty()) //There's stuff to fetch.
1298 {
1299 U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1;
1300
1301 LLSD body;
1302
1303 cat_map_t::iterator iter=sBulkFetchMap.begin();
1304 while( iter!=sBulkFetchMap.end() && (folder_count < max_batch_size) )
1305 {
1306 LLViewerInventoryCategory* cat = iter->second;
1307
1308 if (cat && !gInventory.isCategoryComplete(cat->getUUID()) ) //Category exists
1309 {
1310 BOOL fetchItems=TRUE;
1311 if ( sFullFetchStarted
1312 && gInventory.isCategoryComplete(cat->getUUID()) )
1313 {
1314 fetchItems=FALSE;
1315 }
1316
1317 LLSD folder_sd;
1318 folder_sd["folder-id"] = cat->getUUID();
1319 folder_sd["owner-id"] = cat->getOwnerID();
1320 folder_sd["sort-order"] = (LLSD::Integer)sort_order;
1321 folder_sd["fetch-folders"] = (LLSD::Boolean)sFullFetchStarted;
1322 folder_sd["fetch-items"] = (LLSD::Boolean)fetchItems;
1323 body["folders"].append(folder_sd);
1324
1325 folder_count++;
1326 }
1327 sBulkFetchMap.erase(iter);
1328 iter=sBulkFetchMap.begin();
1329 }
1330
1331 if (iter == sBulkFetchMap.end()) sBulkFetchMap.clear();
1332
1333 if (folder_count > 0) 1417 if (folder_count > 0)
1334 { 1418 {
1335 sBulkFetchCount++; 1419 sBulkFetchCount++;
1336 1420 if (body["folders"].size())
1337 LLHTTPClient::post(url, body, new LLInventoryModel::fetchDescendentsResponder(body)); 1421 {
1422 LLHTTPClient::post(url, body, new fetchDescendentsResponder(body),300.0);
1423 }
1424 if (body_lib["folders"].size())
1425 {
1426 std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents");
1427 LLHTTPClient::post(url_lib, body_lib, new fetchDescendentsResponder(body_lib),300.0);
1428 }
1338 sFetchTimer.reset(); 1429 sFetchTimer.reset();
1339 } 1430 }
1340 1431 else if (isBulkFetchProcessingComplete())
1341 }
1342
1343 if (isBulkFetchProcessingComplete())
1344 { 1432 {
1345 if (sFullFetchStarted) 1433 if (sFullFetchStarted)
1346 { 1434 {
@@ -1391,6 +1479,14 @@ void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id)
1391} 1479}
1392 1480
1393//static 1481//static
1482void LLInventoryModel::findLostItems()
1483{
1484 sBackgroundFetchActive = TRUE;
1485 sFetchQueue.push_back(LLUUID::null);
1486 gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
1487}
1488
1489//static
1394void LLInventoryModel::stopBackgroundFetch() 1490void LLInventoryModel::stopBackgroundFetch()
1395{ 1491{
1396 if (sBackgroundFetchActive) 1492 if (sBackgroundFetchActive)
@@ -1409,14 +1505,7 @@ void LLInventoryModel::backgroundFetch(void*)
1409 if (sBackgroundFetchActive) 1505 if (sBackgroundFetchActive)
1410 { 1506 {
1411 //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.
1412 std::string url; 1508 std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
1413
1414 LLViewerRegion * agent_region = gAgent.getRegion();
1415 if (agent_region)
1416 {
1417 url = agent_region->getCapability("FetchInventoryDescendents");
1418 }
1419
1420 if (!url.empty()) 1509 if (!url.empty())
1421 { 1510 {
1422 bulkFetch(url); 1511 bulkFetch(url);
@@ -3373,12 +3462,72 @@ bool LLInventoryFetchObserver::isEverythingComplete() const
3373 return mIncomplete.empty(); 3462 return mIncomplete.empty();
3374} 3463}
3375 3464
3465void fetch_items_from_llsd(const LLSD& items_llsd)
3466{
3467 if (!items_llsd.size()) return;
3468 LLSD body;
3469 body[0]["cap_name"] = "FetchInventory";
3470 body[1]["cap_name"] = "FetchLib";
3471 for (S32 i=0; i<items_llsd.size();i++)
3472 {
3473 if (items_llsd[i]["owner_id"].asString() == gAgent.getID().asString())
3474 {
3475 body[0]["items"].append(items_llsd[i]);
3476 continue;
3477 }
3478 if (items_llsd[i]["owner_id"].asString() == ALEXANDRIA_LINDEN_ID.asString())
3479 {
3480 body[1]["items"].append(items_llsd[i]);
3481 continue;
3482 }
3483 }
3484
3485 for (S32 i=0; i<body.size(); i++)
3486 {
3487 if (0 >= body[i].size()) continue;
3488 std::string url = gAgent.getRegion()->getCapability(body[i]["cap_name"].asString());
3489
3490 if (!url.empty())
3491 {
3492 body[i]["agent_id"] = gAgent.getID();
3493 LLHTTPClient::post(url, body[i], new LLInventoryModel::fetchInventoryResponder(body[i]));
3494 break;
3495 }
3496
3497 LLMessageSystem* msg = gMessageSystem;
3498 BOOL start_new_message = TRUE;
3499 for (S32 j=0; j<body[i]["items"].size(); j++)
3500 {
3501 LLSD item_entry = body[i]["items"][j];
3502 if(start_new_message)
3503 {
3504 start_new_message = FALSE;
3505 msg->newMessageFast(_PREHASH_FetchInventory);
3506 msg->nextBlockFast(_PREHASH_AgentData);
3507 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
3508 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3509 }
3510 msg->nextBlockFast(_PREHASH_InventoryData);
3511 msg->addUUIDFast(_PREHASH_OwnerID, item_entry["owner_id"].asUUID());
3512 msg->addUUIDFast(_PREHASH_ItemID, item_entry["item_id"].asUUID());
3513 if(msg->isSendFull(NULL))
3514 {
3515 start_new_message = TRUE;
3516 gAgent.sendReliableMessage();
3517 }
3518 }
3519 if(!start_new_message)
3520 {
3521 gAgent.sendReliableMessage();
3522 }
3523 }
3524}
3525
3376void LLInventoryFetchObserver::fetchItems( 3526void LLInventoryFetchObserver::fetchItems(
3377 const LLInventoryFetchObserver::item_ref_t& ids) 3527 const LLInventoryFetchObserver::item_ref_t& ids)
3378{ 3528{
3379 LLMessageSystem* msg = gMessageSystem;
3380 BOOL start_new_message = TRUE;
3381 LLUUID owner_id; 3529 LLUUID owner_id;
3530 LLSD items_llsd;
3382 for(item_ref_t::const_iterator it = ids.begin(); it < ids.end(); ++it) 3531 for(item_ref_t::const_iterator it = ids.begin(); it < ids.end(); ++it)
3383 { 3532 {
3384 LLViewerInventoryItem* item = gInventory.getItem(*it); 3533 LLViewerInventoryItem* item = gInventory.getItem(*it);
@@ -3400,31 +3549,18 @@ void LLInventoryFetchObserver::fetchItems(
3400 // assume it's agent inventory. 3549 // assume it's agent inventory.
3401 owner_id = gAgent.getID(); 3550 owner_id = gAgent.getID();
3402 } 3551 }
3403 3552
3404 // It's incomplete, so put it on the incomplete container, and 3553 // It's incomplete, so put it on the incomplete container, and
3405 // pack this on the message. 3554 // pack this on the message.
3406 mIncomplete.push_back(*it); 3555 mIncomplete.push_back(*it);
3407 if(start_new_message) 3556
3408 { 3557 // Prepare the data to fetch
3409 start_new_message = FALSE; 3558 LLSD item_entry;
3410 msg->newMessageFast(_PREHASH_FetchInventory); 3559 item_entry["owner_id"] = owner_id;
3411 msg->nextBlockFast(_PREHASH_AgentData); 3560 item_entry["item_id"] = (*it);
3412 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 3561 items_llsd.append(item_entry);
3413 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3414 }
3415 msg->nextBlockFast(_PREHASH_InventoryData);
3416 msg->addUUIDFast(_PREHASH_OwnerID, owner_id);
3417 msg->addUUIDFast(_PREHASH_ItemID, (*it));
3418 if(msg->isSendFull(NULL))
3419 {
3420 start_new_message = TRUE;
3421 gAgent.sendReliableMessage();
3422 }
3423 }
3424 if(!start_new_message)
3425 {
3426 gAgent.sendReliableMessage();
3427 } 3562 }
3563 fetch_items_from_llsd(items_llsd);
3428} 3564}
3429 3565
3430// virtual 3566// virtual
@@ -3579,9 +3715,8 @@ void LLInventoryFetchComboObserver::fetch(
3579 // descendent of an incomplete folder because the item will show 3715 // descendent of an incomplete folder because the item will show
3580 // up in an inventory descendents message soon enough so we do not 3716 // up in an inventory descendents message soon enough so we do not
3581 // have to fetch it individually. 3717 // have to fetch it individually.
3718 LLSD items_llsd;
3582 LLUUID owner_id; 3719 LLUUID owner_id;
3583 LLMessageSystem* msg = gMessageSystem;
3584 bool start_new_message = true;
3585 for(item_ref_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit) 3720 for(item_ref_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit)
3586 { 3721 {
3587 LLViewerInventoryItem* item = gInventory.getItem(*iit); 3722 LLViewerInventoryItem* item = gInventory.getItem(*iit);
@@ -3604,33 +3739,17 @@ void LLInventoryFetchComboObserver::fetch(
3604 } 3739 }
3605 if(std::find(mIncompleteFolders.begin(), mIncompleteFolders.end(), item->getParentUUID()) == mIncompleteFolders.end()) 3740 if(std::find(mIncompleteFolders.begin(), mIncompleteFolders.end(), item->getParentUUID()) == mIncompleteFolders.end())
3606 { 3741 {
3607 lldebugs << "fetching item " << *iit << llendl; 3742 LLSD item_entry;
3608 if(start_new_message) 3743 item_entry["owner_id"] = owner_id;
3609 { 3744 item_entry["item_id"] = (*iit);
3610 start_new_message = false; 3745 items_llsd.append(item_entry);
3611 msg->newMessageFast(_PREHASH_FetchInventory);
3612 msg->nextBlockFast(_PREHASH_AgentData);
3613 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
3614 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3615 }
3616 msg->nextBlockFast(_PREHASH_InventoryData);
3617 msg->addUUIDFast(_PREHASH_OwnerID, owner_id);
3618 msg->addUUIDFast(_PREHASH_ItemID, (*iit));
3619 if(msg->isSendFullFast(_PREHASH_InventoryData))
3620 {
3621 start_new_message = true;
3622 gAgent.sendReliableMessage();
3623 }
3624 } 3746 }
3625 else 3747 else
3626 { 3748 {
3627 lldebugs << "not worrying about " << *iit << llendl; 3749 lldebugs << "not worrying about " << *iit << llendl;
3628 } 3750 }
3629 } 3751 }
3630 if(!start_new_message) 3752 fetch_items_from_llsd(items_llsd);
3631 {
3632 gAgent.sendReliableMessage();
3633 }
3634} 3753}
3635 3754
3636void LLInventoryExistenceObserver::watchItem(const LLUUID& id) 3755void LLInventoryExistenceObserver::watchItem(const LLUUID& id)
@@ -3676,7 +3795,17 @@ void LLInventoryAddedObserver::changed(U32 mask)
3676 // the network, figure out which item was updated. 3795 // the network, figure out which item was updated.
3677 // Code from Gigs Taggert, sin allowed by JC. 3796 // Code from Gigs Taggert, sin allowed by JC.
3678 LLMessageSystem* msg = gMessageSystem; 3797 LLMessageSystem* msg = gMessageSystem;
3679 std::string msg_name = msg->getMessageName(); 3798
3799 std::string msg_name;
3800 if (mMessageName.empty())
3801 {
3802 msg_name = msg->getMessageName();
3803 }
3804 else
3805 {
3806 msg_name = mMessageName;
3807 }
3808
3680 if (msg_name.empty()) 3809 if (msg_name.empty())
3681 { 3810 {
3682 return; 3811 return;
diff --git a/linden/indra/newview/llinventorymodel.h b/linden/indra/newview/llinventorymodel.h
index 8017410..d2be761 100644
--- a/linden/indra/newview/llinventorymodel.h
+++ b/linden/indra/newview/llinventorymodel.h
@@ -69,6 +69,7 @@ public:
69 }; 69 };
70 virtual ~LLInventoryObserver() {}; 70 virtual ~LLInventoryObserver() {};
71 virtual void changed(U32 mask) = 0; 71 virtual void changed(U32 mask) = 0;
72 std::string mMessageName; // used by Agent Inventory Service only. [DEV-20328]
72}; 73};
73 74
74//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 75//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -110,20 +111,17 @@ public:
110 LLInventoryModel(); 111 LLInventoryModel();
111 ~LLInventoryModel(); 112 ~LLInventoryModel();
112 113
113 class fetchDescendentsResponder: public LLHTTPClient::Responder 114 class fetchInventoryResponder: public LLHTTPClient::Responder
114 { 115 {
115 public: 116 public:
116 fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; 117 fetchInventoryResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
117 void result(const LLSD& content); 118 void result(const LLSD& content);
118 void error(U32 status, const std::string& reason); 119 void error(U32 status, const std::string& reason);
119 static void onClickRetry(S32 option, void* userdata); 120
120 static void appendRetryList(LLSD retry_sd); 121 public:
121 public: 122 typedef std::vector<LLViewerInventoryCategory*> folder_ref_t;
122 typedef std::vector<LLViewerInventoryCategory*> folder_ref_t; 123 protected:
123 protected: 124 LLSD mRequestSD;
124 LLSD mRequestSD;
125 static LLSD sRetrySD;
126 static LLAlertDialog *sRetryDialog;
127 }; 125 };
128 126
129 // 127 //
@@ -268,7 +266,8 @@ public:
268 // Call this method when it's time to update everyone on a new 266 // Call this method when it's time to update everyone on a new
269 // state, by default, the inventory model will not update 267 // state, by default, the inventory model will not update
270 // observers automatically. 268 // observers automatically.
271 void notifyObservers(); 269 // The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
270 void notifyObservers(const std::string service_name="");
272 271
273 // This allows outsiders to tell the inventory if something has 272 // This allows outsiders to tell the inventory if something has
274 // been changed 'under the hood', but outside the control of the 273 // been changed 'under the hood', but outside the control of the
@@ -370,7 +369,7 @@ public:
370 // start and stop background breadth-first fetching of inventory contents 369 // start and stop background breadth-first fetching of inventory contents
371 // this gets triggered when performing a filter-search 370 // this gets triggered when performing a filter-search
372 static void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); // start fetch process 371 static void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); // start fetch process
373 static void stopBackgroundFetch(); // stop fetch process 372 static void findLostItems();
374 static BOOL backgroundFetchActive(); 373 static BOOL backgroundFetchActive();
375 static bool isEverythingFetched(); 374 static bool isEverythingFetched();
376 static void backgroundFetch(void*); // background fetch idle function 375 static void backgroundFetch(void*); // background fetch idle function
@@ -419,7 +418,6 @@ protected:
419 static void processInventoryDescendents(LLMessageSystem* msg, void**); 418 static void processInventoryDescendents(LLMessageSystem* msg, void**);
420 static void processMoveInventoryItem(LLMessageSystem* msg, void**); 419 static void processMoveInventoryItem(LLMessageSystem* msg, void**);
421 static void processFetchInventoryReply(LLMessageSystem* msg, void**); 420 static void processFetchInventoryReply(LLMessageSystem* msg, void**);
422 static bool isBulkFetchProcessingComplete();
423 421
424 bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting); 422 bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting);
425 423
@@ -460,11 +458,8 @@ protected:
460 observer_list_t mObservers; 458 observer_list_t mObservers;
461 459
462 // completing the fetch once per session should be sufficient 460 // completing the fetch once per session should be sufficient
463 static cat_map_t sBulkFetchMap;
464 static BOOL sBackgroundFetchActive; 461 static BOOL sBackgroundFetchActive;
465 static BOOL sTimelyFetchPending; 462 static BOOL sTimelyFetchPending;
466 static BOOL sAllFoldersFetched;
467 static BOOL sFullFetchStarted;
468 static S32 sNumFetchRetries; 463 static S32 sNumFetchRetries;
469 static LLFrameTimer sFetchTimer; 464 static LLFrameTimer sFetchTimer;
470 static F32 sMinTimeBetweenFetches; 465 static F32 sMinTimeBetweenFetches;
@@ -477,6 +472,11 @@ protected:
477public: 472public:
478 // *NOTE: DEBUG functionality 473 // *NOTE: DEBUG functionality
479 void dumpInventory(); 474 void dumpInventory();
475 static bool isBulkFetchProcessingComplete();
476 static void stopBackgroundFetch(); // stop fetch process
477
478 static BOOL sFullFetchStarted;
479 static BOOL sAllFoldersFetched;
480}; 480};
481 481
482// a special inventory model for the agent 482// a special inventory model for the agent
diff --git a/linden/indra/newview/llmaniptranslate.h b/linden/indra/newview/llmaniptranslate.h
index 7784860..383f4da 100644
--- a/linden/indra/newview/llmaniptranslate.h
+++ b/linden/indra/newview/llmaniptranslate.h
@@ -113,7 +113,7 @@ private:
113 LLVector3d mDragCursorStartGlobal; 113 LLVector3d mDragCursorStartGlobal;
114 LLVector3d mDragSelectionStartGlobal; 114 LLVector3d mDragSelectionStartGlobal;
115 LLTimer mUpdateTimer; 115 LLTimer mUpdateTimer;
116 typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t; 116 typedef std::multiset<ManipulatorHandle*, compare_manipulators> minpulator_list_t;
117 minpulator_list_t mProjectedManipulators; 117 minpulator_list_t mProjectedManipulators;
118 LLVector4 mManipulatorVertices[18]; 118 LLVector4 mManipulatorVertices[18];
119 F32 mSnapOffsetMeters; 119 F32 mSnapOffsetMeters;
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index 22dee9d..ee853fe 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -604,9 +604,13 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
604 buffer = region->getHost().getString(); 604 buffer = region->getHost().getString();
605 msg.append(buffer); 605 msg.append(buffer);
606#endif 606#endif
607 // *TODO: put this under the control of XUI so it can be 607 // *TODO:
608 // translated. 608 // - put this under the control of XUI so it can be translated.
609 msg.append("\n(Double-click to open Map)"); 609
610 if ( gSavedSettings.getBOOL( "MiniMapTeleport" ))
611 msg.append("\n(Double-click to teleport)");
612 else
613 msg.append("\n(Double-click to open Map)");
610 614
611 S32 SLOP = 4; 615 S32 SLOP = 4;
612 localPointToScreen( 616 localPointToScreen(
@@ -767,7 +771,14 @@ void LLNetMap::createObjectImage()
767 771
768BOOL LLNetMap::handleDoubleClick( S32 x, S32 y, MASK mask ) 772BOOL LLNetMap::handleDoubleClick( S32 x, S32 y, MASK mask )
769{ 773{
770 LLFloaterWorldMap::show(NULL, FALSE); 774 if (gSavedSettings.getBOOL( "MiniMapTeleport" ))
775 {
776 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
777 gAgent.teleportViaLocation( viewPosToGlobal(x,y) );
778 }
779 else
780 LLFloaterWorldMap::show(NULL, FALSE);
781
771 return TRUE; 782 return TRUE;
772} 783}
773 784
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index 4742627..d1c34f1 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -35,6 +35,7 @@
35#include "llpanelface.h" 35#include "llpanelface.h"
36 36
37// library includes 37// library includes
38#include "llcalc.h"
38#include "llerror.h" 39#include "llerror.h"
39#include "llfocusmgr.h" 40#include "llfocusmgr.h"
40#include "llrect.h" 41#include "llrect.h"
@@ -60,6 +61,7 @@
60#include "llviewermedia.h" 61#include "llviewermedia.h"
61#include "llviewerobject.h" 62#include "llviewerobject.h"
62#include "llviewerstats.h" 63#include "llviewerstats.h"
64#include "llviewerwindow.h"
63#include "lluictrlfactory.h" 65#include "lluictrlfactory.h"
64 66
65// 67//
@@ -179,6 +181,7 @@ BOOL LLPanelFace::postBuild()
179 childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this); 181 childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this);
180 childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this); 182 childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this);
181 childSetAction("button align",onClickAutoFix,this); 183 childSetAction("button align",onClickAutoFix,this);
184 childSetAction("texture_math_constants",onClickTextureConstants,this);
182 185
183 clearCtrls(); 186 clearCtrls();
184 187
@@ -381,6 +384,7 @@ void LLPanelFace::sendTextureInfo()
381void LLPanelFace::getState() 384void LLPanelFace::getState()
382{ 385{
383 LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); 386 LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
387 LLCalc* calcp = LLCalc::getInstance();
384 388
385 if( objectp 389 if( objectp
386 && objectp->getPCode() == LL_PCODE_VOLUME 390 && objectp->getPCode() == LL_PCODE_VOLUME
@@ -754,6 +758,16 @@ void LLPanelFace::getState()
754 childSetEnabled("button apply",enabled); 758 childSetEnabled("button apply",enabled);
755 } 759 }
756 } 760 }
761 childSetEnabled("texture_math_constants",true);
762
763 // Set variable values for numeric expressions
764 calcp->setVar(LLCalc::TEX_U_SCALE, childGetValue("TexScaleU").asReal());
765 calcp->setVar(LLCalc::TEX_V_SCALE, childGetValue("TexScaleV").asReal());
766 calcp->setVar(LLCalc::TEX_U_OFFSET, childGetValue("TexOffsetU").asReal());
767 calcp->setVar(LLCalc::TEX_V_OFFSET, childGetValue("TexOffsetV").asReal());
768 calcp->setVar(LLCalc::TEX_ROTATION, childGetValue("TexRot").asReal());
769 calcp->setVar(LLCalc::TEX_TRANSPARENCY, childGetValue("ColorTrans").asReal());
770 calcp->setVar(LLCalc::TEX_GLOW, childGetValue("glow").asReal());
757 } 771 }
758 else 772 else
759 { 773 {
@@ -787,6 +801,17 @@ void LLPanelFace::getState()
787 801
788 childSetEnabled("button align",FALSE); 802 childSetEnabled("button align",FALSE);
789 childSetEnabled("button apply",FALSE); 803 childSetEnabled("button apply",FALSE);
804
805 childSetEnabled("texture_math_constants",false);
806
807 // Set variable values for numeric expressions
808 calcp->clearVar(LLCalc::TEX_U_SCALE);
809 calcp->clearVar(LLCalc::TEX_V_SCALE);
810 calcp->clearVar(LLCalc::TEX_U_OFFSET);
811 calcp->clearVar(LLCalc::TEX_V_OFFSET);
812 calcp->clearVar(LLCalc::TEX_ROTATION);
813 calcp->clearVar(LLCalc::TEX_TRANSPARENCY);
814 calcp->clearVar(LLCalc::TEX_GLOW);
790 } 815 }
791} 816}
792 817
@@ -969,3 +994,9 @@ void LLPanelFace::onClickAutoFix(void* userdata)
969 LLPanelFaceSendFunctor sendfunc; 994 LLPanelFaceSendFunctor sendfunc;
970 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc); 995 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc);
971} 996}
997
998// static
999void LLPanelFace::onClickTextureConstants(void *)
1000{
1001 gViewerWindow->alertXml("ClickTextureConstants");
1002} \ No newline at end of file
diff --git a/linden/indra/newview/llpanelface.h b/linden/indra/newview/llpanelface.h
index 230772b..b977583 100644
--- a/linden/indra/newview/llpanelface.h
+++ b/linden/indra/newview/llpanelface.h
@@ -88,6 +88,7 @@ protected:
88 88
89 static void onClickApply(void*); 89 static void onClickApply(void*);
90 static void onClickAutoFix(void*); 90 static void onClickAutoFix(void*);
91 static void onClickTextureConstants(void *);
91 static F32 valueGlow(LLViewerObject* object, S32 face); 92 static F32 valueGlow(LLViewerObject* object, S32 face);
92}; 93};
93 94
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index 256f02a..47bc60e 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -199,6 +199,7 @@ void LLPanelGeneral::refresh()
199 mChatOnlineNotification = gSavedSettings.getBOOL("ChatOnlineNotification"); 199 mChatOnlineNotification = gSavedSettings.getBOOL("ChatOnlineNotification");
200 mAFKTimeout = gSavedSettings.getF32("AFKTimeout"); 200 mAFKTimeout = gSavedSettings.getF32("AFKTimeout");
201 mMiniMapRotate = gSavedSettings.getBOOL("MiniMapRotate"); 201 mMiniMapRotate = gSavedSettings.getBOOL("MiniMapRotate");
202 mMiniMapTeleport = gSavedSettings.getBOOL("MiniMapTeleport");
202 mNotifyMoney = gSavedSettings.getBOOL("NotifyMoneyChange"); 203 mNotifyMoney = gSavedSettings.getBOOL("NotifyMoneyChange");
203 mUseDefaultColor = gSavedSettings.getBOOL("UseDefaultColorPicker"); 204 mUseDefaultColor = gSavedSettings.getBOOL("UseDefaultColorPicker");
204 mEffectColor = gSavedSettings.getColor4("EffectColor"); 205 mEffectColor = gSavedSettings.getColor4("EffectColor");
@@ -223,6 +224,7 @@ void LLPanelGeneral::cancel()
223 gSavedSettings.setBOOL("ChatOnlineNotification", mChatOnlineNotification ); 224 gSavedSettings.setBOOL("ChatOnlineNotification", mChatOnlineNotification );
224 gSavedSettings.setF32("AFKTimeout", mAFKTimeout ); 225 gSavedSettings.setF32("AFKTimeout", mAFKTimeout );
225 gSavedSettings.setBOOL("MiniMapRotate", mMiniMapRotate ); 226 gSavedSettings.setBOOL("MiniMapRotate", mMiniMapRotate );
227 gSavedSettings.setBOOL("MiniMapTeleport", mMiniMapTeleport);
226 gSavedSettings.setBOOL("NotifyMoneyChange", mNotifyMoney ); 228 gSavedSettings.setBOOL("NotifyMoneyChange", mNotifyMoney );
227 gSavedSettings.setBOOL("UseDefaultColorPicker", mUseDefaultColor ); 229 gSavedSettings.setBOOL("UseDefaultColorPicker", mUseDefaultColor );
228 gSavedSettings.setBOOL("ShowSearchBar", mShowSearch); 230 gSavedSettings.setBOOL("ShowSearchBar", mShowSearch);
diff --git a/linden/indra/newview/llpanelgeneral.h b/linden/indra/newview/llpanelgeneral.h
index a7b526d..95a95f8 100644
--- a/linden/indra/newview/llpanelgeneral.h
+++ b/linden/indra/newview/llpanelgeneral.h
@@ -71,6 +71,7 @@ protected:
71 F32 mUIScaleFactor; 71 F32 mUIScaleFactor;
72 BOOL mUIAutoScale; 72 BOOL mUIAutoScale;
73 BOOL mMiniMapRotate; 73 BOOL mMiniMapRotate;
74 BOOL mMiniMapTeleport;
74 S32 mOldCrashBehavior; 75 S32 mOldCrashBehavior;
75 std::string mLoginLocation; 76 std::string mLoginLocation;
76 std::string mLanguage; 77 std::string mLanguage;
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index cc9d969..5cd8690 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -46,6 +46,7 @@
46// project includes 46// project includes
47#include "llagent.h" 47#include "llagent.h"
48#include "llbutton.h" 48#include "llbutton.h"
49#include "llcalc.h"
49#include "llcheckboxctrl.h" 50#include "llcheckboxctrl.h"
50#include "llcolorswatch.h" 51#include "llcolorswatch.h"
51#include "llcombobox.h" 52#include "llcombobox.h"
@@ -109,6 +110,9 @@ BOOL LLPanelObject::postBuild()
109 // Top 110 // Top
110 //-------------------------------------------------------- 111 //--------------------------------------------------------
111 112
113 // Build constant tipsheet
114 childSetAction("build_math_constants",onClickBuildConstants,this);
115
112 // Lock checkbox 116 // Lock checkbox
113 mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); 117 mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked");
114 childSetCommitCallback("checkbox locked",onCommitLock,this); 118 childSetCommitCallback("checkbox locked",onCommitLock,this);
@@ -341,6 +345,8 @@ void LLPanelObject::getState( )
341 } 345 }
342 } 346 }
343 347
348 LLCalc* calcp = LLCalc::getInstance();
349
344 LLVOVolume *volobjp = NULL; 350 LLVOVolume *volobjp = NULL;
345 if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) 351 if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME))
346 { 352 {
@@ -357,6 +363,7 @@ void LLPanelObject::getState( )
357 363
358 // Disable all text input fields 364 // Disable all text input fields
359 clearCtrls(); 365 clearCtrls();
366 calcp->clearAllVariables();
360 return; 367 return;
361 } 368 }
362 369
@@ -365,6 +372,7 @@ void LLPanelObject::getState( )
365 BOOL enable_scale = objectp->permMove() && objectp->permModify(); 372 BOOL enable_scale = objectp->permMove() && objectp->permModify();
366 BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); 373 BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
367 374
375 childSetEnabled("build_math_constants",true);
368 LLVector3 vec; 376 LLVector3 vec;
369 if (enable_move) 377 if (enable_move)
370 { 378 {
@@ -372,12 +380,18 @@ void LLPanelObject::getState( )
372 mCtrlPosX->set( vec.mV[VX] ); 380 mCtrlPosX->set( vec.mV[VX] );
373 mCtrlPosY->set( vec.mV[VY] ); 381 mCtrlPosY->set( vec.mV[VY] );
374 mCtrlPosZ->set( vec.mV[VZ] ); 382 mCtrlPosZ->set( vec.mV[VZ] );
383 calcp->setVar(LLCalc::X_POS, vec.mV[VX]);
384 calcp->setVar(LLCalc::Y_POS, vec.mV[VY]);
385 calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]);
375 } 386 }
376 else 387 else
377 { 388 {
378 mCtrlPosX->clear(); 389 mCtrlPosX->clear();
379 mCtrlPosY->clear(); 390 mCtrlPosY->clear();
380 mCtrlPosZ->clear(); 391 mCtrlPosZ->clear();
392 calcp->clearVar(LLCalc::X_POS);
393 calcp->clearVar(LLCalc::Y_POS);
394 calcp->clearVar(LLCalc::Z_POS);
381 } 395 }
382 396
383 397
@@ -392,12 +406,18 @@ void LLPanelObject::getState( )
392 mCtrlScaleX->set( vec.mV[VX] ); 406 mCtrlScaleX->set( vec.mV[VX] );
393 mCtrlScaleY->set( vec.mV[VY] ); 407 mCtrlScaleY->set( vec.mV[VY] );
394 mCtrlScaleZ->set( vec.mV[VZ] ); 408 mCtrlScaleZ->set( vec.mV[VZ] );
409 calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]);
410 calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]);
411 calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]);
395 } 412 }
396 else 413 else
397 { 414 {
398 mCtrlScaleX->clear(); 415 mCtrlScaleX->clear();
399 mCtrlScaleY->clear(); 416 mCtrlScaleY->clear();
400 mCtrlScaleZ->clear(); 417 mCtrlScaleZ->clear();
418 calcp->setVar(LLCalc::X_SCALE, 0.f);
419 calcp->setVar(LLCalc::Y_SCALE, 0.f);
420 calcp->setVar(LLCalc::Z_SCALE, 0.f);
401 } 421 }
402 422
403 mLabelSize->setEnabled( enable_scale ); 423 mLabelSize->setEnabled( enable_scale );
@@ -417,12 +437,18 @@ void LLPanelObject::getState( )
417 mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); 437 mCtrlRotX->set( mCurEulerDegrees.mV[VX] );
418 mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); 438 mCtrlRotY->set( mCurEulerDegrees.mV[VY] );
419 mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); 439 mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] );
440 calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]);
441 calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]);
442 calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]);
420 } 443 }
421 else 444 else
422 { 445 {
423 mCtrlRotX->clear(); 446 mCtrlRotX->clear();
424 mCtrlRotY->clear(); 447 mCtrlRotY->clear();
425 mCtrlRotZ->clear(); 448 mCtrlRotZ->clear();
449 calcp->clearVar(LLCalc::X_ROT);
450 calcp->clearVar(LLCalc::Y_ROT);
451 calcp->clearVar(LLCalc::Z_ROT);
426 } 452 }
427 453
428 mLabelRotation->setEnabled( enable_rotate ); 454 mLabelRotation->setEnabled( enable_rotate );
@@ -678,8 +704,9 @@ void LLPanelObject::getState( )
678 F32 end_t = volume_params.getEndT(); 704 F32 end_t = volume_params.getEndT();
679 705
680 // Hollowness 706 // Hollowness
681 F32 hollow = volume_params.getHollow(); 707 F32 hollow = 100.f * volume_params.getHollow();
682 mSpinHollow->set( 100.f * hollow ); 708 mSpinHollow->set( hollow );
709 calcp->setVar(LLCalc::HOLLOW, hollow);
683 710
684 // All hollow objects allow a shape to be selected. 711 // All hollow objects allow a shape to be selected.
685 if (hollow > 0.f) 712 if (hollow > 0.f)
@@ -732,6 +759,10 @@ void LLPanelObject::getState( )
732 mSpinCutEnd ->set( cut_end ); 759 mSpinCutEnd ->set( cut_end );
733 mCtrlPathBegin ->set( adv_cut_begin ); 760 mCtrlPathBegin ->set( adv_cut_begin );
734 mCtrlPathEnd ->set( adv_cut_end ); 761 mCtrlPathEnd ->set( adv_cut_end );
762 calcp->setVar(LLCalc::CUT_BEGIN, cut_begin);
763 calcp->setVar(LLCalc::CUT_END, cut_end);
764 calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin);
765 calcp->setVar(LLCalc::PATH_END, adv_cut_end);
735 766
736 // Twist 767 // Twist
737 F32 twist = volume_params.getTwist(); 768 F32 twist = volume_params.getTwist();
@@ -750,18 +781,24 @@ void LLPanelObject::getState( )
750 781
751 mSpinTwist ->set( twist ); 782 mSpinTwist ->set( twist );
752 mSpinTwistBegin ->set( twist_begin ); 783 mSpinTwistBegin ->set( twist_begin );
784 calcp->setVar(LLCalc::TWIST_END, twist);
785 calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin);
753 786
754 // Shear 787 // Shear
755 F32 shear_x = volume_params.getShearX(); 788 F32 shear_x = volume_params.getShearX();
756 F32 shear_y = volume_params.getShearY(); 789 F32 shear_y = volume_params.getShearY();
757 mSpinShearX->set( shear_x ); 790 mSpinShearX->set( shear_x );
758 mSpinShearY->set( shear_y ); 791 mSpinShearY->set( shear_y );
792 calcp->setVar(LLCalc::X_SHEAR, shear_x);
793 calcp->setVar(LLCalc::Y_SHEAR, shear_y);
759 794
760 // Taper 795 // Taper
761 F32 taper_x = volume_params.getTaperX(); 796 F32 taper_x = volume_params.getTaperX();
762 F32 taper_y = volume_params.getTaperY(); 797 F32 taper_y = volume_params.getTaperY();
763 mSpinTaperX->set( taper_x ); 798 mSpinTaperX->set( taper_x );
764 mSpinTaperY->set( taper_y ); 799 mSpinTaperY->set( taper_y );
800 calcp->setVar(LLCalc::X_TAPER, taper_x);
801 calcp->setVar(LLCalc::Y_TAPER, taper_y);
765 802
766 // Radius offset. 803 // Radius offset.
767 F32 radius_offset = volume_params.getRadiusOffset(); 804 F32 radius_offset = volume_params.getRadiusOffset();
@@ -791,10 +828,12 @@ void LLPanelObject::getState( )
791 } 828 }
792 } 829 }
793 mSpinRadiusOffset->set( radius_offset); 830 mSpinRadiusOffset->set( radius_offset);
831 calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset);
794 832
795 // Revolutions 833 // Revolutions
796 F32 revolutions = volume_params.getRevolutions(); 834 F32 revolutions = volume_params.getRevolutions();
797 mSpinRevolutions->set( revolutions ); 835 mSpinRevolutions->set( revolutions );
836 calcp->setVar(LLCalc::REVOLUTIONS, revolutions);
798 837
799 // Skew 838 // Skew
800 F32 skew = volume_params.getSkew(); 839 F32 skew = volume_params.getSkew();
@@ -819,6 +858,7 @@ void LLPanelObject::getState( )
819 } 858 }
820 } 859 }
821 mSpinSkew->set( skew ); 860 mSpinSkew->set( skew );
861 calcp->setVar(LLCalc::SKEW, skew);
822 } 862 }
823 863
824 // Compute control visibility, label names, and twist range. 864 // Compute control visibility, label names, and twist range.
@@ -924,6 +964,8 @@ void LLPanelObject::getState( )
924 case MI_RING: 964 case MI_RING:
925 mSpinScaleX->set( scale_x ); 965 mSpinScaleX->set( scale_x );
926 mSpinScaleY->set( scale_y ); 966 mSpinScaleY->set( scale_y );
967 calcp->setVar(LLCalc::X_HOLE, scale_x);
968 calcp->setVar(LLCalc::Y_HOLE, scale_y);
927 mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); 969 mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE);
928 mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); 970 mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X);
929 mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); 971 mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE);
@@ -934,6 +976,8 @@ void LLPanelObject::getState( )
934 { 976 {
935 mSpinScaleX->set( 1.f - scale_x ); 977 mSpinScaleX->set( 1.f - scale_x );
936 mSpinScaleY->set( 1.f - scale_y ); 978 mSpinScaleY->set( 1.f - scale_y );
979 calcp->setVar(LLCalc::X_HOLE, 1.f - scale_x);
980 calcp->setVar(LLCalc::Y_HOLE, 1.f - scale_y);
937 mSpinScaleX->setMinValue(-1.f); 981 mSpinScaleX->setMinValue(-1.f);
938 mSpinScaleX->setMaxValue(1.f); 982 mSpinScaleX->setMaxValue(1.f);
939 mSpinScaleY->setMinValue(-1.f); 983 mSpinScaleY->setMinValue(-1.f);
@@ -1148,7 +1192,7 @@ void LLPanelObject::getState( )
1148 mSculptTextureRevert = LLUUID::null; 1192 mSculptTextureRevert = LLUUID::null;
1149 } 1193 }
1150 1194
1151 1195
1152 //---------------------------------------------------------------------------- 1196 //----------------------------------------------------------------------------
1153 1197
1154 mObject = objectp; 1198 mObject = objectp;
@@ -1913,6 +1957,8 @@ void LLPanelObject::clearCtrls()
1913 childSetEnabled( "advanced_cut", FALSE ); 1957 childSetEnabled( "advanced_cut", FALSE );
1914 childSetEnabled( "advanced_dimple", FALSE ); 1958 childSetEnabled( "advanced_dimple", FALSE );
1915 childSetVisible("advanced_slice", FALSE); 1959 childSetVisible("advanced_slice", FALSE);
1960
1961 childSetEnabled("build_math_constants",false);
1916} 1962}
1917 1963
1918// 1964//
@@ -1954,6 +2000,9 @@ void LLPanelObject::onCommitRotation( LLUICtrl* ctrl, void* userdata )
1954 LLPanelObject* self = (LLPanelObject*) userdata; 2000 LLPanelObject* self = (LLPanelObject*) userdata;
1955 BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; 2001 BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ;
1956 self->sendRotation(btn_down); 2002 self->sendRotation(btn_down);
2003
2004 // Needed to ensure all rotations are shown consistently in range
2005 self->refresh();
1957} 2006}
1958 2007
1959// static 2008// static
@@ -2048,3 +2097,9 @@ void LLPanelObject::onCommitSculptType(LLUICtrl *ctrl, void* userdata)
2048 2097
2049 self->sendSculpt(); 2098 self->sendSculpt();
2050} 2099}
2100
2101// static
2102void LLPanelObject::onClickBuildConstants(void *)
2103{
2104 gViewerWindow->alertXml("ClickBuildConstants");
2105}
diff --git a/linden/indra/newview/llpanelobject.h b/linden/indra/newview/llpanelobject.h
index afdfd30..b72289c 100644
--- a/linden/indra/newview/llpanelobject.h
+++ b/linden/indra/newview/llpanelobject.h
@@ -83,6 +83,7 @@ public:
83 static BOOL onDropSculpt( LLUICtrl* ctrl, LLInventoryItem* item, void* ud); 83 static BOOL onDropSculpt( LLUICtrl* ctrl, LLInventoryItem* item, void* ud);
84 static void onCommitSculptType( LLUICtrl *ctrl, void* userdata); 84 static void onCommitSculptType( LLUICtrl *ctrl, void* userdata);
85 85
86 static void onClickBuildConstants(void *);
86 87
87protected: 88protected:
88 void getState(); 89 void getState();
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index c863d19..84a5ecd 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -2285,6 +2285,9 @@ bool idle_startup()
2285 } 2285 }
2286 } 2286 }
2287 2287
2288 //DEV-17797. get null folder. Any items found here moved to Lost and Found
2289 LLInventoryModel::findLostItems();
2290
2288 LLStartUp::setStartupState( STATE_PRECACHE ); 2291 LLStartUp::setStartupState( STATE_PRECACHE );
2289 timeout.reset(); 2292 timeout.reset();
2290 return FALSE; 2293 return FALSE;
diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp
index 6d9d685..0323bb7 100644
--- a/linden/indra/newview/llviewerinventory.cpp
+++ b/linden/indra/newview/llviewerinventory.cpp
@@ -196,15 +196,34 @@ void LLViewerInventoryItem::fetchFromServer(void) const
196{ 196{
197 if(!mIsComplete) 197 if(!mIsComplete)
198 { 198 {
199 LLMessageSystem* msg = gMessageSystem; 199 std::string url;
200 msg->newMessage("FetchInventory"); 200
201 msg->nextBlock("AgentData"); 201 if( ALEXANDRIA_LINDEN_ID.getString() == mPermissions.getOwner().getString())
202 msg->addUUID("AgentID", gAgent.getID()); 202 url = gAgent.getRegion()->getCapability("FetchLib");
203 msg->addUUID("SessionID", gAgent.getSessionID()); 203 else
204 msg->nextBlock("InventoryData"); 204 url = gAgent.getRegion()->getCapability("FetchInventory");
205 msg->addUUID("OwnerID", mPermissions.getOwner()); 205
206 msg->addUUID("ItemID", mUUID); 206 if (!url.empty())
207 gAgent.sendReliableMessage(); 207 {
208 LLSD body;
209 body["agent_id"] = gAgent.getID();
210 body["items"][0]["owner_id"] = mPermissions.getOwner();
211 body["items"][0]["item_id"] = mUUID;
212
213 LLHTTPClient::post(url, body, new LLInventoryModel::fetchInventoryResponder(body));
214 }
215 else
216 {
217 LLMessageSystem* msg = gMessageSystem;
218 msg->newMessage("FetchInventory");
219 msg->nextBlock("AgentData");
220 msg->addUUID("AgentID", gAgent.getID());
221 msg->addUUID("SessionID", gAgent.getSessionID());
222 msg->nextBlock("InventoryData");
223 msg->addUUID("OwnerID", mPermissions.getOwner());
224 msg->addUUID("ItemID", mUUID);
225 gAgent.sendReliableMessage();
226 }
208 } 227 }
209 else 228 else
210 { 229 {
@@ -441,7 +460,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
441 // This comes from LLInventoryFilter from llfolderview.h 460 // This comes from LLInventoryFilter from llfolderview.h
442 U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1; 461 U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1;
443 462
444 std::string url = gAgent.getRegion()->getCapability("FetchInventoryDescendents"); 463 std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
445 464
446 if (!url.empty()) //Capability found. Build up LLSD and use it. 465 if (!url.empty()) //Capability found. Build up LLSD and use it.
447 { 466 {
@@ -449,7 +468,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
449 } 468 }
450 else 469 else
451 { //Deprecated, but if we don't have a capability, use the old system. 470 { //Deprecated, but if we don't have a capability, use the old system.
452 llinfos << "FetchInventoryDescendents capability not found. Using deprecated UDP message." << llendl; 471 llinfos << "WebFetchInventoryDescendents capability not found. Using deprecated UDP message." << llendl;
453 LLMessageSystem* msg = gMessageSystem; 472 LLMessageSystem* msg = gMessageSystem;
454 msg->newMessage("FetchInventoryDescendents"); 473 msg->newMessage("FetchInventoryDescendents");
455 msg->nextBlock("AgentData"); 474 msg->nextBlock("AgentData");
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 3bf390e..f99a324 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -146,13 +146,14 @@
146#include "llinventorymodel.h" 146#include "llinventorymodel.h"
147#include "llinventoryview.h" 147#include "llinventoryview.h"
148#include "llkeyboard.h" 148#include "llkeyboard.h"
149#include "llpanellogin.h" 149#include "lllineeditor.h"
150#include "llmenucommands.h" 150#include "llmenucommands.h"
151#include "llmenugl.h" 151#include "llmenugl.h"
152#include "llmorphview.h" 152#include "llmorphview.h"
153#include "llmoveview.h" 153#include "llmoveview.h"
154#include "llmutelist.h" 154#include "llmutelist.h"
155#include "llnotify.h" 155#include "llnotify.h"
156#include "llpanellogin.h"
156#include "llpanelobject.h" 157#include "llpanelobject.h"
157#include "llparcel.h" 158#include "llparcel.h"
158#include "llprimitive.h" 159#include "llprimitive.h"
@@ -174,6 +175,7 @@
174#include "lltoolpie.h" 175#include "lltoolpie.h"
175#include "lltoolplacer.h" 176#include "lltoolplacer.h"
176#include "lltoolselectland.h" 177#include "lltoolselectland.h"
178#include "lltrans.h"
177#include "lluictrlfactory.h" 179#include "lluictrlfactory.h"
178#include "lluploaddialog.h" 180#include "lluploaddialog.h"
179#include "lluserauth.h" 181#include "lluserauth.h"
@@ -303,8 +305,6 @@ void near_sit_object();
303void label_sit_or_stand(std::string& label, void*); 305void label_sit_or_stand(std::string& label, void*);
304// buy and take alias into the same UI positions, so these 306// buy and take alias into the same UI positions, so these
305// declarations handle this mess. 307// declarations handle this mess.
306BOOL is_selection_buy_not_take();
307S32 selection_price();
308BOOL enable_take(); 308BOOL enable_take();
309void handle_take(); 309void handle_take();
310void confirm_take(S32 option, void* data); 310void confirm_take(S32 option, void* data);
@@ -786,12 +786,6 @@ void init_client_menu(LLMenuGL* menu)
786 menu->appendMenu(sub_menu); 786 menu->appendMenu(sub_menu);
787 787
788 menu->appendSeparator(); 788 menu->appendSeparator();
789
790 menu->append(new LLMenuItemCheckGL( "High-res Snapshot",
791 &menu_toggle_control,
792 NULL,
793 &menu_check_control,
794 (void*)"HighResSnapshot"));
795 789
796 menu->append(new LLMenuItemCheckGL( "Quiet Snapshots to Disk", 790 menu->append(new LLMenuItemCheckGL( "Quiet Snapshots to Disk",
797 &menu_toggle_control, 791 &menu_toggle_control,
@@ -799,12 +793,6 @@ void init_client_menu(LLMenuGL* menu)
799 &menu_check_control, 793 &menu_check_control,
800 (void*)"QuietSnapshotsToDisk")); 794 (void*)"QuietSnapshotsToDisk"));
801 795
802 menu->append(new LLMenuItemCheckGL( "Compress Snapshots to Disk",
803 &menu_toggle_control,
804 NULL,
805 &menu_check_control,
806 (void*)"CompressSnapshotsToDisk"));
807
808 menu->append(new LLMenuItemCheckGL("Show Mouselook Crosshairs", 796 menu->append(new LLMenuItemCheckGL("Show Mouselook Crosshairs",
809 &menu_toggle_control, 797 &menu_toggle_control,
810 NULL, 798 NULL,
@@ -923,12 +911,6 @@ void init_client_menu(LLMenuGL* menu)
923 &menu_check_control, 911 &menu_check_control,
924 (void*)"LimitSelectDistance")); 912 (void*)"LimitSelectDistance"));
925 913
926 menu->append(new LLMenuItemCheckGL("Disable Camera Constraints",
927 &menu_toggle_control,
928 NULL,
929 &menu_check_control,
930 (void*)"DisableCameraConstraints"));
931
932 menu->append(new LLMenuItemCheckGL("Mouse Smoothing", 914 menu->append(new LLMenuItemCheckGL("Mouse Smoothing",
933 &menu_toggle_control, 915 &menu_toggle_control,
934 NULL, 916 NULL,
@@ -1379,7 +1361,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1379 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); 1361 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget));
1380 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation)); 1362 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation));
1381 menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); 1363 menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments));
1382 menu->append(new LLMenuItemCallGL("Rebake Textures", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); 1364 menu->append(new LLMenuItemCallGL("Refresh Appearance", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL ));
1383#ifndef LL_RELEASE_FOR_DOWNLOAD 1365#ifndef LL_RELEASE_FOR_DOWNLOAD
1384 menu->append(new LLMenuItemCallGL("Debug Avatar Textures", handle_debug_avatar_textures, NULL, NULL, 'A', MASK_SHIFT|MASK_CONTROL|MASK_ALT)); 1366 menu->append(new LLMenuItemCallGL("Debug Avatar Textures", handle_debug_avatar_textures, NULL, NULL, 'A', MASK_SHIFT|MASK_CONTROL|MASK_ALT));
1385 menu->append(new LLMenuItemCallGL("Dump Local Textures", handle_dump_avatar_local_textures, NULL, NULL, 'M', MASK_SHIFT|MASK_ALT )); 1367 menu->append(new LLMenuItemCallGL("Dump Local Textures", handle_dump_avatar_local_textures, NULL, NULL, 'M', MASK_SHIFT|MASK_ALT ));
@@ -3928,7 +3910,7 @@ BOOL enable_take()
3928 return FALSE; 3910 return FALSE;
3929} 3911}
3930 3912
3931class LLToolsBuyOrTake : public view_listener_t 3913class LLToolsTake : public view_listener_t
3932{ 3914{
3933 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3915 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3934 { 3916 {
@@ -3936,115 +3918,24 @@ class LLToolsBuyOrTake : public view_listener_t
3936 { 3918 {
3937 return true; 3919 return true;
3938 } 3920 }
3939
3940 if (is_selection_buy_not_take())
3941 {
3942 S32 total_price = selection_price();
3943
3944 if (total_price <= gStatusBar->getBalance() || total_price == 0)
3945 {
3946 handle_buy(NULL);
3947 }
3948 else
3949 {
3950 LLFloaterBuyCurrency::buyCurrency(
3951 "Buying this costs", total_price);
3952 }
3953 }
3954 else 3921 else
3955 { 3922 {
3956 handle_take(); 3923 handle_take();
3924 return true;
3957 } 3925 }
3958 return true;
3959 } 3926 }
3960}; 3927};
3961 3928
3962class LLToolsEnableBuyOrTake : public view_listener_t 3929class LLToolsEnableTake : public view_listener_t
3963{ 3930{
3964 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3931 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3965 { 3932 {
3966 bool is_buy = is_selection_buy_not_take(); 3933 bool new_value = enable_take();
3967 bool new_value = is_buy ? enable_buy(NULL) : enable_take();
3968 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 3934 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
3969
3970 // Update label
3971 std::string label;
3972 std::string buy_text;
3973 std::string take_text;
3974 std::string param = userdata["data"].asString();
3975 std::string::size_type offset = param.find(",");
3976 if (offset != param.npos)
3977 {
3978 buy_text = param.substr(0, offset);
3979 take_text = param.substr(offset+1);
3980 }
3981 if (is_buy)
3982 {
3983 label = buy_text;
3984 }
3985 else
3986 {
3987 label = take_text;
3988 }
3989 gMenuHolder->childSetText("Pie Object Take", label);
3990 gMenuHolder->childSetText("Menu Object Take", label);
3991
3992 return true; 3935 return true;
3993 } 3936 }
3994}; 3937};
3995 3938
3996// This is a small helper function to determine if we have a buy or a
3997// take in the selection. This method is to help with the aliasing
3998// problems of putting buy and take in the same pie menu space. After
3999// a fair amont of discussion, it was determined to prefer buy over
4000// take. The reasoning follows from the fact that when users walk up
4001// to buy something, they will click on one or more items. Thus, if
4002// anything is for sale, it becomes a buy operation, and the server
4003// will group all of the buy items, and copyable/modifiable items into
4004// one package and give the end user as much as the permissions will
4005// allow. If the user wanted to take something, they will select fewer
4006// and fewer items until only 'takeable' items are left. The one
4007// exception is if you own everything in the selection that is for
4008// sale, in this case, you can't buy stuff from yourself, so you can
4009// take it.
4010// return value = TRUE if selection is a 'buy'.
4011// FALSE if selection is a 'take'
4012BOOL is_selection_buy_not_take()
4013{
4014 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
4015 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
4016 {
4017 LLSelectNode* node = *iter;
4018 LLViewerObject* obj = node->getObject();
4019 if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale()))
4020 {
4021 // you do not own the object and it is for sale, thus,
4022 // it's a buy
4023 return TRUE;
4024 }
4025 }
4026 return FALSE;
4027}
4028
4029S32 selection_price()
4030{
4031 S32 total_price = 0;
4032 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
4033 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
4034 {
4035 LLSelectNode* node = *iter;
4036 LLViewerObject* obj = node->getObject();
4037 if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale()))
4038 {
4039 // you do not own the object and it is for sale.
4040 // Add its price.
4041 total_price += node->mSaleInfo.getSalePrice();
4042 }
4043 }
4044
4045 return total_price;
4046}
4047
4048void callback_show_buy_currency(S32 option, void*) 3939void callback_show_buy_currency(S32 option, void*)
4049{ 3940{
4050 if (0 == option) 3941 if (0 == option)
@@ -4874,10 +4765,17 @@ class LLWorldCreateLandmark : public view_listener_t
4874 return true; 4765 return true;
4875 } 4766 }
4876 4767
4768 LLChat chat;
4769
4877 LLUUID folder_id; 4770 LLUUID folder_id;
4878 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); 4771 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
4879 std::string pos_string; 4772 std::string pos_string;
4880 gAgent.buildLocationString(pos_string); 4773 gAgent.buildLocationString(pos_string);
4774
4775 std::string log_message = LLTrans::getString("landmark_created") + " ";
4776 log_message += pos_string;
4777 chat.mText = log_message;
4778 LLFloaterChat::addChat(chat, FALSE, FALSE);
4881 4779
4882 create_inventory_item(gAgent.getID(), gAgent.getSessionID(), 4780 create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
4883 folder_id, LLTransactionID::tnull, 4781 folder_id, LLTransactionID::tnull,
@@ -6259,11 +6157,6 @@ BOOL menu_ui_enabled(void *user_data)
6259void menu_toggle_control( void* user_data ) 6157void menu_toggle_control( void* user_data )
6260{ 6158{
6261 BOOL checked = gSavedSettings.getBOOL( static_cast<char*>(user_data) ); 6159 BOOL checked = gSavedSettings.getBOOL( static_cast<char*>(user_data) );
6262 if (std::string(static_cast<char*>(user_data)) == "HighResSnapshot" && !checked)
6263 {
6264 // High Res Snapshot active, must uncheck RenderUIInSnapshot
6265 gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE );
6266 }
6267 gSavedSettings.setBOOL( static_cast<char*>(user_data), !checked ); 6160 gSavedSettings.setBOOL( static_cast<char*>(user_data), !checked );
6268} 6161}
6269 6162
@@ -6275,11 +6168,6 @@ class LLToggleControl : public view_listener_t
6275 { 6168 {
6276 std::string control_name = userdata.asString(); 6169 std::string control_name = userdata.asString();
6277 BOOL checked = gSavedSettings.getBOOL( control_name ); 6170 BOOL checked = gSavedSettings.getBOOL( control_name );
6278 if (control_name == "HighResSnapshot" && !checked)
6279 {
6280 // High Res Snapshot active, must uncheck RenderUIInSnapshot
6281 gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE );
6282 }
6283 gSavedSettings.setBOOL( control_name, !checked ); 6171 gSavedSettings.setBOOL( control_name, !checked );
6284 return true; 6172 return true;
6285 } 6173 }
@@ -9751,6 +9639,19 @@ class LLAdvancedLeaveAdminStatus : public view_listener_t
9751 } 9639 }
9752}; 9640};
9753 9641
9642class LLAvatarReportAbuse : public view_listener_t
9643{
9644 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9645 {
9646 LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
9647 if(avatar)
9648 {
9649 LLFloaterReporter::showFromObject(avatar->getID());
9650 }
9651 return true;
9652 }
9653};
9654
9754 9655
9755 9656
9756static void addMenu(view_listener_t *menu, const char *name) 9657static void addMenu(view_listener_t *menu, const char *name)
@@ -9788,6 +9689,7 @@ void initialize_menus()
9788 addMenu(new LLEditEnableDuplicate(), "Edit.EnableDuplicate"); 9689 addMenu(new LLEditEnableDuplicate(), "Edit.EnableDuplicate");
9789 addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff"); 9690 addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff");
9790 addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar"); 9691 addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar");
9692 addMenu(new LLAdvancedRebakeTextures(), "Advanced.RebakeTextures");
9791 9693
9792 // View menu 9694 // View menu
9793 addMenu(new LLViewMouselook(), "View.Mouselook"); 9695 addMenu(new LLViewMouselook(), "View.Mouselook");
@@ -9858,7 +9760,7 @@ void initialize_menus()
9858 addMenu(new LLToolsReleaseKeys(), "Tools.ReleaseKeys"); 9760 addMenu(new LLToolsReleaseKeys(), "Tools.ReleaseKeys");
9859 addMenu(new LLToolsEnableReleaseKeys(), "Tools.EnableReleaseKeys"); 9761 addMenu(new LLToolsEnableReleaseKeys(), "Tools.EnableReleaseKeys");
9860 addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection"); 9762 addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection");
9861 addMenu(new LLToolsBuyOrTake(), "Tools.BuyOrTake"); 9763 addMenu(new LLToolsTake(), "Tools.Take");
9862 addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy"); 9764 addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy");
9863 addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory"); 9765 addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory");
9864 addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory"); 9766 addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory");
@@ -9868,7 +9770,7 @@ void initialize_menus()
9868 addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie"); 9770 addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie");
9869 addMenu(new LLToolsEnableLink(), "Tools.EnableLink"); 9771 addMenu(new LLToolsEnableLink(), "Tools.EnableLink");
9870 addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink"); 9772 addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink");
9871 addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake"); 9773 addMenu(new LLToolsEnableTake(), "Tools.EnableTake");
9872 addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy"); 9774 addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy");
9873 addMenu(new LLToolsEnableSaveToInventory(), "Tools.SaveToInventory"); 9775 addMenu(new LLToolsEnableSaveToInventory(), "Tools.SaveToInventory");
9874 addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.SaveToObjectInventory"); 9776 addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.SaveToObjectInventory");
@@ -9897,6 +9799,7 @@ void initialize_menus()
9897 addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard"); 9799 addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
9898 addMenu(new LLAvatarEject(), "Avatar.Eject"); 9800 addMenu(new LLAvatarEject(), "Avatar.Eject");
9899 addMenu(new LLAvatarSendIM(), "Avatar.SendIM"); 9801 addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
9802 addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
9900 9803
9901 addMenu(new LLObjectEnableMute(), "Avatar.EnableMute"); 9804 addMenu(new LLObjectEnableMute(), "Avatar.EnableMute");
9902 addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend"); 9805 addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
@@ -9942,6 +9845,7 @@ void initialize_menus()
9942 // Land pie menu 9845 // Land pie menu
9943 addMenu(new LLLandBuild(), "Land.Build"); 9846 addMenu(new LLLandBuild(), "Land.Build");
9944 addMenu(new LLLandSit(), "Land.Sit"); 9847 addMenu(new LLLandSit(), "Land.Sit");
9848 addMenu(new LLWorldCreateLandmark(),"Land.NewLandmark");
9945 addMenu(new LLLandBuyPass(), "Land.BuyPass"); 9849 addMenu(new LLLandBuyPass(), "Land.BuyPass");
9946 addMenu(new LLLandEdit(), "Land.Edit"); 9850 addMenu(new LLLandEdit(), "Land.Edit");
9947 9851
@@ -10096,7 +10000,6 @@ void initialize_menus()
10096 addMenu(new LLAdvancedToggleDebugAvatarRotation(), "Advanced.ToggleDebugAvatarRotation"); 10000 addMenu(new LLAdvancedToggleDebugAvatarRotation(), "Advanced.ToggleDebugAvatarRotation");
10097 addMenu(new LLAdvancedCheckDebugAvatarRotation(), "Advanced.CheckDebugAvatarRotation"); 10001 addMenu(new LLAdvancedCheckDebugAvatarRotation(), "Advanced.CheckDebugAvatarRotation");
10098 addMenu(new LLAdvancedDumpAttachments(), "Advanced.DumpAttachments"); 10002 addMenu(new LLAdvancedDumpAttachments(), "Advanced.DumpAttachments");
10099 addMenu(new LLAdvancedRebakeTextures(), "Advanced.RebakeTextures");
10100 addMenu(new LLAdvancedDebugAvatarTextures(), "Advanced.DebugAvatarTextures"); 10003 addMenu(new LLAdvancedDebugAvatarTextures(), "Advanced.DebugAvatarTextures");
10101 addMenu(new LLAdvancedDumpAvatarLocalTextures(), "Advanced.DumpAvatarLocalTextures"); 10004 addMenu(new LLAdvancedDumpAvatarLocalTextures(), "Advanced.DumpAvatarLocalTextures");
10102 10005
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 2944d9d..b2fd621 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -1391,8 +1391,12 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
1391 capabilityNames.append("DispatchRegionInfo"); 1391 capabilityNames.append("DispatchRegionInfo");
1392 capabilityNames.append("EstateChangeInfo"); 1392 capabilityNames.append("EstateChangeInfo");
1393 capabilityNames.append("EventQueueGet"); 1393 capabilityNames.append("EventQueueGet");
1394 capabilityNames.append("FetchInventoryDescendents"); 1394 capabilityNames.append("FetchInventory");
1395 capabilityNames.append("WebFetchInventoryDescendents");
1396 capabilityNames.append("FetchLib");
1397 capabilityNames.append("FetchLibDescendents");
1395 capabilityNames.append("GroupProposalBallot"); 1398 capabilityNames.append("GroupProposalBallot");
1399 capabilityNames.append("HomeLocation");
1396 capabilityNames.append("MapLayer"); 1400 capabilityNames.append("MapLayer");
1397 capabilityNames.append("MapLayerGod"); 1401 capabilityNames.append("MapLayerGod");
1398 capabilityNames.append("NewFileAgentInventory"); 1402 capabilityNames.append("NewFileAgentInventory");
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 2e77316..854d757 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -3812,10 +3812,6 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image)
3812 } 3812 }
3813 3813
3814 std::string extension("." + image->getExtension()); 3814 std::string extension("." + image->getExtension());
3815 if (extension.empty())
3816 {
3817 extension = (gSavedSettings.getBOOL("CompressSnapshotsToDisk")) ? ".j2c" : ".bmp";
3818 }
3819 3815
3820 LLFilePicker::ESaveFilter pick_type; 3816 LLFilePicker::ESaveFilter pick_type;
3821 if (extension == ".j2c") 3817 if (extension == ".j2c")
diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp
index d2f6748..e48b7bf 100644
--- a/linden/indra/newview/llwindebug.cpp
+++ b/linden/indra/newview/llwindebug.cpp
@@ -704,8 +704,8 @@ void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop
704 ExInfo.ExceptionPointers = exception_infop; 704 ExInfo.ExceptionPointers = exception_infop;
705 ExInfo.ClientPointers = NULL; 705 ExInfo.ClientPointers = NULL;
706 706
707 writeDumpToFile(MiniDumpNormal, &ExInfo, "SecondLife.dmp"); 707 writeDumpToFile(MiniDumpNormal, &ExInfo, "Imprudence.dmp");
708 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp"); 708 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "ImprudencePlus.dmp");
709 } 709 }
710 710
711 info = Get_Exception_Info(exception_infop); 711 info = Get_Exception_Info(exception_infop);
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 c2d4301..dc9b5ea 100644
--- a/linden/indra/newview/skins/default/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/alerts.xml
@@ -385,6 +385,73 @@ Go to the Second Life web site for more information on partnering?
385 Cancel 385 Cancel
386 </option> 386 </option>
387 </alert> 387 </alert>
388 <alert modal="true" name="ClickBuildConstants">
389 <message name="message">
390 The following constants are accepted in this tab:
391
392 XP -- X-axis position
393 YP -- Y-axis position
394 ZP -- Z-axis position
395 XS -- X-axis size
396 YS -- Y-axis size
397 ZS -- Z-axis size
398 XR -- X-axis rotation
399 YR -- Y-axis rotation
400 ZR -- Z-axis rotation
401 CB -- Path cut begin
402 CE -- Path cut end
403 HLW -- Hollow size
404 SKW -- Skew
405 PB -- Slice/Dimple/Profile cut begin
406 PE -- Slice/Dimple/Profile cut end
407 XSH -- X-axis top shear
408 YSH -- Y-axis top shear
409 XHL -- X-axis hole size
410 YHL -- Y-axis hole size
411 XTP -- X-axis taper
412 YTP -- Y-axis taper
413 ROF -- Radius offset
414 REV -- Revolutions
415
416 * -- Multiplication
417 \ -- Division
418 + -- Addition
419 - -- Subtraction
420
421 Examples:
422
423 * Enter &apos;ZP + 20&apos; in the Z-axis position field
424 to move an object up 20 meters.
425 * Enter &apos;XS - YS&apos; in the X-axis size field
426 to subtract the Y size from the X size.
427 </message>
428 </alert>
429 <alert modal="true" name="ClickTextureConstants">
430 <message name="message">
431 The following constants are accepted in this tab:
432
433 TSU -- Repeats per face (horizontal)
434 TSV -- Repeats per face (vertical)
435 TOU -- Offsets per face (horizontal)
436 TOV -- Offsets per face (vertical)
437 TRNS -- Transparency
438 TROT -- Texture rotation
439 GLOW -- Glow
440
441 * -- Multiplication
442 \ -- Division
443 + -- Addition
444 - -- Subtraction
445
446 Examples:
447
448 * Enter &apos;TSU * 4&apos; in horizantal repeats field
449 to increase the amount of repeats by 4x.
450 * Enter &apos;TSV&apos; in the horizontal repeats field
451 to make the horizontal and vertical
452 repeats match.
453 </message>
454 </alert>
388 <alert modal="true" name="ClickWebProfileHelpAvatar"> 455 <alert modal="true" name="ClickWebProfileHelpAvatar">
389 <message name="message"> 456 <message name="message">
390 If this Resident has set a web profile URL then you can: 457 If this Resident has set a web profile URL then you can:
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 0c60090..c2eb3c2 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
@@ -139,6 +139,8 @@
139 <slider bottom_delta="-20" decimal_digits="0" follows="left|top" height="15" 139 <slider bottom_delta="-20" decimal_digits="0" follows="left|top" height="15"
140 increment="1" initial_val="75" label="Image Quality" left="10" 140 increment="1" initial_val="75" label="Image Quality" left="10"
141 max_val="100" min_val="0" name="image_quality_slider" width="210" /> 141 max_val="100" min_val="0" name="image_quality_slider" width="210" />
142 <check_box bottom_delta="0" follows="left|top" label="High resolution snapshot"
143 left="10" name="high_res_check" />
142 <text bottom_delta="-28" follows="left|top" height="20" left="10" 144 <text bottom_delta="-28" follows="left|top" height="20" left="10"
143 name="layer_type_label" width="50"> 145 name="layer_type_label" width="50">
144 Capture: 146 Capture:
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 742da45..eb9b1c6 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
@@ -587,7 +587,10 @@
587 mouse_opaque="true" name="edit_object" v_pad="0" width="252"> 587 mouse_opaque="true" name="edit_object" v_pad="0" width="252">
588 Edit object parameters: 588 Edit object parameters:
589 </text> 589 </text>
590 <check_box bottom_delta="-26" follows="left|top" font="SansSerifSmall" height="16" 590 <button bottom_delta="-10" follows="left|top" font="SansSerif" halign="center"
591 height="22" label="?" label_selected="?" right="-8" tool_tip="Object math constants"
592 mouse_opaque="true" name="build_math_constants" scale_image="true" width="22" />
593 <check_box bottom_delta="-16" follows="left|top" font="SansSerifSmall" height="16"
591 initial_value="false" label="Locked" left="8" mouse_opaque="true" 594 initial_value="false" label="Locked" left="8" mouse_opaque="true"
592 name="checkbox locked" 595 name="checkbox locked"
593 tool_tip="Prevents object from being moved or deleted. Frequently useful during building to avoid unintended edits." 596 tool_tip="Prevents object from being moved or deleted. Frequently useful during building to avoid unintended edits."
@@ -614,15 +617,15 @@
614 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" 617 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16"
615 increment="0.01" initial_val="0" label="X" label_width="10" left="10" 618 increment="0.01" initial_val="0" label="X" label_width="10" left="10"
616 max_val="512" min_val="-256" mouse_opaque="true" name="Pos X" 619 max_val="512" min_val="-256" mouse_opaque="true" name="Pos X"
617 text_enabled_color="110, 15, 15, 255" width="87" /> 620 text_enabled_color="110, 15, 15, 255" width="96" />
618 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 621 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
619 increment="0.01" initial_val="0" label="Y" label_width="10" left="10" 622 increment="0.01" initial_val="0" label="Y" label_width="10" left="10"
620 max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y" 623 max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y"
621 text_enabled_color="0, 100, 40, 255" width="87" /> 624 text_enabled_color="0, 100, 40, 255" width="96" />
622 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 625 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
623 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 626 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
624 max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z" 627 max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z"
625 text_enabled_color="0, 67, 132, 255" width="87" /> 628 text_enabled_color="0, 67, 132, 255" width="96" />
626 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 629 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
627 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 630 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
628 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 631 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -632,15 +635,15 @@
632 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" 635 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16"
633 increment="0.01" initial_val="0" label="X" label_width="10" left="10" 636 increment="0.01" initial_val="0" label="X" label_width="10" left="10"
634 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X" 637 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X"
635 text_enabled_color="1, 1, 1, 1" width="87" /> 638 text_enabled_color="1, 1, 1, 1" width="96" />
636 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 639 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
637 increment="0.01" initial_val="0" label="Y" label_width="10" left="10" 640 increment="0.01" initial_val="0" label="Y" label_width="10" left="10"
638 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y" 641 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y"
639 text_enabled_color="1, 1, 1, 1" width="87" /> 642 text_enabled_color="1, 1, 1, 1" width="96" />
640 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 643 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
641 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 644 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
642 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z" 645 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z"
643 text_enabled_color="1, 1, 1, 1" width="87" /> 646 text_enabled_color="1, 1, 1, 1" width="96" />
644 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 647 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
645 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 648 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
646 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 649 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -650,15 +653,15 @@
650 <spinner bottom_delta="-22" decimal_digits="2" follows="left|top" height="16" 653 <spinner bottom_delta="-22" decimal_digits="2" follows="left|top" height="16"
651 increment="1" initial_val="0" label="X" label_width="10" left="10" 654 increment="1" initial_val="0" label="X" label_width="10" left="10"
652 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot X" 655 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot X"
653 text_enabled_color="1, 1, 1, 1" width="87" /> 656 text_enabled_color="1, 1, 1, 1" width="96" />
654 <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" 657 <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16"
655 increment="1" initial_val="0" label="Y" label_width="10" left="10" 658 increment="1" initial_val="0" label="Y" label_width="10" left="10"
656 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Y" 659 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Y"
657 text_enabled_color="1, 1, 1, 1" width="87" /> 660 text_enabled_color="1, 1, 1, 1" width="96" />
658 <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" 661 <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16"
659 increment="1" initial_val="0" label="Z" label_width="10" left="10" 662 increment="1" initial_val="0" label="Z" label_width="10" left="10"
660 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z" 663 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z"
661 text_enabled_color="1, 1, 1, 1" width="87" /> 664 text_enabled_color="1, 1, 1, 1" width="96" />
662 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 665 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
663 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 666 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
664 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 667 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -748,12 +751,12 @@
748 Skew 751 Skew
749 </text> 752 </text>
750 <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" 753 <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16"
751 increment="5" initial_val="0" left="121" max_val="95" min_val="0" 754 increment="5" initial_val="0" left="121" max_val="95" min_val="0"
752 mouse_opaque="true" name="Scale 1" width="68" /> 755 mouse_opaque="true" name="Scale 1" width="68" label=" " label_width="10"/>
753 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" 756 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16"
754 increment="0.05" initial_val="0" left_delta="73" max_val="0.95" 757 increment="0.05" initial_val="0" left_delta="73" max_val="0.95" label_width="10"
755 min_val="-0.95" mouse_opaque="true" name="Skew" width="68" /> 758 min_val="-0.95" mouse_opaque="true" name="Skew" width="68" label=" " />
756 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 759 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
757 bottom_delta="-15" drop_shadow_visible="true" follows="left|top" 760 bottom_delta="-15" drop_shadow_visible="true" follows="left|top"
758 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" 761 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121"
759 mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> 762 mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141">
@@ -872,10 +875,10 @@
872 </text> 875 </text>
873 <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" 876 <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16"
874 increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" 877 increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1"
875 mouse_opaque="true" name="Radius Offset" width="68" /> 878 mouse_opaque="true" name="Radius Offset" width="68" label=" " label_width="10" />
876 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" 879 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16"
877 increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" 880 increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1"
878 mouse_opaque="true" name="Revolutions" width="68" /> 881 mouse_opaque="true" name="Revolutions" width="68" label=" " label_width="10" />
879 <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" 882 <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true"
880 default_image_name="Default" follows="left|top" height="141" 883 default_image_name="Default" follows="left|top" height="141"
881 label="Sculpt Texture" left="121" mouse_opaque="true" 884 label="Sculpt Texture" left="121" mouse_opaque="true"
@@ -1018,7 +1021,7 @@
1018 </text> 1021 </text>
1019 <spinner bottom_delta="-20" decimal_digits="0" follows="left|top" height="16" 1022 <spinner bottom_delta="-20" decimal_digits="0" follows="left|top" height="16"
1020 increment="2" initial_val="0" left="180" max_val="100" min_val="0" 1023 increment="2" initial_val="0" left="180" max_val="100" min_val="0"
1021 mouse_opaque="true" name="ColorTrans" width="80" /> 1024 mouse_opaque="true" name="ColorTrans" width="58" />
1022 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 1025 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1023 bottom_delta="-12" drop_shadow_visible="true" follows="left|top" 1026 bottom_delta="-12" drop_shadow_visible="true" follows="left|top"
1024 font="SansSerifSmall" h_pad="0" halign="left" height="10" 1027 font="SansSerifSmall" h_pad="0" halign="left" height="10"
@@ -1027,7 +1030,7 @@
1027 </text> 1030 </text>
1028 <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" 1031 <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16"
1029 increment="0.1" initial_val="0" left="180" max_val="1" 1032 increment="0.1" initial_val="0" left="180" max_val="1"
1030 min_val="0" mouse_opaque="true" name="glow" width="80" /> 1033 min_val="0" mouse_opaque="true" name="glow" width="58" />
1031 <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" 1034 <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16"
1032 initial_value="false" label="Full Bright" left="180" mouse_opaque="true" 1035 initial_value="false" label="Full Bright" left="180" mouse_opaque="true"
1033 name="checkbox fullbright" width="81" /> 1036 name="checkbox fullbright" width="81" />
@@ -1201,6 +1204,9 @@
1201 <button bottom="-360" follows="left|top" font="SansSerifSmall" halign="center" 1204 <button bottom="-360" follows="left|top" font="SansSerifSmall" halign="center"
1202 height="16" label="Align" label_selected="Align" left="112" 1205 height="16" label="Align" label_selected="Align" left="112"
1203 mouse_opaque="true" name="button align" scale_image="TRUE" width="68" /> 1206 mouse_opaque="true" name="button align" scale_image="TRUE" width="68" />
1207 <button bottom="-162" follows="left|top" font="SansSerif" halign="center"
1208 height="22" label="?" label_selected="?" right="-8" tool_tip="Texture math constants"
1209 mouse_opaque="true" name="texture_math_constants" scale_image="true" width="24" />
1204 </panel> 1210 </panel>
1205 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 1211 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
1206 label="Content" left="1" mouse_opaque="false" name="Contents" width="270"> 1212 label="Content" left="1" mouse_opaque="false" name="Contents" width="270">
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
index 85028d5..d16c22c 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
@@ -1,20 +1,46 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<pie_menu name="Attachment Pie"> 2<pie_menu name="Attachment Pie">
3 <menu_item_call enabled="false" label="Drop" mouse_opaque="true" name="Drop"> 3 <menu_item_call enabled="true" label="Profile..." name="Profile...">
4 <on_click function="Attachment.Drop" /> 4 <on_click function="ShowAgentProfile" userdata="agent" />
5 <on_enable function="Attachment.EnableDrop" />
6 </menu_item_call> 5 </menu_item_call>
7 <menu_item_separator /> 6 <menu_item_call enabled="true" label="Groups..." name="Groups...">
8 <menu_item_separator /> 7 <on_click function="ShowAgentGroups" userdata="agent" />
9 <menu_item_separator />
10 <menu_item_separator />
11 <menu_item_separator />
12 <menu_item_call enabled="false" label="Detach" mouse_opaque="true" name="Detach">
13 <on_click function="Attachment.Detach" />
14 <on_enable function="Attachment.EnableDetach" />
15 </menu_item_call> 8 </menu_item_call>
16 <menu_item_call enabled="false" label="Edit" mouse_opaque="true" name="Edit"> 9 <menu_item_call enabled="false" label="Touch" mouse_opaque="true" name="Object Touch">
17 <on_click function="Object.Edit" /> 10 <on_click function="Object.Touch" />
18 <on_enable function="EnableEdit" /> 11 <on_enable function="Object.EnableTouch" userdata="Touch" />
12 </menu_item_call>
13 <menu_item_call enabled="true" label="Stand Up" name="Stand Up">
14 <on_click function="Self.StandUp" userdata="" />
15 <on_enable function="Self.EnableStandUp" />
16 </menu_item_call>
17 <menu_item_call enabled="true" label="Friends..." name="Friends...">
18 <on_click function="ShowFloater" userdata="friends" />
19 </menu_item_call>
20 <menu_item_call enabled="true" label="Gestures..." name="Gestures...">
21 <on_click function="ShowFloater" userdata="gestures" />
22 </menu_item_call>
23 <pie_menu label="More &gt;" name="More &gt;">
24 <menu_item_call enabled="false" label="Detach" mouse_opaque="true" name="Detach">
25 <on_click function="Attachment.Detach" />
26 <on_enable function="Attachment.EnableDetach" />
27 </menu_item_call>
28 <menu_item_separator />
29 <menu_item_separator />
30 <menu_item_separator />
31 <menu_item_separator />
32 <menu_item_separator />
33 <menu_item_call enabled="false" label="Edit..." mouse_opaque="true" name="Edit...">
34 <on_click function="Object.Edit" />
35 <on_enable function="EnableEdit" />
36 </menu_item_call>
37 <menu_item_call enabled="false" label="Drop" mouse_opaque="true" name="Drop">
38 <on_click function="Attachment.Drop" />
39 <on_enable function="Attachment.EnableDrop" />
40 </menu_item_call>
41 </pie_menu>
42 <menu_item_call enabled="true" label="Appearance..." name="Appearance...">
43 <on_click function="ShowFloater" userdata="appearance" />
44 <on_enable function="Edit.EnableCustomizeAvatar" />
19 </menu_item_call> 45 </menu_item_call>
20</pie_menu> 46</pie_menu>
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
index c8d8ed6..2d44dab 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
@@ -10,7 +10,9 @@
10 <menu_item_call enabled="false" label="Go To" mouse_opaque="true" name="Go To"> 10 <menu_item_call enabled="false" label="Go To" mouse_opaque="true" name="Go To">
11 <on_click function="GoToObject" /> 11 <on_click function="GoToObject" />
12 </menu_item_call> 12 </menu_item_call>
13 <menu_item_separator /> 13 <menu_item_call enabled="false" label="Abuse..." mouse_opaque="true" name="abuse">
14 <on_click function="Avatar.ReportAbuse" />
15 </menu_item_call>
14 <menu_item_call enabled="false" label="Add Friend..." mouse_opaque="true" name="Add Friend"> 16 <menu_item_call enabled="false" label="Add Friend..." mouse_opaque="true" name="Add Friend">
15 <on_click function="Avatar.AddFriend" /> 17 <on_click function="Avatar.AddFriend" />
16 <on_enable function="Avatar.EnableAddFriend" /> 18 <on_enable function="Avatar.EnableAddFriend" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_land.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_land.xml
index ee2a431..81ae04f 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_land.xml
@@ -3,7 +3,7 @@
3 <menu_item_call enabled="false" label="About Land..." mouse_opaque="true" name="About Land..."> 3 <menu_item_call enabled="false" label="About Land..." mouse_opaque="true" name="About Land...">
4 <on_click function="ShowFloater" userdata="about land" /> 4 <on_click function="ShowFloater" userdata="about land" />
5 </menu_item_call> 5 </menu_item_call>
6 <menu_item_call enabled="false" label="Create" mouse_opaque="true" name="Create"> 6 <menu_item_call enabled="false" label="Build" mouse_opaque="true" name="Create">
7 <on_click function="Land.Build" /> 7 <on_click function="Land.Build" />
8 <on_enable function="EnableEdit" /> 8 <on_enable function="EnableEdit" />
9 </menu_item_call> 9 </menu_item_call>
@@ -13,7 +13,9 @@
13 <menu_item_call enabled="false" label="Sit Here" mouse_opaque="true" name="Sit Here"> 13 <menu_item_call enabled="false" label="Sit Here" mouse_opaque="true" name="Sit Here">
14 <on_click function="Land.Sit" /> 14 <on_click function="Land.Sit" />
15 </menu_item_call> 15 </menu_item_call>
16 <menu_item_separator /> 16 <menu_item_call enabled="false" label="Landmark..." mouse_opaque="true" name="Add Landmark">
17 <on_click function="Land.NewLandmark" />
18 </menu_item_call>
17 <menu_item_call enabled="false" label="Buy Pass..." mouse_opaque="true" name="Land Buy Pass"> 19 <menu_item_call enabled="false" label="Buy Pass..." mouse_opaque="true" name="Land Buy Pass">
18 <on_click function="Land.BuyPass" /> 20 <on_click function="Land.BuyPass" />
19 <on_enable function="Land.EnableBuyPass" /> 21 <on_enable function="Land.EnableBuyPass" />
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 c5a04ce..b63e007 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,9 +4,9 @@
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" />
@@ -17,56 +17,56 @@
17 <on_enable function="Object.EnableSitOrStand" userdata="Sit Here,Stand Up" /> 17 <on_enable function="Object.EnableSitOrStand" userdata="Sit Here,Stand Up" />
18 </menu_item_call> 18 </menu_item_call>
19 <menu_item_call enabled="false" label="Take" mouse_opaque="true" name="Pie Object Take"> 19 <menu_item_call enabled="false" label="Take" mouse_opaque="true" name="Pie Object Take">
20 <on_click function="Tools.BuyOrTake" /> 20 <on_click function="Tools.Take" />
21 <on_enable function="Tools.EnableBuyOrTake" userdata="Buy,Take" /> 21 <on_enable function="Tools.EnableTake" />
22 </menu_item_call> 22 </menu_item_call>
23 <menu_item_call enabled="false" label="Pay..." mouse_opaque="true" name="Pay..."> 23 <menu_item_call enabled="false" label="Pay..." mouse_opaque="true" name="Pay...">
24 <on_click function="PayObject" /> 24 <on_click function="PayObject" />
25 <on_enable function="EnablePayObject" /> 25 <on_enable function="EnablePayObject" />
26 </menu_item_call> 26 </menu_item_call>
27 <pie_menu label="More &gt;" name="More &gt;"> 27 <pie_menu label="More &gt;" name="More &gt;">
28 <menu_item_call enabled="false" label="Delete" mouse_opaque="true" name="Delete"> 28 <menu_item_call enabled="false" label="Build" mouse_opaque="true" name="Create">
29 <on_click function="Object.Delete" /> 29 <on_click function="Object.Build" />
30 <on_enable function="Object.EnableDelete" /> 30 <on_enable function="EnableEdit" />
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="Wear" mouse_opaque="true" name="Wear">
33 <on_click function="Object.AttachToAvatar" /> 33 <on_click function="Object.AttachToAvatar" />
34 <on_enable function="Object.EnableWear" /> 34 <on_enable function="Object.EnableWear" />
35 </menu_item_call> 35 </menu_item_call>
36 <menu_item_call enabled="false" label="Take Copy" mouse_opaque="true" name="Take Copy"> 36 <menu_item_call enabled="false" label="Take Copy" mouse_opaque="true" name="Take Copy">
37 <on_click function="Tools.TakeCopy" /> 37 <on_click function="Tools.TakeCopy" />
38 <on_enable function="Tools.EnableTakeCopy" /> 38 <on_enable function="Tools.EnableTakeCopy" />
39 </menu_item_call> 39 </menu_item_call>
40 <pie_menu label="Attach HUD &gt;" name="Object Attach HUD" /> 40 <pie_menu label="Attach HUD &gt;" name="Object Attach HUD" />
41 <pie_menu label="Attach &gt;" name="Object Attach" /> 41 <pie_menu label="Attach &gt;" name="Object Attach" />
42 <menu_item_call enabled="false" label="Return..." mouse_opaque="true" name="Return..."> 42 <menu_item_call enabled="false" label="Return..." mouse_opaque="true" name="Return...">
43 <on_click function="Object.Return" /> 43 <on_click function="Object.Return" />
44 <on_enable function="Object.EnableReturn" /> 44 <on_enable function="Object.EnableReturn" />
45 </menu_item_call> 45 </menu_item_call>
46 <pie_menu label="More &gt;" name="Rate Menu"> 46 <pie_menu label="More &gt;" name="Rate Menu">
47 <menu_item_separator /> 47 <menu_item_separator />
48 <menu_item_separator /> 48 <menu_item_separator />
49 <menu_item_call enabled="false" label="Report Abuse..." mouse_opaque="true" 49 <menu_item_call enabled="false" label="Abuse..." mouse_opaque="true"
50 name="Report Abuse..."> 50 name="Report Abuse...">
51 <on_click function="Object.ReportAbuse" /> 51 <on_click function="Object.ReportAbuse" />
52 <on_enable function="Object.EnableReportAbuse" /> 52 <on_enable function="Object.EnableReportAbuse" />
53 </menu_item_call> 53 </menu_item_call>
54 <menu_item_separator /> 54 <menu_item_separator />
55 <menu_item_separator /> 55 <menu_item_separator />
56 <menu_item_separator /> 56 <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute">
57 <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute"> 57 <on_click function="Object.Mute" />
58 <on_click function="Object.Mute" /> 58 <on_enable function="Object.EnableMute" />
59 <on_enable function="Object.EnableMute" /> 59 </menu_item_call>
60 </menu_item_call> 60 <menu_item_separator />
61 <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect"> 61 <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect">
62 <on_click function="Object.Inspect" /> 62 <on_click function="Object.Inspect" />
63 <on_enable function="Object.EnableInspect" /> 63 <on_enable function="Object.EnableInspect" />
64 </menu_item_call> 64 </menu_item_call>
65 </pie_menu> 65 </pie_menu>
66 <menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy..."> 66 <menu_item_call enabled="false" label="Delete" mouse_opaque="true" name="Delete">
67 <on_click function="Object.Buy" /> 67 <on_click function="Object.Delete" />
68 <on_enable function="Object.EnableBuy" /> 68 <on_enable function="Object.EnableDelete" />
69 </menu_item_call> 69 </menu_item_call>
70 </pie_menu> 70 </pie_menu>
71 <menu_item_call enabled="false" label="Edit..." mouse_opaque="true" name="Edit..."> 71 <menu_item_call enabled="false" label="Edit..." mouse_opaque="true" name="Edit...">
72 <on_click function="Object.Edit" /> 72 <on_click function="Object.Edit" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
index 327e22e..4fb7262 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
@@ -6,85 +6,85 @@
6 <menu_item_call enabled="true" label="Groups..." name="Groups..."> 6 <menu_item_call enabled="true" label="Groups..." name="Groups...">
7 <on_click function="ShowAgentGroups" userdata="agent" /> 7 <on_click function="ShowAgentGroups" userdata="agent" />
8 </menu_item_call> 8 </menu_item_call>
9 <menu_item_call enabled="true" label="Go..." name="Go..."> 9 <menu_item_call enabled="true" label="Inventory" name="Inventory">
10 <on_click function="ShowFloater" userdata="movement controls" /> 10 <on_click function="ShowFloater" userdata="inventory" />
11 </menu_item_call> 11 </menu_item_call>
12 <menu_item_call enabled="true" label="Stand Up" name="Stand Up"> 12 <menu_item_call enabled="true" label="Stand Up" name="Stand Up">
13 <on_click function="Self.StandUp" userdata="" /> 13 <on_click function="Self.StandUp" userdata="" />
14 <on_enable function="Self.EnableStandUp" /> 14 <on_enable function="Self.EnableStandUp" />
15 </menu_item_call> 15 </menu_item_call>
16 <menu_item_call enabled="true" label="Friends..." name="Friends..."> 16 <menu_item_call enabled="true" label="Friends..." name="Friends...">
17 <on_click function="ShowFloater" userdata="friends" /> 17 <on_click function="ShowFloater" userdata="friends" />
18 </menu_item_call> 18 </menu_item_call>
19 <menu_item_call enabled="true" label="Gestures..." name="Gestures..."> 19 <menu_item_call enabled="true" label="Gestures..." name="Gestures...">
20 <on_click function="ShowFloater" userdata="gestures" /> 20 <on_click function="ShowFloater" userdata="gestures" />
21 </menu_item_call> 21 </menu_item_call>
22 <pie_menu enabled="true" label="Take Off &gt;" name="Take Off &gt;"> 22 <pie_menu enabled="true" label="Take Off &gt;" name="Take Off &gt;">
23 <pie_menu enabled="true" label="Clothes &gt;" name="Clothes &gt;"> 23 <pie_menu enabled="true" label="Clothes &gt;" name="Clothes &gt;">
24 <menu_item_call bottom="-29" enabled="false" height="19" label="Shirt" left="0" 24 <menu_item_call bottom="-29" enabled="false" height="19" label="Shirt" left="0"
25 mouse_opaque="true" name="Shirt" width="118"> 25 mouse_opaque="true" name="Shirt" width="118">
26 <on_click function="Edit.TakeOff" userdata="shirt" /> 26 <on_click function="Edit.TakeOff" userdata="shirt" />
27 <on_enable function="Edit.EnableTakeOff" userdata="shirt" /> 27 <on_enable function="Edit.EnableTakeOff" userdata="shirt" />
28 </menu_item_call> 28 </menu_item_call>
29 <menu_item_call bottom="-48" enabled="false" height="19" label="Pants" left="0" 29 <menu_item_call bottom="-48" enabled="false" height="19" label="Pants" left="0"
30 mouse_opaque="true" name="Pants" width="118"> 30 mouse_opaque="true" name="Pants" width="118">
31 <on_click function="Edit.TakeOff" userdata="pants" /> 31 <on_click function="Edit.TakeOff" userdata="pants" />
32 <on_enable function="Edit.EnableTakeOff" userdata="pants" /> 32 <on_enable function="Edit.EnableTakeOff" userdata="pants" />
33 </menu_item_call> 33 </menu_item_call>
34 <menu_item_call bottom="-67" enabled="false" height="19" label="Shoes" left="0" 34 <menu_item_call bottom="-67" enabled="false" height="19" label="Shoes" left="0"
35 mouse_opaque="true" name="Shoes" width="118"> 35 mouse_opaque="true" name="Shoes" width="118">
36 <on_click function="Edit.TakeOff" userdata="shoes" /> 36 <on_click function="Edit.TakeOff" userdata="shoes" />
37 <on_enable function="Edit.EnableTakeOff" userdata="shoes" /> 37 <on_enable function="Edit.EnableTakeOff" userdata="shoes" />
38 </menu_item_call> 38 </menu_item_call>
39 <menu_item_call bottom="-86" enabled="false" height="19" label="Socks" left="0" 39 <menu_item_call bottom="-86" enabled="false" height="19" label="Socks" left="0"
40 mouse_opaque="true" name="Socks" width="118"> 40 mouse_opaque="true" name="Socks" width="118">
41 <on_click function="Edit.TakeOff" userdata="socks" /> 41 <on_click function="Edit.TakeOff" userdata="socks" />
42 <on_enable function="Edit.EnableTakeOff" userdata="socks" /> 42 <on_enable function="Edit.EnableTakeOff" userdata="socks" />
43 </menu_item_call> 43 </menu_item_call>
44 <menu_item_call bottom="-105" enabled="false" height="19" label="Jacket" left="0" 44 <menu_item_call bottom="-105" enabled="false" height="19" label="Jacket" left="0"
45 mouse_opaque="true" name="Jacket" width="118"> 45 mouse_opaque="true" name="Jacket" width="118">
46 <on_click function="Edit.TakeOff" userdata="jacket" /> 46 <on_click function="Edit.TakeOff" userdata="jacket" />
47 <on_enable function="Edit.EnableTakeOff" userdata="jacket" /> 47 <on_enable function="Edit.EnableTakeOff" userdata="jacket" />
48 </menu_item_call> 48 </menu_item_call>
49 <menu_item_call bottom="-124" enabled="false" height="19" label="Gloves" left="0" 49 <menu_item_call bottom="-124" enabled="false" height="19" label="Gloves" left="0"
50 mouse_opaque="true" name="Gloves" width="118"> 50 mouse_opaque="true" name="Gloves" width="118">
51 <on_click function="Edit.TakeOff" userdata="gloves" /> 51 <on_click function="Edit.TakeOff" userdata="gloves" />
52 <on_enable function="Edit.EnableTakeOff" userdata="gloves" /> 52 <on_enable function="Edit.EnableTakeOff" userdata="gloves" />
53 </menu_item_call> 53 </menu_item_call>
54 <pie_menu enabled="true" label="More &gt;" name="More &gt;"> 54 <pie_menu enabled="true" label="More &gt;" name="More &gt;">
55 <menu_item_call bottom="-143" enabled="false" height="19" label="Undershirt" left="0" 55 <menu_item_call bottom="-143" enabled="false" height="19" label="Undershirt" left="0"
56 mouse_opaque="true" name="Self Undershirt" width="118"> 56 mouse_opaque="true" name="Self Undershirt" width="118">
57 <on_click function="Edit.TakeOff" userdata="undershirt" /> 57 <on_click function="Edit.TakeOff" userdata="undershirt" />
58 <on_enable function="Edit.EnableTakeOff" userdata="undershirt" /> 58 <on_enable function="Edit.EnableTakeOff" userdata="undershirt" />
59 </menu_item_call> 59 </menu_item_call>
60 <menu_item_separator /> 60 <menu_item_separator />
61 <menu_item_call bottom="-200" enabled="true" height="19" label="All Clothes" left="0" 61 <menu_item_call bottom="-200" enabled="true" height="19" label="All Clothes" left="0"
62 mouse_opaque="true" name="All Clothes" width="118"> 62 mouse_opaque="true" name="All Clothes" width="118">
63 <on_click function="Edit.TakeOff" userdata="all" /> 63 <on_click function="Edit.TakeOff" userdata="all" />
64 </menu_item_call> 64 </menu_item_call>
65 <menu_item_separator /> 65 <menu_item_separator />
66 <menu_item_call bottom="-162" enabled="false" height="19" label="Underpants" left="0" 66 <menu_item_call bottom="-162" enabled="false" height="19" label="Underpants" left="0"
67 mouse_opaque="true" name="Self Underpants" width="118"> 67 mouse_opaque="true" name="Self Underpants" width="118">
68 <on_click function="Edit.TakeOff" userdata="underpants" /> 68 <on_click function="Edit.TakeOff" userdata="underpants" />
69 <on_enable function="Edit.EnableTakeOff" userdata="underpants" /> 69 <on_enable function="Edit.EnableTakeOff" userdata="underpants" />
70 </menu_item_call> 70 </menu_item_call>
71 </pie_menu> 71 </pie_menu>
72 <menu_item_call bottom="-181" enabled="false" height="19" label="Skirt" left="0" 72 <menu_item_call bottom="-181" enabled="false" height="19" label="Skirt" left="0"
73 mouse_opaque="true" name="Skirt" width="118"> 73 mouse_opaque="true" name="Skirt" width="118">
74 <on_click function="Edit.TakeOff" userdata="skirt" /> 74 <on_click function="Edit.TakeOff" userdata="skirt" />
75 <on_enable function="Edit.EnableTakeOff" userdata="skirt" /> 75 <on_enable function="Edit.EnableTakeOff" userdata="skirt" />
76 </menu_item_call> 76 </menu_item_call>
77 </pie_menu> 77 </pie_menu>
78 <menu_item_separator /> 78 <menu_item_separator />
79 <pie_menu enabled="true" label="HUD &gt;" name="Object Detach HUD" /> 79 <pie_menu enabled="true" label="HUD &gt;" name="Object Detach HUD" />
80 <menu_item_separator /> 80 <menu_item_separator />
81 <pie_menu enabled="true" label="Detach &gt;" name="Object Detach" /> 81 <pie_menu enabled="true" label="Detach &gt;" name="Object Detach" />
82 <menu_item_separator /> 82 <menu_item_separator />
83 <menu_item_call enabled="true" label="Detach All" name="Detach All"> 83 <menu_item_call enabled="true" label="Detach All" name="Detach All">
84 <on_click function="Self.RemoveAllAttachments" userdata="" /> 84 <on_click function="Self.RemoveAllAttachments" userdata="" />
85 <on_enable function="Self.EnableRemoveAllAttachments" /> 85 <on_enable function="Self.EnableRemoveAllAttachments" />
86 </menu_item_call> 86 </menu_item_call>
87 </pie_menu> 87 </pie_menu>
88 <menu_item_call enabled="true" label="Appearance..." name="Appearance..."> 88 <menu_item_call enabled="true" label="Appearance..." name="Appearance...">
89 <on_click function="ShowFloater" userdata="appearance" /> 89 <on_click function="ShowFloater" userdata="appearance" />
90 <on_enable function="Edit.EnableCustomizeAvatar" /> 90 <on_enable function="Edit.EnableCustomizeAvatar" />
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 682acb9..89c1fe8 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
@@ -127,8 +127,7 @@
127 </menu_item_call> 127 </menu_item_call>
128 <menu_item_separator /> 128 <menu_item_separator />
129 <menu_item_call name="Duplicate" enabled="false" 129 <menu_item_call name="Duplicate" enabled="false"
130 label="Duplicate" 130 label="Duplicate">
131 shortcut="control|D">
132 <on_click function="Edit.Duplicate" userdata="" /> 131 <on_click function="Edit.Duplicate" userdata="" />
133 <on_enable function="Edit.EnableDuplicate" /> 132 <on_enable function="Edit.EnableDuplicate" />
134 </menu_item_call> 133 </menu_item_call>
@@ -205,6 +204,12 @@
205 userdata="all" /> 204 userdata="all" />
206 </menu_item_call> 205 </menu_item_call>
207 </menu> 206 </menu>
207 <menu_item_call name="Refresh Appearance"
208 label="Refresh Appearance"
209 shortcut="control|alt|R">
210 <on_click function="Advanced.RebakeTextures"
211 userdata="" />
212 </menu_item_call>
208 <menu_item_separator /> 213 <menu_item_separator />
209 <menu_item_call name="Gestures..." label="Gestures..." 214 <menu_item_call name="Gestures..." label="Gestures..."
210 shortcut="control|G"> 215 shortcut="control|G">
@@ -489,7 +494,7 @@
489 <on_check control="FlyBtnState" /> 494 <on_check control="FlyBtnState" />
490 </menu_item_check> 495 </menu_item_check>
491 <menu_item_separator /> 496 <menu_item_separator />
492 <menu_item_call name="Create Landmark Here" 497 <menu_item_call name="Create Landmark Here" shortcut="control|D"
493 label="Create Landmark Here"> 498 label="Create Landmark Here">
494 <on_click function="World.CreateLandmark" userdata="" /> 499 <on_click function="World.CreateLandmark" userdata="" />
495 <on_enable function="World.EnableCreateLandmark" userdata="" /> 500 <on_enable function="World.EnableCreateLandmark" userdata="" />
@@ -696,9 +701,9 @@
696 <on_enable function="Tools.SomethingSelectedNoHUD" /> 701 <on_enable function="Tools.SomethingSelectedNoHUD" />
697 </menu_item_call> 702 </menu_item_call>
698 <menu_item_call name="Menu Object Take" enabled="false" 703 <menu_item_call name="Menu Object Take" enabled="false"
699 label="Buy Object" visible="false"> 704 label="Take" visible="false">
700 <on_click function="Tools.BuyOrTake" userdata="" /> 705 <on_click function="Tools.Take" userdata="" />
701 <on_enable function="Tools.EnableBuyOrTake" userdata="Buy,Take" /> 706 <on_enable function="Tools.EnableTake" />
702 </menu_item_call> 707 </menu_item_call>
703 <menu_item_call name="Take Copy" enabled="false" 708 <menu_item_call name="Take Copy" enabled="false"
704 label="Take Copy"> 709 label="Take Copy">
@@ -932,24 +937,13 @@
932 937
933 <menu_item_separator /> 938 <menu_item_separator />
934 939
935 <menu_item_check name="High-res Snapshot" 940
936 label="High-res Snapshot">
937 <on_click function="ToggleControl"
938 userdata="HighResSnapshot" />
939 <on_check control="HighResSnapshot" />
940 </menu_item_check>
941 <menu_item_check name="Quiet Snapshots to Disk" 941 <menu_item_check name="Quiet Snapshots to Disk"
942 label="Quiet Snapshots to Disk"> 942 label="Quiet Snapshots to Disk">
943 <on_click function="ToggleControl" 943 <on_click function="ToggleControl"
944 userdata="QuietSnapshotsToDisk" /> 944 userdata="QuietSnapshotsToDisk" />
945 <on_check control="QuietSnapshotsToDisk" /> 945 <on_check control="QuietSnapshotsToDisk" />
946 </menu_item_check> 946 </menu_item_check>
947 <menu_item_check name="Compress Snapshots to Disk"
948 label="Compress Snapshots to Disk">
949 <on_click function="ToggleControl"
950 userdata="CompressSnapshotsToDisk" />
951 <on_check control="CompressSnapshotsToDisk" />
952 </menu_item_check>
953 <menu_item_check name="Show Mouselook Crosshairs" 947 <menu_item_check name="Show Mouselook Crosshairs"
954 label="Show Mouselook Crosshairs"> 948 label="Show Mouselook Crosshairs">
955 <on_click function="ToggleControl" 949 <on_click function="ToggleControl"
@@ -1619,7 +1613,8 @@
1619 userdata="" /> 1613 userdata="" />
1620 </menu_item_call> 1614 </menu_item_call>
1621 <menu_item_check name="Show XUI Names" 1615 <menu_item_check name="Show XUI Names"
1622 label="Show XUI Names"> 1616 label="Show XUI Names"
1617 shortcut="control|shift|x">
1623 <on_click function="Advanced.ToggleXUINames" 1618 <on_click function="Advanced.ToggleXUINames"
1624 userdata="" /> 1619 userdata="" />
1625 <on_check function="Advanced.CheckXUINames" 1620 <on_check function="Advanced.CheckXUINames"
@@ -1835,12 +1830,6 @@
1835 <on_click function="Advanced.DumpAttachments" 1830 <on_click function="Advanced.DumpAttachments"
1836 userdata="" /> 1831 userdata="" />
1837 </menu_item_call> 1832 </menu_item_call>
1838 <menu_item_call name="Rebake Textures"
1839 label="Rebake Textures"
1840 shortcut="control|alt|R">
1841 <on_click function="Advanced.RebakeTextures"
1842 userdata="" />
1843 </menu_item_call>
1844 </menu> 1833 </menu>
1845 1834
1846 1835
@@ -1963,12 +1952,6 @@
1963 userdata="LimitSelectDistance" /> 1952 userdata="LimitSelectDistance" />
1964 <on_check control="LimitSelectDistance" /> 1953 <on_check control="LimitSelectDistance" />
1965 </menu_item_check> 1954 </menu_item_check>
1966 <menu_item_check name="Disable Camera Constraints"
1967 label="Disable Camera Constraints">
1968 <on_click function="ToggleControl"
1969 userdata="DisableCameraConstraints" />
1970 <on_check control="DisableCameraConstraints" />
1971 </menu_item_check>
1972 <menu_item_check name="Mouse Smoothing" 1955 <menu_item_check name="Mouse Smoothing"
1973 label="Mouse Smoothing"> 1956 label="Mouse Smoothing">
1974 <on_click function="ToggleControl" 1957 <on_click function="ToggleControl"
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 67d3307..092daab 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
@@ -76,6 +76,10 @@
76 font="SansSerifSmall" height="16" initial_value="false" 76 font="SansSerifSmall" height="16" initial_value="false"
77 label="Rotate Mini-Map" left="151" mouse_opaque="true" 77 label="Rotate Mini-Map" left="151" mouse_opaque="true"
78 name="rotate_mini_map_checkbox" radio_style="false" width="256" /> 78 name="rotate_mini_map_checkbox" radio_style="false" width="256" />
79 <check_box bottom="-286" control_name="MiniMapTeleport" enabled="true" follows="left|top"
80 font="SansSerifSmall" height="16" initial_value="false"
81 label="Doubleclick Mini-Map Teleports" left="280" mouse_opaque="true"
82 name="teleport_mini_map_checkbox" radio_style="false" width="256" />
79 <check_box bottom="-304" control_name="NotifyMoneyChange" enabled="true" 83 <check_box bottom="-304" control_name="NotifyMoneyChange" enabled="true"
80 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 84 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
81 label="Notify when Linden dollars (L$) spent or received" left="151" 85 label="Notify when Linden dollars (L$) spent or received" left="151"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml
index 23e357f..1867323 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml
@@ -79,18 +79,23 @@
79 label="Automatic Appearance Camera Movement" left="148" mouse_opaque="true" 79 label="Automatic Appearance Camera Movement" left="148" mouse_opaque="true"
80 name="appearance camera movement" radio_style="false" 80 name="appearance camera movement" radio_style="false"
81 tool_tip="Use automatic camera positioning while in edit mode" width="242" /> 81 tool_tip="Use automatic camera positioning while in edit mode" width="242" />
82 <check_box bottom_delta="-18" control_name="DisableCameraConstraints" enabled="true"
83 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
84 label="Disable camera constraints" left="148" mouse_opaque="true"
85 name="Disable camera constraints" radio_style="false"
86 tool_tip="Disables camera limits such as distance and terrain" width="242" />
82 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 87 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
83 bottom="-228" drop_shadow_visible="true" enabled="true" follows="left|top" 88 bottom_delta="-32" drop_shadow_visible="true" enabled="true" follows="left|top"
84 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 89 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
85 mouse_opaque="true" name="text2" v_pad="0" width="128"> 90 mouse_opaque="true" name="text2" v_pad="0" width="128">
86 Avatar Display Options: 91 Avatar Display Options:
87 </text> 92 </text>
88 <check_box bottom="-232" control_name="FirstPersonAvatarVisible" enabled="true" 93 <check_box bottom_delta="-4" control_name="FirstPersonAvatarVisible" enabled="true"
89 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 94 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
90 label="Show Avatar in Mouselook" left="148" mouse_opaque="true" name="avfp" 95 label="Show Avatar in Mouselook" left="148" mouse_opaque="true" name="avfp"
91 radio_style="false" width="256" /> 96 radio_style="false" width="256" />
92 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 97 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
93 bottom="-264" drop_shadow_visible="true" enabled="true" follows="left|top" 98 bottom_delta="-32" drop_shadow_visible="true" enabled="true" follows="left|top"
94 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 99 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
95 mouse_opaque="true" name="text5" v_pad="0" width="128"> 100 mouse_opaque="true" name="text5" v_pad="0" width="128">
96 Joystick Options: 101 Joystick Options:
diff --git a/linden/indra/newview/skins/default/xui/en-us/strings.xml b/linden/indra/newview/skins/default/xui/en-us/strings.xml
index e8c341e..ecacc78 100644
--- a/linden/indra/newview/skins/default/xui/en-us/strings.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/strings.xml
@@ -1,180 +1,183 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<!-- This file contains strings that used to be hardcoded in the source. 2<!-- This file contains strings that used to be hardcoded in the source.
3 It is only for those strings which don't belong in a floater. 3 It is only for those strings which don't belong in a floater.
4 For example, the strings used in avatar chat bubbles, and strings 4 For example, the strings used in avatar chat bubbles, and strings
5 that are returned from one component and may appear in many places--> 5 that are returned from one component and may appear in many places-->
6<strings> 6<strings>
7 7
8 <!-- Login --> 8 <!-- Login -->
9 <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string> 9 <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string>
10 <string name="LoginAuthenticating">Authenticating</string> 10 <string name="LoginAuthenticating">Authenticating</string>
11 <string name="LoginMaintenance">Performing account maintenance...</string> 11 <string name="LoginMaintenance">Performing account maintenance...</string>
12 <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string> 12 <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string>
13 <string name="LoginPrecaching">Loading world...</string> 13 <string name="LoginPrecaching">Loading world...</string>
14 <string name="LoginInitializingBrowser">Initializing embedded web browser...</string> 14 <string name="LoginInitializingBrowser">Initializing embedded web browser...</string>
15 <string name="LoginInitializingMultimedia">Initializing multimedia...</string> 15 <string name="LoginInitializingMultimedia">Initializing multimedia...</string>
16 <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string> 16 <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string>
17 <string name="LoginProcessingResponse">Processing Response...</string> 17 <string name="LoginProcessingResponse">Processing Response...</string>
18 <string name="LoginInitializingWorld">Initializing World...</string> 18 <string name="LoginInitializingWorld">Initializing World...</string>
19 <string name="LoginDecodingImages">Decoding images...</string> 19 <string name="LoginDecodingImages">Decoding images...</string>
20 <string name="LoginInitializingQuicktime">Initializing QuickTime...</string> 20 <string name="LoginInitializingQuicktime">Initializing QuickTime...</string>
21 <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string> 21 <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string>
22 <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string> 22 <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string>
23 <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string> 23 <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
24 <string name="LoginConnectingToRegion">Connecting to region...</string> 24 <string name="LoginConnectingToRegion">Connecting to region...</string>
25 <string name="LoginDownloadingClothing">Downloading clothing...</string> 25 <string name="LoginDownloadingClothing">Downloading clothing...</string>
26 <string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string> 26 <string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string>
27 27
28 28
29 <!-- Disconnection --> 29 <!-- Disconnection -->
30 <string name="AgentLostConnection">This region may be experiencing trouble. Please check your connection to the Internet.</string> 30 <string name="AgentLostConnection">This region may be experiencing trouble. Please check your connection to the Internet.</string>
31 31
32 32
33 <!-- Tooltip, llhoverview.cpp --> 33 <!-- Tooltip, llhoverview.cpp -->
34 <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar --> 34 <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
35 <string name="TooltipNoName">(no name)</string> <!-- No name on an object --> 35 <string name="TooltipNoName">(no name)</string> <!-- No name on an object -->
36 <string name="TooltipOwner">Owner:</string> <!-- Owner name follows --> 36 <string name="TooltipOwner">Owner:</string> <!-- Owner name follows -->
37 <string name="TooltipPublic">Public</string> <!-- Public permissions on an object --> 37 <string name="TooltipPublic">Public</string> <!-- Public permissions on an object -->
38 <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group --> 38 <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group -->
39 <string name="TooltipFlagScript">Script</string> 39 <string name="TooltipFlagScript">Script</string>
40 <string name="TooltipFlagPhysics">Physics</string> 40 <string name="TooltipFlagPhysics">Physics</string>
41 <string name="TooltipFlagTouch">Touch</string> 41 <string name="TooltipFlagTouch">Touch</string>
42 <string name="TooltipFlagL$">L$</string> 42 <string name="TooltipFlagL$">L$</string>
43 <string name="TooltipFlagDropInventory">Drop Inventory</string> 43 <string name="TooltipFlagDropInventory">Drop Inventory</string>
44 <string name="TooltipFlagPhantom">Phantom</string> 44 <string name="TooltipFlagPhantom">Phantom</string>
45 <string name="TooltipFlagTemporary">Temporary</string> 45 <string name="TooltipFlagTemporary">Temporary</string>
46 <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string> 46 <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string>
47 <string name="TooltipFreeToCopy">Free to copy</string> 47 <string name="TooltipFreeToCopy">Free to copy</string>
48 <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version --> 48 <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version -->
49 <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) --> 49 <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) -->
50 <string name="TooltipFlagGroupBuild">Group Build</string> 50 <string name="TooltipFlagGroupBuild">Group Build</string>
51 <string name="TooltipFlagNoBuild">No Build</string> 51 <string name="TooltipFlagNoBuild">No Build</string>
52 <string name="TooltipFlagNoEdit">Group Build</string> 52 <string name="TooltipFlagNoEdit">Group Build</string>
53 <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area --> 53 <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area -->
54 <string name="TooltipFlagNoFly">No Fly</string> 54 <string name="TooltipFlagNoFly">No Fly</string>
55 <string name="TooltipFlagGroupScripts">Group Scripts</string> 55 <string name="TooltipFlagGroupScripts">Group Scripts</string>
56 <string name="TooltipFlagNoScripts">No Scripts</string> 56 <string name="TooltipFlagNoScripts">No Scripts</string>
57 <string name="TooltipLand">Land:</string> 57 <string name="TooltipLand">Land:</string>
58 <string name="TooltipMustSingleDrop">Only a single item can be dragged here</string> 58 <string name="TooltipMustSingleDrop">Only a single item can be dragged here</string>
59 59
60 60
61 <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. --> 61 <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. -->
62 <string name="RetrievingData">Retrieving...</string> 62 <string name="RetrievingData">Retrieving...</string>
63 63
64 <string name="ReleaseNotes">Release Notes</string> 64 <string name="ReleaseNotes">Release Notes</string>
65 65
66 <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData --> 66 <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData -->
67 <string name="LoadingData">Loading...</string> 67 <string name="LoadingData">Loading...</string>
68 68
69 69
70 <!-- namecache --> 70 <!-- namecache -->
71 <!-- Avatar name: text shown for LLUUID::null --> 71 <!-- Avatar name: text shown for LLUUID::null -->
72 <string name="AvatarNameNobody">(nobody)</string> 72 <string name="AvatarNameNobody">(nobody)</string>
73 73
74 <!-- Avatar name: text shown while fetching name --> 74 <!-- Avatar name: text shown while fetching name -->
75 <string name="AvatarNameWaiting">(waiting)</string> 75 <string name="AvatarNameWaiting">(waiting)</string>
76 76
77 <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. --> 77 <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. -->
78 <string name="AvatarNameHippos">(hippos)</string> 78 <string name="AvatarNameHippos">(hippos)</string>
79 79
80 <!-- Group name: text shown for LLUUID::null --> 80 <!-- Group name: text shown for LLUUID::null -->
81 <string name="GroupNameNone">(none)</string> 81 <string name="GroupNameNone">(none)</string>
82 82
83 <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. --> 83 <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. -->
84 <string name="AssetErrorNone">No error</string> 84 <string name="AssetErrorNone">No error</string>
85 <string name="AssetErrorRequestFailed">Asset request: failed</string> 85 <string name="AssetErrorRequestFailed">Asset request: failed</string>
86 <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string> 86 <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string>
87 <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string> 87 <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string>
88 <string name="AssetErrorEOF">End of file</string> 88 <string name="AssetErrorEOF">End of file</string>
89 <string name="AssetErrorCannotOpenFile">Cannot open file</string> 89 <string name="AssetErrorCannotOpenFile">Cannot open file</string>
90 <string name="AssetErrorFileNotFound">File not found</string> 90 <string name="AssetErrorFileNotFound">File not found</string>
91 <string name="AssetErrorTCPTimeout">File transfer timeout</string> 91 <string name="AssetErrorTCPTimeout">File transfer timeout</string>
92 <string name="AssetErrorCircuitGone">Circuit gone</string> 92 <string name="AssetErrorCircuitGone">Circuit gone</string>
93 <string name="AssetErrorUnknownStatus">Unknown status</string> 93 <string name="AssetErrorUnknownStatus">Unknown status</string>
94 94
95 <!-- llvoavatar. Displayed in the avatar's chat bubble --> 95 <!-- llvoavatar. Displayed in the avatar's chat bubble -->
96 <string name="AvatarEditingApparance">(Editing Appearance)</string> 96 <string name="AvatarEditingApparance">(Editing Appearance)</string>
97 <string name="AvatarAway">Away</string> 97 <string name="AvatarAway">Away</string>
98 <string name="AvatarBusy">Busy</string> 98 <string name="AvatarBusy">Busy</string>
99 <string name="AvatarMuted">Muted</string> 99 <string name="AvatarMuted">Muted</string>
100 100
101 <!-- animations --> 101 <!-- animations -->
102 <string name="anim_express_afraid">Afraid</string> 102 <string name="anim_express_afraid">Afraid</string>
103 <string name="anim_express_anger">Angry</string> 103 <string name="anim_express_anger">Angry</string>
104 <string name="anim_away">Away</string> 104 <string name="anim_away">Away</string>
105 <string name="anim_backflip">Backflip</string> 105 <string name="anim_backflip">Backflip</string>
106 <string name="anim_express_laugh">Belly Laugh</string> 106 <string name="anim_express_laugh">Belly Laugh</string>
107 <string name="anim_express_toothsmile">BigSmile</string> 107 <string name="anim_express_toothsmile">BigSmile</string>
108 <string name="anim_blowkiss">Blow Kiss</string> 108 <string name="anim_blowkiss">Blow Kiss</string>
109 <string name="anim_express_bored">Bored</string> 109 <string name="anim_express_bored">Bored</string>
110 <string name="anim_bow">Bow</string> 110 <string name="anim_bow">Bow</string>
111 <string name="anim_clap">Clap</string> 111 <string name="anim_clap">Clap</string>
112 <string name="anim_courtbow">Court Bow</string> 112 <string name="anim_courtbow">Court Bow</string>
113 <string name="anim_express_cry">Cry</string> 113 <string name="anim_express_cry">Cry</string>
114 <string name="anim_dance1">Dance 1</string> 114 <string name="anim_dance1">Dance 1</string>
115 <string name="anim_dance2">Dance 2</string> 115 <string name="anim_dance2">Dance 2</string>
116 <string name="anim_dance3">Dance 3</string> 116 <string name="anim_dance3">Dance 3</string>
117 <string name="anim_dance4">Dance 4</string> 117 <string name="anim_dance4">Dance 4</string>
118 <string name="anim_dance5">Dance 5</string> 118 <string name="anim_dance5">Dance 5</string>
119 <string name="anim_dance6">Dance 6</string> 119 <string name="anim_dance6">Dance 6</string>
120 <string name="anim_dance7">Dance 7</string> 120 <string name="anim_dance7">Dance 7</string>
121 <string name="anim_dance8">Dance 8</string> 121 <string name="anim_dance8">Dance 8</string>
122 <string name="anim_express_disdain">Disdain</string> 122 <string name="anim_express_disdain">Disdain</string>
123 <string name="anim_drink">Drink</string> 123 <string name="anim_drink">Drink</string>
124 <string name="anim_express_embarrased">Embarrassed</string> 124 <string name="anim_express_embarrased">Embarrassed</string>
125 <string name="anim_angry_fingerwag">Finger Wag</string> 125 <string name="anim_angry_fingerwag">Finger Wag</string>
126 <string name="anim_fist_pump">Fist Pump</string> 126 <string name="anim_fist_pump">Fist Pump</string>
127 <string name="anim_yoga_float">Floating Yoga</string> 127 <string name="anim_yoga_float">Floating Yoga</string>
128 <string name="anim_express_frown">Frown</string> 128 <string name="anim_express_frown">Frown</string>
129 <string name="anim_impatient">Impatient</string> 129 <string name="anim_impatient">Impatient</string>
130 <string name="anim_jumpforjoy">Jump For Joy</string> 130 <string name="anim_jumpforjoy">Jump For Joy</string>
131 <string name="anim_kissmybutt">Kiss My Butt</string> 131 <string name="anim_kissmybutt">Kiss My Butt</string>
132 <string name="anim_express_kiss">Kiss</string> 132 <string name="anim_express_kiss">Kiss</string>
133 <string name="anim_laugh_short">Laugh</string> 133 <string name="anim_laugh_short">Laugh</string>
134 <string name="anim_musclebeach">Muscle Beach</string> 134 <string name="anim_musclebeach">Muscle Beach</string>
135 <string name="anim_no_unhappy">No (Unhappy)</string> 135 <string name="anim_no_unhappy">No (Unhappy)</string>
136 <string name="anim_no_head">No</string> 136 <string name="anim_no_head">No</string>
137 <string name="anim_nyanya">Nya-nya-nya</string> 137 <string name="anim_nyanya">Nya-nya-nya</string>
138 <string name="anim_punch_onetwo">One-Two Punch</string> 138 <string name="anim_punch_onetwo">One-Two Punch</string>
139 <string name="anim_express_open_mouth">Open Mouth</string> 139 <string name="anim_express_open_mouth">Open Mouth</string>
140 <string name="anim_peace">Peace</string> 140 <string name="anim_peace">Peace</string>
141 <string name="anim_point_you">Point at Other</string> 141 <string name="anim_point_you">Point at Other</string>
142 <string name="anim_point_me">Point at Self</string> 142 <string name="anim_point_me">Point at Self</string>
143 <string name="anim_punch_l">Punch Left</string> 143 <string name="anim_punch_l">Punch Left</string>
144 <string name="anim_punch_r">Punch Right</string> 144 <string name="anim_punch_r">Punch Right</string>
145 <string name="anim_rps_countdown">RPS count</string> 145 <string name="anim_rps_countdown">RPS count</string>
146 <string name="anim_rps_paper">RPS paper</string> 146 <string name="anim_rps_paper">RPS paper</string>
147 <string name="anim_rps_rock">RPS rock</string> 147 <string name="anim_rps_rock">RPS rock</string>
148 <string name="anim_rps_scissors">RPS scissors</string> 148 <string name="anim_rps_scissors">RPS scissors</string>
149 <string name="anim_express_repulsed">Repulsed</string> 149 <string name="anim_express_repulsed">Repulsed</string>
150 <string name="anim_kick_roundhouse_r">Roundhouse Kick</string> 150 <string name="anim_kick_roundhouse_r">Roundhouse Kick</string>
151 <string name="anim_express_sad">Sad</string> 151 <string name="anim_express_sad">Sad</string>
152 <string name="anim_salute">Salute</string> 152 <string name="anim_salute">Salute</string>
153 <string name="anim_shout">Shout</string> 153 <string name="anim_shout">Shout</string>
154 <string name="anim_express_shrug">Shrug</string> 154 <string name="anim_express_shrug">Shrug</string>
155 <string name="anim_express_smile">Smile</string> 155 <string name="anim_express_smile">Smile</string>
156 <string name="anim_smoke_idle">Smoke Idle</string> 156 <string name="anim_smoke_idle">Smoke Idle</string>
157 <string name="anim_smoke_inhale">Smoke Inhale</string> 157 <string name="anim_smoke_inhale">Smoke Inhale</string>
158 <string name="anim_smoke_throw_down">Smoke Throw Down</string> 158 <string name="anim_smoke_throw_down">Smoke Throw Down</string>
159 <string name="anim_express_surprise">Surprise</string> 159 <string name="anim_express_surprise">Surprise</string>
160 <string name="anim_sword_strike_r">Sword Strike</string> 160 <string name="anim_sword_strike_r">Sword Strike</string>
161 <string name="anim_angry_tantrum">Tantrum</string> 161 <string name="anim_angry_tantrum">Tantrum</string>
162 <string name="anim_express_tongue_out">TongueOut</string> 162 <string name="anim_express_tongue_out">TongueOut</string>
163 <string name="anim_hello">Wave</string> 163 <string name="anim_hello">Wave</string>
164 <string name="anim_whisper">Whisper</string> 164 <string name="anim_whisper">Whisper</string>
165 <string name="anim_whistle">Whistle</string> 165 <string name="anim_whistle">Whistle</string>
166 <string name="anim_express_wink">Wink</string> 166 <string name="anim_express_wink">Wink</string>
167 <string name="anim_wink_hollywood">Wink (Hollywood)</string> 167 <string name="anim_wink_hollywood">Wink (Hollywood)</string>
168 <string name="anim_express_worry">Worry</string> 168 <string name="anim_express_worry">Worry</string>
169 <string name="anim_yes_happy">Yes (Happy)</string> 169 <string name="anim_yes_happy">Yes (Happy)</string>
170 <string name="anim_yes_head">Yes</string> 170 <string name="anim_yes_head">Yes</string>
171 171
172 <string name="texture_loading">Loading...</string> 172 <string name="texture_loading">Loading...</string>
173 <string name="worldmap_offline">Offline</string> 173 <string name="worldmap_offline">Offline</string>
174 174
175 <!-- Chat --> 175 <!-- Chat -->
176 <string name="whisper">whispers:</string> 176 <string name="whisper">whispers:</string>
177 <string name="shout">shouts:</string> 177 <string name="shout">shouts:</string>
178 178
179</strings> 179 <!-- System messages -->
180 180 <string name="landmark_created">You created a landmark at</string>
181
182</strings>
183
diff --git a/linden/indra/newview/skins/default/xui/fr/floater_about_land.xml b/linden/indra/newview/skins/default/xui/fr/floater_about_land.xml
index 50ce466..9742d2f 100644
--- a/linden/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/linden/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,508 +1,508 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="floaterland" title="À propos du terrain"> 2<floater name="floaterland" title="À propos du terrain">
3 <tab_container name="landtab"> 3 <tab_container name="landtab">
4 <panel label="Général" name="land_general_panel"> 4 <panel label="Général" name="land_general_panel">
5 <text type="string" length="1" name="Name:"> 5 <text type="string" length="1" name="Name:">
6 Nom : 6 Nom :
7 </text> 7 </text>
8 <text type="string" length="1" name="Description:"> 8 <text type="string" length="1" name="Description:">
9 Description : 9 Description :
10 </text> 10 </text>
11 <text type="string" length="1" name="Owner:"> 11 <text type="string" length="1" name="Owner:">
12 Propriétaire : 12 Propriétaire :
13 </text> 13 </text>
14 <text type="string" length="1" name="OwnerText"> 14 <text type="string" length="1" name="OwnerText">
15 Leyla Linden 15 Leyla Linden
16 </text> 16 </text>
17 <button label="Profil..." label_selected="Profil..." name="Profile..." /> 17 <button label="Profil..." label_selected="Profil..." name="Profile..." />
18 <text type="string" length="1" name="Group:"> 18 <text type="string" length="1" name="Group:">
19 Groupe : 19 Groupe :
20 </text> 20 </text>
21 <button label="Définir..." label_selected="Définir..." name="Set..." /> 21 <button label="Définir..." label_selected="Définir..." name="Set..." />
22 <check_box label="Autoriser le transfert au groupe" name="check deed" 22 <check_box label="Autoriser le transfert au groupe" name="check deed"
23 tool_tip="Un officier peut transférer ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe." /> 23 tool_tip="Un officier peut transférer ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe." />
24 <button label="Transférer..." label_selected="Transférer..." name="Deed..." 24 <button label="Transférer..." label_selected="Transférer..." name="Deed..."
25 tool_tip="Vous ne pouvez transférer le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné." /> 25 tool_tip="Vous ne pouvez transférer le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné." />
26 <check_box label="Le propriétaire contribue par transfert" name="check contib" 26 <check_box label="Le propriétaire contribue par transfert" name="check contib"
27 tool_tip="Lorsque le terrain est transféré au groupe, la contribution du précédent propriétaire suffit à l&apos;entretenir." /> 27 tool_tip="Lorsque le terrain est transféré au groupe, la contribution du précédent propriétaire suffit à l&apos;entretenir." />
28 <check_box label="Le propriétaire contribue par une donation" name="check contrib" 28 <check_box label="Le propriétaire contribue par une donation" name="check contrib"
29 tool_tip="Lorsqu&apos;un titre de propriété est transféré au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant." /> 29 tool_tip="Lorsqu&apos;un titre de propriété est transféré au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant." />
30 <text type="string" length="1" name="For Sale:"> 30 <text type="string" length="1" name="For Sale:">
31 À vendre : 31 À vendre :
32 </text> 32 </text>
33 <text type="string" length="1" name="Not for sale."> 33 <text type="string" length="1" name="Not for sale.">
34 Pas à vendre. 34 Pas à vendre.
35 </text> 35 </text>
36 <text type="string" length="1" name="For Sale: Price L$[PRICE]."> 36 <text type="string" length="1" name="For Sale: Price L$[PRICE].">
37 Prix : [PRICE] $L. 37 Prix : [PRICE] $L.
38 </text> 38 </text>
39 <button label="Vendre le terrain..." label_selected="Vendre le terrain..." 39 <button label="Vendre le terrain..." label_selected="Vendre le terrain..."
40 name="Sell Land..." /> 40 name="Sell Land..." />
41 <text type="string" length="1" name="For sale to"> 41 <text type="string" length="1" name="For sale to">
42 À vendre à : [BUYER] 42 À vendre à : [BUYER]
43 </text> 43 </text>
44 <text type="string" length="1" name="Sell with landowners objects in parcel."> 44 <text type="string" length="1" name="Sell with landowners objects in parcel.">
45 Objets inclus dans la vente. 45 Objets inclus dans la vente.
46 </text> 46 </text>
47 <text type="string" length="1" name="Selling with no objects in parcel."> 47 <text type="string" length="1" name="Selling with no objects in parcel.">
48 Objets non inclus dans la vente. 48 Objets non inclus dans la vente.
49 </text> 49 </text>
50 <button label="Annuler la vente du terrain" 50 <button label="Annuler la vente du terrain"
51 label_selected="Annuler la vente du terrain" name="Cancel Land Sale" /> 51 label_selected="Annuler la vente du terrain" name="Cancel Land Sale" />
52 <text type="string" length="1" name="Claimed:"> 52 <text type="string" length="1" name="Claimed:">
53 Réclamée : 53 Réclamée :
54 </text> 54 </text>
55 <text type="string" length="1" name="DateClaimText"> 55 <text type="string" length="1" name="DateClaimText">
56 Tue Aug 15 13:47:25 2006 56 Tue Aug 15 13:47:25 2006
57 </text> 57 </text>
58 <text type="string" length="1" name="PriceLabel"> 58 <text type="string" length="1" name="PriceLabel">
59 Surface : 59 Surface :
60 </text> 60 </text>
61 <text type="string" length="1" name="PriceText"> 61 <text type="string" length="1" name="PriceText">
62 4048 m² 62 4048 m²
63 </text> 63 </text>
64 <text type="string" length="1" name="Traffic:"> 64 <text type="string" length="1" name="Traffic:">
65 Trafic : 65 Trafic :
66 </text> 66 </text>
67 <text type="string" length="1" name="DwellText"> 67 <text type="string" length="1" name="DwellText">
68 0 68 0
69 </text> 69 </text>
70 <button label="Acheter le terrain..." label_selected="Acheter le terrain..." 70 <button label="Acheter le terrain..." label_selected="Acheter le terrain..."
71 name="Buy Land..." /> 71 name="Buy Land..." />
72 <button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." 72 <button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..."
73 name="Buy For Group..." /> 73 name="Buy For Group..." />
74 <button label="Acheter un passe..." label_selected="Acheter un passe..." 74 <button label="Acheter un passe..." label_selected="Acheter un passe..."
75 name="Buy Pass..." 75 name="Buy Pass..."
76 tool_tip="Un passe vous donne un accès temporaire à ce terrain." /> 76 tool_tip="Un passe vous donne un accès temporaire à ce terrain." />
77 <button label="Céder le terrain..." label_selected="Céder le terrain..." 77 <button label="Céder le terrain..." label_selected="Céder le terrain..."
78 name="Abandon Land..." /> 78 name="Abandon Land..." />
79 <button label="Récupérer le terrain…" label_selected="Récupérer le terrain…" 79 <button label="Récupérer le terrain…" label_selected="Récupérer le terrain…"
80 name="Reclaim Land..." /> 80 name="Reclaim Land..." />
81 <button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." 81 <button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..."
82 tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères." /> 82 tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères." />
83 <text name="new users only"> 83 <text name="new users only">
84 Nouveaux utilisateurs uniquement 84 Nouveaux utilisateurs uniquement
85 </text> 85 </text>
86 <text name="anyone"> 86 <text name="anyone">
87 Tout le monde 87 Tout le monde
88 </text> 88 </text>
89 <string name="area_text"> 89 <string name="area_text">
90 Surface 90 Surface
91 </string> 91 </string>
92 <string name="area_size_text"> 92 <string name="area_size_text">
93 [AREA] m² 93 [AREA] m²
94 </string> 94 </string>
95 <string name="auction_id_text"> 95 <string name="auction_id_text">
96 Code de l&apos;enchère : [ID] 96 Code de l&apos;enchère : [ID]
97 </string> 97 </string>
98 <string name="need_tier_to_modify"> 98 <string name="need_tier_to_modify">
99 Pour modifier ce terrain, vous devez approuver votre achat. 99 Pour modifier ce terrain, vous devez approuver votre achat.
100 </string> 100 </string>
101 <string name="group_owned_text"> 101 <string name="group_owned_text">
102 (propriété du groupe) 102 (propriété du groupe)
103 </string> 103 </string>
104 <string name="profile_text"> 104 <string name="profile_text">
105 Profil... 105 Profil...
106 </string> 106 </string>
107 <string name="info_text"> 107 <string name="info_text">
108 Infos... 108 Infos...
109 </string> 109 </string>
110 <string name="public_text"> 110 <string name="public_text">
111 (public) 111 (public)
112 </string> 112 </string>
113 <string name="none_text"> 113 <string name="none_text">
114 (aucun) 114 (aucun)
115 </string> 115 </string>
116 <string name="sale_pending_text"> 116 <string name="sale_pending_text">
117 (vente en cours) 117 (vente en cours)
118 </string> 118 </string>
119 <string name="no_selection_text"> 119 <string name="no_selection_text">
120 Aucune parcelle sélectionnée. 120 Aucune parcelle sélectionnée.
121Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails. 121Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
122 </string> 122 </string>
123 </panel> 123 </panel>
124 <panel label="Règlement" name="land_covenant_panel"> 124 <panel label="Règlement" name="land_covenant_panel">
125 <text type="string" length="1" name="covenant_timestamp_text"> 125 <text type="string" length="1" name="covenant_timestamp_text">
126 Last Modified Wed Dec 31 16:00:00 1969 126 Last Modified Wed Dec 31 16:00:00 1969
127 </text> 127 </text>
128 <text type="string" length="1" name="region_name_lbl"> 128 <text type="string" length="1" name="region_name_lbl">
129 Région : 129 Région :
130 </text> 130 </text>
131 <text type="string" length="1" name="region_name_text"> 131 <text type="string" length="1" name="region_name_text">
132 leyla 132 leyla
133 </text> 133 </text>
134 <text type="string" length="1" name="estate_name_lbl"> 134 <text type="string" length="1" name="estate_name_lbl">
135 Domaine : 135 Domaine :
136 </text> 136 </text>
137 <text type="string" length="1" name="estate_name_text"> 137 <text type="string" length="1" name="estate_name_text">
138 continent 138 continent
139 </text> 139 </text>
140 <text type="string" length="1" name="estate_owner_lbl"> 140 <text type="string" length="1" name="estate_owner_lbl">
141 Propriétaire : 141 Propriétaire :
142 </text> 142 </text>
143 <text type="string" length="1" name="estate_owner_text"> 143 <text type="string" length="1" name="estate_owner_text">
144 (aucun) 144 (aucun)
145 </text> 145 </text>
146 <text type="string" length="1" name="resellable_clause"> 146 <text type="string" length="1" name="resellable_clause">
147 Le terrain acheté dans cette région ne peut être revendu. 147 Le terrain acheté dans cette région ne peut être revendu.
148 </text> 148 </text>
149 <text type="string" length="1" name="changeable_clause"> 149 <text type="string" length="1" name="changeable_clause">
150 Le terrain acheté dans cette région ne peut être revendu/divisé. 150 Le terrain acheté dans cette région ne peut être revendu/divisé.
151 </text> 151 </text>
152 <text_editor type="string" length="1" name="covenant_editor"> 152 <text_editor type="string" length="1" name="covenant_editor">
153 Il n&apos;y a aucun règlement pour ce domaine. 153 Il n&apos;y a aucun règlement pour ce domaine.
154 </text_editor> 154 </text_editor>
155 <text name="can_resell"> 155 <text name="can_resell">
156 Le terrain acheté dans cette région peut être revendu. 156 Le terrain acheté dans cette région peut être revendu.
157 </text> 157 </text>
158 <text name="can_not_resell"> 158 <text name="can_not_resell">
159 Le terrain acheté dans cette région ne peut pas être revendu. 159 Le terrain acheté dans cette région ne peut pas être revendu.
160 </text> 160 </text>
161 <text name="can_change"> 161 <text name="can_change">
162 Le terrain acheté dans cette région peut être fusionné ou divisé. 162 Le terrain acheté dans cette région peut être fusionné ou divisé.
163 </text> 163 </text>
164 <text name="can_not_change"> 164 <text name="can_not_change">
165 Le terrain acheté dans cette région ne peut pas être fusionné ou divisé. 165 Le terrain acheté dans cette région ne peut pas être fusionné ou divisé.
166 </text> 166 </text>
167 </panel> 167 </panel>
168 <panel label="Objets" name="land_objects_panel"> 168 <panel label="Objets" name="land_objects_panel">
169 <text name="parcel_object_bonus"> 169 <text name="parcel_object_bonus">
170 Facteur Bonus Objets : [BONUS] 170 Facteur Bonus Objets : [BONUS]
171 </text> 171 </text>
172 <text type="string" length="1" name="Simulator primitive usage:"> 172 <text type="string" length="1" name="Simulator primitive usage:">
173 Prims utilisés sur le sim : 173 Prims utilisés sur le sim :
174 </text> 174 </text>
175 <text type="string" length="1" name="0 out of 0 available"> 175 <text type="string" length="1" name="0 out of 0 available">
176 0 sur 14055 (14055 disponibles) 176 0 sur 14055 (14055 disponibles)
177 </text> 177 </text>
178 <text name="objects_available"> 178 <text name="objects_available">
179 [COUNT] sur [COUNT] ([COUNT] disponibles) 179 [COUNT] sur [COUNT] ([COUNT] disponibles)
180 </text> 180 </text>
181 <string name="objects_available_text"> 181 <string name="objects_available_text">
182 [COUNT] sur [MAX] ([AVAILABLE] disponibles) 182 [COUNT] sur [MAX] ([AVAILABLE] disponibles)
183 </string> 183 </string>
184 <string name="objects_deleted_text"> 184 <string name="objects_deleted_text">
185 [COUNT] sur [MAX] ([DELETED] seront supprimés) 185 [COUNT] sur [MAX] ([DELETED] seront supprimés)
186 </string> 186 </string>
187 <text type="string" length="1" name="Primitives parcel supports:"> 187 <text type="string" length="1" name="Primitives parcel supports:">
188 Prims max. sur la parcelle : 188 Prims max. sur la parcelle :
189 </text> 189 </text>
190 <text type="string" length="1" name="object_contrib_text"> 190 <text type="string" length="1" name="object_contrib_text">
191 [COUNT] 191 [COUNT]
192 </text> 192 </text>
193 <text type="string" length="1" name="Primitives on parcel:"> 193 <text type="string" length="1" name="Primitives on parcel:">
194 Prims sur la parcelle : 194 Prims sur la parcelle :
195 </text> 195 </text>
196 <text type="string" length="1" name="total_objects_text"> 196 <text type="string" length="1" name="total_objects_text">
197 [COUNT] 197 [COUNT]
198 </text> 198 </text>
199 <text type="string" length="1" name="Owned by parcel owner:"> 199 <text type="string" length="1" name="Owned by parcel owner:">
200 Appartenant au propriétaire : 200 Appartenant au propriétaire :
201 </text> 201 </text>
202 <text type="string" length="1" name="owner_objects_text"> 202 <text type="string" length="1" name="owner_objects_text">
203 [COUNT] 203 [COUNT]
204 </text> 204 </text>
205 <button label="Afficher" label_selected="Afficher" name="ShowOwner" /> 205 <button label="Afficher" label_selected="Afficher" name="ShowOwner" />
206 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." 206 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..."
207 tool_tip="Renvoyer les objets à leurs propriétaires." /> 207 tool_tip="Renvoyer les objets à leurs propriétaires." />
208 <text type="string" length="1" name="Set to group:"> 208 <text type="string" length="1" name="Set to group:">
209 Donnés au groupe : 209 Donnés au groupe :
210 </text> 210 </text>
211 <text type="string" length="1" name="group_objects_text"> 211 <text type="string" length="1" name="group_objects_text">
212 0 212 0
213 </text> 213 </text>
214 <button label="Afficher" label_selected="Afficher" name="ShowGroup" /> 214 <button label="Afficher" label_selected="Afficher" name="ShowGroup" />
215 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." 215 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..."
216 tool_tip="Renvoyer les objets à leurs propriétaires." /> 216 tool_tip="Renvoyer les objets à leurs propriétaires." />
217 <text type="string" length="1" name="Owned by others:"> 217 <text type="string" length="1" name="Owned by others:">
218 Appartenant à d&apos;autres : 218 Appartenant à d&apos;autres :
219 </text> 219 </text>
220 <text type="string" length="1" name="other_objects_text"> 220 <text type="string" length="1" name="other_objects_text">
221 0 221 0
222 </text> 222 </text>
223 <button label="Afficher" label_selected="Afficher" name="ShowOther" /> 223 <button label="Afficher" label_selected="Afficher" name="ShowOther" />
224 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." 224 <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..."
225 tool_tip="Renvoyer les objets à leurs propriétaires." /> 225 tool_tip="Renvoyer les objets à leurs propriétaires." />
226 <text type="string" length="1" name="Selected / sat upon:"> 226 <text type="string" length="1" name="Selected / sat upon:">
227 Sélectionnés/où quelqu&apos;un est assis : 227 Sélectionnés/où quelqu&apos;un est assis :
228 </text> 228 </text>
229 <text type="string" length="1" name="selected_objects_text"> 229 <text type="string" length="1" name="selected_objects_text">
230 0 230 0
231 </text> 231 </text>
232 <text type="string" length="1" name="Autoreturn other resident&amp;apos;s objects (minutes, 0 for off):"> 232 <text type="string" length="1" name="Autoreturn other resident&amp;apos;s objects (minutes, 0 for off):">
233 Renvoi automatique des objets appartenant aux autres résidents (minutes, 0 pour désactiver): 233 Renvoi automatique des objets appartenant aux autres résidents (minutes, 0 pour désactiver):
234 </text> 234 </text>
235 <text name="Autoreturn"> 235 <text name="Autoreturn">
236 Renvoi automatique des objets d&apos;autres résidents (minutes, 0 pour désactiver) : 236 Renvoi automatique des objets d&apos;autres résidents (minutes, 0 pour désactiver) :
237 </text> 237 </text>
238 <text type="string" length="1" name="Object Owners:"> 238 <text type="string" length="1" name="Object Owners:">
239 Propriétaires : 239 Propriétaires :
240 </text> 240 </text>
241 <button label="Rafraîchir la liste" label_selected="Rafraîchir la liste" 241 <button label="Rafraîchir la liste" label_selected="Rafraîchir la liste"
242 name="Refresh List" /> 242 name="Refresh List" />
243 <button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." 243 <button label="Renvoyer les objets..." label_selected="Renvoyer les objets..."
244 name="Return objects..." /> 244 name="Return objects..." />
245 <button label="" label_selected="" name="Type" tool_tip="Trier par type" /> 245 <button label="" label_selected="" name="Type" tool_tip="Trier par type" />
246 <button label="Nom" label_selected="Nom" name="Name" tool_tip="Trier par nom" /> 246 <button label="Nom" label_selected="Nom" name="Name" tool_tip="Trier par nom" />
247 <button label="Trafic" label_selected="Trafic" name="Count" tool_tip="Trier par trafic" /> 247 <button label="Trafic" label_selected="Trafic" name="Count" tool_tip="Trier par trafic" />
248 <name_list label="Plus récents" name="owner list"> 248 <name_list label="Plus récents" name="owner list">
249 <column label="Type" name="type" /> 249 <column label="Type" name="type" />
250 <column label="Nom" name="name" /> 250 <column label="Nom" name="name" />
251 <column label="Nombre" name="count" /> 251 <column label="Nombre" name="count" />
252 </name_list> 252 </name_list>
253 </panel> 253 </panel>
254 <panel label="Options" name="land_options_panel"> 254 <panel label="Options" name="land_options_panel">
255 <text type="string" length="1" name="allow_label"> 255 <text type="string" length="1" name="allow_label">
256 Autoriser les autres résidents à : 256 Autoriser les autres résidents à :
257 </text> 257 </text>
258 <text name="allow_label2"> 258 <text name="allow_label2">
259 Créer des objets : 259 Créer des objets :
260 </text> 260 </text>
261 <check_box label="Tous les résidents" name="edit objects check" /> 261 <check_box label="Tous les résidents" name="edit objects check" />
262 <check_box label="Modifier le terrain" name="edit land check" /> 262 <check_box label="Modifier le terrain" name="edit land check" />
263 <check_box label="Créer des repères" name="check landmark" /> 263 <check_box label="Créer des repères" name="check landmark" />
264 <check_box label="Groupe" name="edit group objects check" /> 264 <check_box label="Groupe" name="edit group objects check" />
265 <text name="allow_label3"> 265 <text name="allow_label3">
266 Apporter des objets : 266 Apporter des objets :
267 </text> 267 </text>
268 <check_box label="Tous les résidents" name="all object entry check" /> 268 <check_box label="Tous les résidents" name="all object entry check" />
269 <check_box label="Groupe" name="group object entry check" /> 269 <check_box label="Groupe" name="group object entry check" />
270 <text name="allow_label4"> 270 <text name="allow_label4">
271 Exécuter des scripts : 271 Exécuter des scripts :
272 </text> 272 </text>
273 <check_box label="Groupe" name="check group scripts" /> 273 <check_box label="Groupe" name="check group scripts" />
274 <check_box label="Voler" name="check fly" /> 274 <check_box label="Voler" name="check fly" />
275 <check_box label="Tous les résidents" name="check other scripts" /> 275 <check_box label="Tous les résidents" name="check other scripts" />
276 <text type="string" length="1" name="land_options_label"> 276 <text type="string" length="1" name="land_options_label">
277 Options du terrain : 277 Options du terrain :
278 </text> 278 </text>
279 <check_box label="Sécurisé (pas de dégâts)" name="check safe" /> 279 <check_box label="Sécurisé (pas de dégâts)" name="check safe" />
280 <check_box label="Interdire les bousculades" name="PushRestrictCheck" 280 <check_box label="Interdire les bousculades" name="PushRestrictCheck"
281 tool_tip="llPushObject ne fonctionne que sur les scripts du propriétaire de la parcelle ou sur les scripts où la personne qui bouscule est aussi la propriétaire du script." /> 281 tool_tip="llPushObject ne fonctionne que sur les scripts du propriétaire de la parcelle ou sur les scripts où la personne qui bouscule est aussi la propriétaire du script." />
282 <check_box label="Afficher dans la recherche (30 $L/semaine) sous" 282 <check_box label="Afficher dans la recherche (30 $L/semaine) sous"
283 name="ShowDirectoryCheck" 283 name="ShowDirectoryCheck"
284 tool_tip="Afficher la parcelle dans les résultats de recherche" /> 284 tool_tip="Afficher la parcelle dans les résultats de recherche" />
285 <combo_box name="land category"> 285 <combo_box name="land category">
286 <combo_item name="AnyCategory"> 286 <combo_item name="AnyCategory">
287 Toute catégorie 287 Toute catégorie
288 </combo_item> 288 </combo_item>
289 <combo_item name="LindenLocation"> 289 <combo_item name="LindenLocation">
290 Emplacement Linden 290 Emplacement Linden
291 </combo_item> 291 </combo_item>
292 <combo_item name="Adult"> 292 <combo_item name="Adult">
293 Adultes 293 Adultes
294 </combo_item> 294 </combo_item>
295 <combo_item name="Arts&amp;Culture"> 295 <combo_item name="Arts&amp;Culture">
296 Art et Culture 296 Art et Culture
297 </combo_item> 297 </combo_item>
298 <combo_item name="Business"> 298 <combo_item name="Business">
299 Affaires 299 Affaires
300 </combo_item> 300 </combo_item>
301 <combo_item name="Educational"> 301 <combo_item name="Educational">
302 Éducation 302 Éducation
303 </combo_item> 303 </combo_item>
304 <combo_item name="Gaming"> 304 <combo_item name="Gaming">
305 Jeux 305 Jeux
306 </combo_item> 306 </combo_item>
307 <combo_item name="Hangout"> 307 <combo_item name="Hangout">
308 Endroit favori 308 Endroit favori
309 </combo_item> 309 </combo_item>
310 <combo_item name="NewcomerFriendly"> 310 <combo_item name="NewcomerFriendly">
311 Convivial pour les nouveaux 311 Convivial pour les nouveaux
312 </combo_item> 312 </combo_item>
313 <combo_item name="Parks&amp;Nature"> 313 <combo_item name="Parks&amp;Nature">
314 Parcs et Nature 314 Parcs et Nature
315 </combo_item> 315 </combo_item>
316 <combo_item name="Residential"> 316 <combo_item name="Residential">
317 Résidentiel 317 Résidentiel
318 </combo_item> 318 </combo_item>
319 <combo_item name="Shopping"> 319 <combo_item name="Shopping">
320 Shopping 320 Shopping
321 </combo_item> 321 </combo_item>
322 <combo_item name="Other"> 322 <combo_item name="Other">
323 Autre 323 Autre
324 </combo_item> 324 </combo_item>
325 </combo_box> 325 </combo_box>
326 <check_box label="Publier liste sur le web" name="PublishCheck" 326 <check_box label="Publier liste sur le web" name="PublishCheck"
327 tool_tip="Publiez vos informations de parcelle sur le web." /> 327 tool_tip="Publiez vos informations de parcelle sur le web." />
328 <check_box label="Contenu pour adultes" name="MatureCheck" 328 <check_box label="Contenu pour adultes" name="MatureCheck"
329 tool_tip="Les infos sur votre parcelle, ou le contenu de cette dernière, sont à caractère adulte." /> 329 tool_tip="Les infos sur votre parcelle, ou le contenu de cette dernière, sont à caractère adulte." />
330 <button label="?" label_selected="?" name="?" /> 330 <button label="?" label_selected="?" name="?" />
331 <text type="string" length="1" name="Snapshot:"> 331 <text type="string" length="1" name="Snapshot:">
332 Photo : 332 Photo :
333 </text> 333 </text>
334 <texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image" /> 334 <texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image" />
335 <text type="string" length="1" name="Landing Point: (none)"> 335 <text type="string" length="1" name="Landing Point: (none)">
336 Point d&apos;atterrissage : (aucun) 336 Point d&apos;atterrissage : (aucun)
337 </text> 337 </text>
338 <text name="landing_point"> 338 <text name="landing_point">
339 Lieu d&apos;arrivée : [LANDING] 339 Lieu d&apos;arrivée : [LANDING]
340 </text> 340 </text>
341 <string name="landing_point_none"> 341 <string name="landing_point_none">
342 (aucun) 342 (aucun)
343 </string> 343 </string>
344 <button label="Définir" label_selected="Définir" name="Set" 344 <button label="Définir" label_selected="Définir" name="Set"
345 tool_tip="Définir le lieu d&apos;arrivée de l&apos;avatar sur votre position actuelle. ll doit se trouver sur cette parcelle de terrain." /> 345 tool_tip="Définir le lieu d&apos;arrivée de l&apos;avatar sur votre position actuelle. ll doit se trouver sur cette parcelle de terrain." />
346 <button label="Annuler" label_selected="Annuler" name="Clear" 346 <button label="Annuler" label_selected="Annuler" name="Clear"
347 tool_tip="Dégager le lieu d&apos;arrivée." /> 347 tool_tip="Dégager le lieu d&apos;arrivée." />
348 <text type="string" length="1" name="Teleport Routing: "> 348 <text type="string" length="1" name="Teleport Routing: ">
349 Options de téléportation : 349 Options de téléportation :
350 </text> 350 </text>
351 <combo_box name="landing type" 351 <combo_box name="landing type"
352 tool_tip="Vous permet de paramétrer les téléportations sur votre terrain."> 352 tool_tip="Vous permet de paramétrer les téléportations sur votre terrain.">
353 <combo_item type="string" length="1" name="Blocked"> 353 <combo_item type="string" length="1" name="Blocked">
354 Bloquée 354 Bloquée
355 </combo_item> 355 </combo_item>
356 <combo_item type="string" length="1" name="LandingPoint"> 356 <combo_item type="string" length="1" name="LandingPoint">
357 Lieu d&apos;arrivée défini 357 Lieu d&apos;arrivée défini
358 </combo_item> 358 </combo_item>
359 <combo_item type="string" length="1" name="Anywhere"> 359 <combo_item type="string" length="1" name="Anywhere">
360 Lieu d&apos;arrivée indéfini 360 Lieu d&apos;arrivée indéfini
361 </combo_item> 361 </combo_item>
362 </combo_box> 362 </combo_box>
363 <string name="push_restrict_text"> 363 <string name="push_restrict_text">
364 Interdire les bousculades 364 Interdire les bousculades
365 </string> 365 </string>
366 <string name="push_restrict_region_text"> 366 <string name="push_restrict_region_text">
367 Interdire les bousculades (passer outre les règles de la région) 367 Interdire les bousculades (passer outre les règles de la région)
368 </string> 368 </string>
369 </panel> 369 </panel>
370 <panel label="Média" name="land_media_panel"> 370 <panel label="Média" name="land_media_panel">
371 <text name="with media:"> 371 <text name="with media:">
372 Type de média : 372 Type de média :
373 </text> 373 </text>
374 <combo_box name="media type" 374 <combo_box name="media type"
375 tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre" /> 375 tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre" />
376 <text name="at URL:"> 376 <text name="at URL:">
377 URL du média : 377 URL du média :
378 </text> 378 </text>
379 <button label="Définir..." label_selected="Définir..." name="set_media_url" /> 379 <button label="Définir..." label_selected="Définir..." name="set_media_url" />
380 <text name="Description:"> 380 <text name="Description:">
381 Description : 381 Description :
382 </text> 382 </text>
383 <line_editor name="url_description" 383 <line_editor name="url_description"
384 tool_tip="Texte affiché à côté du bouton Jouer/Charger" /> 384 tool_tip="Texte affiché à côté du bouton Jouer/Charger" />
385 <text name="replace_texture_help"> 385 <text name="replace_texture_help">
386 (Les objets avec cette texture affichent le film ou 386 (Les objets avec cette texture affichent le film ou
387la page web quand vous cliquez sur la flèche Jouer). 387la page web quand vous cliquez sur la flèche Jouer).
388 </text> 388 </text>
389 <text name="Options:"> 389 <text name="Options:">
390 Options 390 Options
391média : 391média :
392 </text> 392 </text>
393 <check_box label="Média en boucle" name="media_loop" 393 <check_box label="Média en boucle" name="media_loop"
394 tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera." /> 394 tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera." />
395 <check_box label="Masquer l&apos;URL du média" name="hide_media_url" 395 <check_box label="Masquer l&apos;URL du média" name="hide_media_url"
396 tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML." /> 396 tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML." />
397 <check_box label="Masquer l&apos;URL de la musique" name="hide_music_url" 397 <check_box label="Masquer l&apos;URL de la musique" name="hide_music_url"
398 tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL de la musique." /> 398 tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL de la musique." />
399 <text name="media_size" 399 <text name="media_size"
400 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."> 400 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut.">
401 Taille du média : 401 Taille du média :
402 </text> 402 </text>
403 <spinner name="media_size_width" 403 <spinner name="media_size_width"
404 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." /> 404 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." />
405 <spinner name="media_size_height" 405 <spinner name="media_size_height"
406 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." /> 406 tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." />
407 <text name="pixels"> 407 <text name="pixels">
408 pixels 408 pixels
409 </text> 409 </text>
410 <text name="MusicURL:"> 410 <text name="MusicURL:">
411 URL de la musique : 411 URL de la musique :
412 </text> 412 </text>
413 <text name="Sound:"> 413 <text name="Sound:">
414 Son : 414 Son :
415 </text> 415 </text>
416 <check_box label="Limiter le son spatial à cette parcelle" name="check sound local" /> 416 <check_box label="Limiter le son spatial à cette parcelle" name="check sound local" />
417 <text type="string" length="1" name="Music URL:"> 417 <text type="string" length="1" name="Music URL:">
418 URL du flux : 418 URL du flux :
419 </text> 419 </text>
420 <text type="string" length="1" name="Media texture:"> 420 <text type="string" length="1" name="Media texture:">
421 Remplacer 421 Remplacer
422la texture : 422la texture :
423 </text> 423 </text>
424 <text type="string" length="1" name="Replace this texture:"> 424 <text type="string" length="1" name="Replace this texture:">
425 Remplacer cette texture : 425 Remplacer cette texture :
426 </text> 426 </text>
427 <texture_picker label="" name="media texture" tool_tip="Cliquez pour sélectionner une image" /> 427 <texture_picker label="" name="media texture" tool_tip="Cliquez pour sélectionner une image" />
428 <text type="string" length="1" name="with content from this URL:"> 428 <text type="string" length="1" name="with content from this URL:">
429 par du contenu situé à l&apos;URL suivante : 429 par du contenu situé à l&apos;URL suivante :
430 </text> 430 </text>
431 <check_box label="Échelle automatique" name="media_auto_scale" 431 <check_box label="Échelle automatique" name="media_auto_scale"
432 tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement." /> 432 tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement." />
433 <text name="Voice settings:"> 433 <text name="Voice settings:">
434 Voix : 434 Voix :
435 </text> 435 </text>
436 <radio_group name="parcel_voice_channel"> 436 <radio_group name="parcel_voice_channel">
437 <radio_item name="Estate"> 437 <radio_item name="Estate">
438 Utiliser le canal spatial du domaine 438 Utiliser le canal spatial du domaine
439 </radio_item> 439 </radio_item>
440 <radio_item name="Private"> 440 <radio_item name="Private">
441 Utiliser un canal spatial privé 441 Utiliser un canal spatial privé
442 </radio_item> 442 </radio_item>
443 <radio_item name="Disabled"> 443 <radio_item name="Disabled">
444 Désactiver les canaux spatiaux audios sur cette parcelle 444 Désactiver les canaux spatiaux audios sur cette parcelle
445 </radio_item> 445 </radio_item>
446 </radio_group> 446 </radio_group>
447 </panel> 447 </panel>
448 <panel label="Accès" name="land_access_panel"> 448 <panel label="Accès" name="land_access_panel">
449 <text type="string" length="1" name="Limit access to this parcel to:"> 449 <text type="string" length="1" name="Limit access to this parcel to:">
450 Accès à cette parcelle 450 Accès à cette parcelle
451 </text> 451 </text>
452 <check_box label="Autoriser l&apos;accès public" name="public_access" /> 452 <check_box label="Autoriser l&apos;accès public" name="public_access" />
453 <text name="Only Allow"> 453 <text name="Only Allow">
454 Bloquer l&apos;accès : 454 Bloquer l&apos;accès :
455 </text> 455 </text>
456 <check_box 456 <check_box
457 label="Aux résidents qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab" 457 label="Aux résidents qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab"
458 name="limit_payment" tool_tip="Aux résidents non identifés" /> 458 name="limit_payment" tool_tip="Aux résidents non identifés" />
459 <check_box label="Aux résidents dont l&apos;âge n&apos;a pas été vérifié" 459 <check_box label="Aux résidents dont l&apos;âge n&apos;a pas été vérifié"
460 name="limit_age_verified" 460 name="limit_age_verified"
461 tool_tip="Aux résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com." /> 461 tool_tip="Aux résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com." />
462 <string name="estate_override"> 462 <string name="estate_override">
463 Au moins une de ces options est définie au niveau du domaine. 463 Au moins une de ces options est définie au niveau du domaine.
464 </string> 464 </string>
465 <check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" 465 <check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck"
466 tool_tip="Définir le groupe à l&apos;onglet Général." /> 466 tool_tip="Définir le groupe à l&apos;onglet Général." />
467 <check_box label="Avatars : (0 dans la liste, 300 max)" name="AccessCheck" /> 467 <check_box label="Avatars : (0 dans la liste, 300 max)" name="AccessCheck" />
468 <button label="Ajouter..." label_selected="Ajouter..." name="Add..." /> 468 <button label="Ajouter..." label_selected="Ajouter..." name="Add..." />
469 <button label="Retirer" label_selected="Retirer" name="Remove" /> 469 <button label="Retirer" label_selected="Retirer" name="Remove" />
470 <check_box label="Vendre des passes à :" name="PassCheck" 470 <check_box label="Vendre des passes à :" name="PassCheck"
471 tool_tip="Autoriser un accès temporaire à cette parcelle" /> 471 tool_tip="Autoriser un accès temporaire à cette parcelle" />
472 <combo_box name="pass_combo"> 472 <combo_box name="pass_combo">
473 <combo_item name="Anyone"> 473 <combo_item name="Anyone">
474 N&apos;importe qui 474 N&apos;importe qui
475 </combo_item> 475 </combo_item>
476 <combo_item name="Group"> 476 <combo_item name="Group">
477 Groupe 477 Groupe
478 </combo_item> 478 </combo_item>
479 </combo_box> 479 </combo_box>
480 <spinner label="Prix en $L :" name="PriceSpin" /> 480 <spinner label="Prix en $L :" name="PriceSpin" />
481 <spinner label="Heures d&apos;accès :" name="HoursSpin" /> 481 <spinner label="Heures d&apos;accès :" name="HoursSpin" />
482 <text label="Toujours autoriser" name="AllowedText"> 482 <text label="Toujours autoriser" name="AllowedText">
483 Résidents autorisés 483 Résidents autorisés
484 </text> 484 </text>
485 <name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)" /> 485 <name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)" />
486 <button label="Ajouter..." label_selected="Ajouter..." name="add_allowed" /> 486 <button label="Ajouter..." label_selected="Ajouter..." name="add_allowed" />
487 <button label="Supprimer" label_selected="Supprimer" name="remove_allowed" /> 487 <button label="Supprimer" label_selected="Supprimer" name="remove_allowed" />
488 <text label="Interdire" name="BanCheck"> 488 <text label="Interdire" name="BanCheck">
489 Résidents interdits 489 Résidents interdits
490 </text> 490 </text>
491 <name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)" /> 491 <name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)" />
492 <button label="Ajouter..." label_selected="Ajouter..." name="add_banned" /> 492 <button label="Ajouter..." label_selected="Ajouter..." name="add_banned" />
493 <button label="Supprimer" label_selected="Supprimer" name="remove_banned" /> 493 <button label="Supprimer" label_selected="Supprimer" name="remove_banned" />
494 </panel> 494 </panel>
495 <panel label="Bannir" name="land_ban_panel"> 495 <panel label="Bannir" name="land_ban_panel">
496 <check_box label="Bannir les avatars suivants : (0 dans la liste, 300 max)" 496 <check_box label="Bannir les avatars suivants : (0 dans la liste, 300 max)"
497 name="LandBanCheck" /> 497 name="LandBanCheck" />
498 <button label="Ajouter..." label_selected="Ajouter..." name="Add..." /> 498 <button label="Ajouter..." label_selected="Ajouter..." name="Add..." />
499 <button label="Retirer" label_selected="Retirer" name="Remove" /> 499 <button label="Retirer" label_selected="Retirer" name="Remove" />
500 <text type="string" length="1" name="Deny by Payment Status:"> 500 <text type="string" length="1" name="Deny by Payment Status:">
501 Refuser selon les infos de paiement : 501 Refuser selon les infos de paiement :
502 </text> 502 </text>
503 <check_box label="Refuser sans infos de paiement enregistrées" name="DenyAnonymousCheck" /> 503 <check_box label="Refuser sans infos de paiement enregistrées" name="DenyAnonymousCheck" />
504 <check_box label="Refuser avec infos de paiement enregistrées" name="DenyIdentifiedCheck" /> 504 <check_box label="Refuser avec infos de paiement enregistrées" name="DenyIdentifiedCheck" />
505 <check_box label="Refuser avec infos de paiement utilisées" name="DenyTransactedCheck" /> 505 <check_box label="Refuser avec infos de paiement utilisées" name="DenyTransactedCheck" />
506 </panel> 506 </panel>
507 </tab_container> 507 </tab_container>
508</floater> 508</floater>
diff --git a/linden/indra/newview/skins/silver/colors_base.xml b/linden/indra/newview/skins/silver/colors_base.xml
index 623b800..b6e77be 100644
--- a/linden/indra/newview/skins/silver/colors_base.xml
+++ b/linden/indra/newview/skins/silver/colors_base.xml
@@ -100,9 +100,9 @@
100<PieMenuSelectedColor value="185, 200, 220, 120" /> <!-- Color of pie menu slice when selected --> 100<PieMenuSelectedColor value="185, 200, 220, 120" /> <!-- Color of pie menu slice when selected -->
101 101
102<!-- MENU BAR --> 102<!-- MENU BAR -->
103<ParcelTextColor value="40, 40, 90, 255" /> <!-- Parcel name on menu bar, normal state --> 103<ParcelTextColor value="40, 40, 90, 255" /> <!-- Parcel name on menu bar, normal state -->
104<ParcelHoverColor value="70, 70, 100, 255" /> <!-- Parcel name on menu bar, hover state --> 104<ParcelHoverColor value="70, 70, 100, 255" /> <!-- Parcel name on menu bar, hover state -->
105<TimeTextColor value="0, 30, 60, 255" /> <!-- SL Time on menu bar --> 105<TimeTextColor value="0, 30, 60, 255" /> <!-- SL Time on menu bar -->
106<BalanceTextColor value="0, 100, 40, 255" /> <!-- Linden dollar balance on menu bar --> 106<BalanceTextColor value="0, 100, 40, 255" /> <!-- Linden dollar balance on menu bar -->
107<HealthTextColor value="110, 15, 15, 255" /> <!-- Damage meter text on menu bar --> 107<HealthTextColor value="110, 15, 15, 255" /> <!-- Damage meter text on menu bar -->
108 108
@@ -175,14 +175,6 @@
175<FilterTextColor value="255, 200, 70, 255" /> <!-- Inventory search text --> 175<FilterTextColor value="255, 200, 70, 255" /> <!-- Inventory search text -->
176<InventorySearchStatusColor value="0, 0, 0, 255" /> <!-- "Searching..." --> 176<InventorySearchStatusColor value="0, 0, 0, 255" /> <!-- "Searching..." -->
177 177
178<!-- HELP WINDOW -->
179<HelpBgColor value="200, 209, 204, 255" />
180<HelpFgColor value="0, 0, 0, 255" />
181<HelpScrollTrackColor value="0, 0, 0, 255" />
182<HelpScrollThumbColor value="255, 255, 255, 255" />
183<HelpScrollHighlightColor value="115, 132, 155, 255" />
184<HelpScrollShadowColor value="0, 0, 0, 255" />
185
186<!-- MISC --> 178<!-- MISC -->
187<AvatarNameColor value="251, 175, 93, 255" /> <!-- Text color of avatar nametags --> 179<AvatarNameColor value="251, 175, 93, 255" /> <!-- Text color of avatar nametags -->
188<FocusColor value="239, 156, 0, 255" /> <!-- Color of the glow around UI controls with keyboard focus --> 180<FocusColor value="239, 156, 0, 255" /> <!-- Color of the glow around UI controls with keyboard focus -->
@@ -192,5 +184,5 @@
192<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu --> 184<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu -->
193<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window --> 185<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window -->
194<ConsoleBackground value="0, 0, 0, 255" /> <!-- Background for inworld chat --> 186<ConsoleBackground value="0, 0, 0, 255" /> <!-- Background for inworld chat -->
195 187
196</settings> 188</settings>
diff --git a/linden/install.xml b/linden/install.xml
index 4d2b5d0..fd8f6ff 100644
--- a/linden/install.xml
+++ b/linden/install.xml
@@ -390,13 +390,6 @@
390 <key>url</key> 390 <key>url</key>
391 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri> 391 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri>
392 </map> 392 </map>
393 <key>windows</key>
394 <map>
395 <key>md5sum</key>
396 <string>3d5e29d444dde4815b36082eedfc775a</string>
397 <key>url</key>
398 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-windows-20080817.tar.bz2</uri>
399 </map>
400 </map> 393 </map>
401 </map> 394 </map>
402 <key>google</key> 395 <key>google</key>