diff options
Diffstat (limited to 'linden')
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 | |||
209 | McCabe Maxsted | 209 | McCabe Maxsted |
210 | VWR-1318 | 210 | VWR-1318 |
211 | VWR-7893 | 211 | VWR-7893 |
212 | VWR-8689 | ||
212 | Michelle2 Zenovka | 213 | Michelle2 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 | |||
33 | import types | 33 | import types |
34 | import re | 34 | import re |
35 | 35 | ||
36 | from indra.util.fastest_elementtree import fromstring | 36 | from indra.util.fastest_elementtree import ElementTreeError, fromstring |
37 | from indra.base import lluuid | 37 | from indra.base import lluuid |
38 | 38 | ||
39 | int_regex = re.compile("[-+]?\d+") | 39 | try: |
40 | real_regex = re.compile("[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?") | 40 | import cllsd |
41 | alpha_regex = re.compile("[a-zA-Z]+") | 41 | except ImportError: |
42 | date_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 | |||
44 | int_regex = re.compile(r"[-+]?\d+") | ||
45 | real_regex = re.compile(r"[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?") | ||
46 | alpha_regex = re.compile(r"[a-zA-Z]+") | ||
47 | date_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 | ||
45 | class LLSDParseError(Exception): | 52 | class LLSDParseError(Exception): |
46 | pass | 53 | pass |
47 | 54 | ||
48 | class LLSDSerializationError(Exception): | 55 | class 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 | ||
118 | def str_to_python(node): | 125 | def str_to_python(node): |
119 | return unicode(node.text or '').encode('utf8', 'replace') | 126 | return node.text or '' |
120 | 127 | ||
121 | def bin_to_python(node): | 128 | def 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('&', '&').replace('<', '<').replace('>', '>') | 206 | return v.replace('&', '&').replace('<', '<').replace('>', '>') |
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 |
244 | def format_xml(something): | 260 | def 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 | ||
842 | def _format_binary_recurse(something): | 872 | def _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 | |||
929 | def 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 | |||
935 | def parse_xml(something): | ||
936 | try: | ||
937 | return to_python(fromstring(something)[0]) | ||
938 | except ElementTreeError, err: | ||
939 | raise LLSDParseError(*err.args) | ||
885 | 940 | ||
941 | def parse_notation(something): | ||
942 | return LLSDNotationParser().parse(something) | ||
886 | 943 | ||
887 | def parse(something): | 944 | def 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 | ||
7 | Copyright (c) 2006-2008, Linden Research, Inc. | 7 | Copyright (c) 2008, Linden Research, Inc. |
8 | 8 | ||
9 | Permission is hereby granted, free of charge, to any person obtaining a copy | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy |
10 | of this software and associated documentation files (the "Software"), to deal | 10 | of 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 | 40 | use_celementree = True |
33 | use_celementree = False | ||
34 | 41 | ||
35 | try: | 42 | try: |
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 | ||
39 | except ImportError: | 48 | except 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; | |||
251 | const LLUUID LL_UUID_ALL_AGENTS("44e87126-e794-4ded-05b3-7c42da3d5cdb"); | 251 | const LLUUID LL_UUID_ALL_AGENTS("44e87126-e794-4ded-05b3-7c42da3d5cdb"); |
252 | 252 | ||
253 | // Governor Linden's agent id. | 253 | // Governor Linden's agent id. |
254 | const LLUUID ALEXANDRIA_LINDEN_ID("ba2a564a-f0f1-4b82-9c61-b7520bfcd09f"); | ||
254 | const LLUUID GOVERNOR_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1"); | 255 | const LLUUID GOVERNOR_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1"); |
255 | const LLUUID REALESTATE_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1"); | 256 | const 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"; | |||
45 | const S32 IMP_VERSION_MAJOR = 1; | 45 | const S32 IMP_VERSION_MAJOR = 1; |
46 | const S32 IMP_VERSION_MINOR = 1; | 46 | const S32 IMP_VERSION_MINOR = 1; |
47 | const S32 IMP_VERSION_PATCH = 0; | 47 | const S32 IMP_VERSION_PATCH = 0; |
48 | const char * const IMP_VERSION_TEST = "alpha"; | 48 | const 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"); | |||
60 | static const std::string INV_FLAGS_LABEL("flags"); | 60 | static const std::string INV_FLAGS_LABEL("flags"); |
61 | static const std::string INV_CREATION_DATE_LABEL("created_at"); | 61 | static const std::string INV_CREATION_DATE_LABEL("created_at"); |
62 | 62 | ||
63 | // key used by agent-inventory-service | ||
64 | static const std::string INV_ASSET_TYPE_LABEL_WS("type_default"); | ||
65 | static 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 | ||
12 | set(llmath_SOURCE_FILES | 12 | set(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 | ||
22 | const char* LLCalc::X_POS = "XP"; | ||
23 | const char* LLCalc::Y_POS = "YP"; | ||
24 | const char* LLCalc::Z_POS = "ZP"; | ||
25 | const char* LLCalc::X_SCALE = "XS"; | ||
26 | const char* LLCalc::Y_SCALE = "YS"; | ||
27 | const char* LLCalc::Z_SCALE = "ZS"; | ||
28 | const char* LLCalc::X_ROT = "XR"; | ||
29 | const char* LLCalc::Y_ROT = "YR"; | ||
30 | const char* LLCalc::Z_ROT = "ZR"; | ||
31 | const char* LLCalc::HOLLOW = "HLW"; | ||
32 | const char* LLCalc::CUT_BEGIN = "CB"; | ||
33 | const char* LLCalc::CUT_END = "CE"; | ||
34 | const char* LLCalc::PATH_BEGIN = "PB"; | ||
35 | const char* LLCalc::PATH_END = "PE"; | ||
36 | const char* LLCalc::TWIST_BEGIN = "TB"; | ||
37 | const char* LLCalc::TWIST_END = "TE"; | ||
38 | const char* LLCalc::X_SHEAR = "XSH"; | ||
39 | const char* LLCalc::Y_SHEAR = "YSH"; | ||
40 | const char* LLCalc::X_TAPER = "XTP"; | ||
41 | const char* LLCalc::Y_TAPER = "YTP"; | ||
42 | const char* LLCalc::RADIUS_OFFSET = "ROF"; | ||
43 | const char* LLCalc::REVOLUTIONS = "REV"; | ||
44 | const char* LLCalc::SKEW = "SKW"; | ||
45 | const char* LLCalc::X_HOLE = "XHL"; | ||
46 | const char* LLCalc::Y_HOLE = "YHL"; | ||
47 | const char* LLCalc::TEX_U_SCALE = "TSU"; | ||
48 | const char* LLCalc::TEX_V_SCALE = "TSV"; | ||
49 | const char* LLCalc::TEX_U_OFFSET = "TOU"; | ||
50 | const char* LLCalc::TEX_V_OFFSET = "TOV"; | ||
51 | const char* LLCalc::TEX_ROTATION = "TROT"; | ||
52 | const char* LLCalc::TEX_TRANSPARENCY = "TRNS"; | ||
53 | const char* LLCalc::TEX_GLOW = "GLOW"; | ||
54 | |||
55 | |||
56 | LLCalc* LLCalc::sInstance = NULL; | ||
57 | |||
58 | LLCalc::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 | |||
74 | LLCalc::~LLCalc() | ||
75 | { | ||
76 | delete mConstants; | ||
77 | delete mVariables; | ||
78 | // delete mUserVariables; | ||
79 | } | ||
80 | |||
81 | //static | ||
82 | void LLCalc::cleanUp() | ||
83 | { | ||
84 | delete sInstance; | ||
85 | sInstance = NULL; | ||
86 | } | ||
87 | |||
88 | //static | ||
89 | LLCalc* LLCalc::getInstance() | ||
90 | { | ||
91 | if (!sInstance) sInstance = new LLCalc(); | ||
92 | return sInstance; | ||
93 | } | ||
94 | |||
95 | void LLCalc::setVar(const std::string& name, const F32& value) | ||
96 | { | ||
97 | (*mVariables)[name] = value; | ||
98 | } | ||
99 | |||
100 | void LLCalc::clearVar(const std::string& name) | ||
101 | { | ||
102 | mVariables->erase(name); | ||
103 | } | ||
104 | |||
105 | void LLCalc::clearAllVariables() | ||
106 | { | ||
107 | mVariables->clear(); | ||
108 | } | ||
109 | |||
110 | /* | ||
111 | void 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 | |||
121 | bool 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 | |||
18 | class LLCalc | ||
19 | { | ||
20 | public: | ||
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 | |||
71 | private: | ||
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 | |||
14 | F32 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 | |||
25 | struct 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 | |||
140 | private: | ||
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 | ||
272 | void 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 | |||
272 | static std::string events_2_string(apr_int16_t events) | 279 | static 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 | |||
1172 | void 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 | ||
2090 | BOOL 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 | |||
2085 | void LLLineEditor::onMouseCaptureLost() | 2116 | void 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 | ||
52 | const U32 MAX_STRING_LENGTH = 32; | 52 | const U32 MAX_STRING_LENGTH = 255; |
53 | 53 | ||
54 | static LLRegisterWidget<LLSpinCtrl> r2("spinner"); | 54 | static 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 | ||
1452 | void 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() | |||
743 | void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord) | 743 | void 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; | |||
73 | F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f; | 73 | F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f; |
74 | BOOL LLInventoryModel::sTimelyFetchPending = FALSE; | 74 | BOOL LLInventoryModel::sTimelyFetchPending = FALSE; |
75 | LLFrameTimer LLInventoryModel::sFetchTimer; | 75 | LLFrameTimer LLInventoryModel::sFetchTimer; |
76 | LLInventoryModel::cat_map_t LLInventoryModel::sBulkFetchMap; | ||
77 | S16 LLInventoryModel::sBulkFetchCount = 0; | 76 | S16 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); |
87 | const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; | 86 | const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; |
88 | const S32 MAX_FETCH_RETRIES = 5; | 87 | const S32 MAX_FETCH_RETRIES = 10; |
89 | const char CACHE_FORMAT_STRING[] = "%s.inv"; | 88 | const char CACHE_FORMAT_STRING[] = "%s.inv"; |
90 | const char* NEW_CATEGORY_NAME = "New Folder"; | 89 | const char* NEW_CATEGORY_NAME = "New Folder"; |
91 | const char* NEW_CATEGORY_NAMES[LLAssetType::AT_COUNT] = | 90 | const 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. |
993 | void LLInventoryModel::notifyObservers() | 992 | // The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328] |
993 | void 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 | ||
1052 | void 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 | ||
1117 | void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::string& reason) | ||
1118 | { | ||
1119 | llinfos << "fetchInventory::error " | ||
1120 | << status << ": " << reason << llendl; | ||
1121 | gInventory.notifyObservers("fetchinventory"); | ||
1122 | } | ||
1123 | |||
1041 | void LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) | 1124 | void 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. |
1068 | LLAlertDialog* LLInventoryModel::fetchDescendentsResponder::sRetryDialog=NULL; | ||
1069 | LLSD LLInventoryModel::fetchDescendentsResponder::sRetrySD; | ||
1070 | |||
1071 | bool LLInventoryModel::isBulkFetchProcessingComplete() | 1151 | bool 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 | ||
1157 | class 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 |
1079 | void LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content) | 1171 | void 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 |
1172 | void LLInventoryModel::fetchDescendentsResponder::error(U32 status, const std::string& reason) | 1300 | void 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 | |||
1209 | void 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 |
1482 | void LLInventoryModel::findLostItems() | ||
1483 | { | ||
1484 | sBackgroundFetchActive = TRUE; | ||
1485 | sFetchQueue.push_back(LLUUID::null); | ||
1486 | gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); | ||
1487 | } | ||
1488 | |||
1489 | //static | ||
1394 | void LLInventoryModel::stopBackgroundFetch() | 1490 | void 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 | ||
3465 | void 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 | |||
3376 | void LLInventoryFetchObserver::fetchItems( | 3526 | void 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 | ||
3636 | void LLInventoryExistenceObserver::watchItem(const LLUUID& id) | 3755 | void 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: | |||
477 | public: | 472 | public: |
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 | ||
768 | BOOL LLNetMap::handleDoubleClick( S32 x, S32 y, MASK mask ) | 772 | BOOL 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() | |||
381 | void LLPanelFace::getState() | 384 | void 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 | ||
999 | void 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 | ||
2102 | void 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 | ||
87 | protected: | 88 | protected: |
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(); | |||
303 | void label_sit_or_stand(std::string& label, void*); | 305 | void 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. |
306 | BOOL is_selection_buy_not_take(); | ||
307 | S32 selection_price(); | ||
308 | BOOL enable_take(); | 308 | BOOL enable_take(); |
309 | void handle_take(); | 309 | void handle_take(); |
310 | void confirm_take(S32 option, void* data); | 310 | void 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 | ||
3931 | class LLToolsBuyOrTake : public view_listener_t | 3913 | class 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 | ||
3962 | class LLToolsEnableBuyOrTake : public view_listener_t | 3929 | class 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' | ||
4012 | BOOL 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 | |||
4029 | S32 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 | |||
4048 | void callback_show_buy_currency(S32 option, void*) | 3939 | void 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) | |||
6259 | void menu_toggle_control( void* user_data ) | 6157 | void 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 | ||
9642 | class 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 | ||
9756 | static void addMenu(view_listener_t *menu, const char *name) | 9657 | static 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 'ZP + 20' in the Z-axis position field | ||
424 | to move an object up 20 meters. | ||
425 | * Enter 'XS - YS' 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 'TSU * 4' in horizantal repeats field | ||
449 | to increase the amount of repeats by 4x. | ||
450 | * Enter 'TSV' 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 >" name="More >"> | ||
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 >" name="More >"> | 27 | <pie_menu label="More >" name="More >"> |
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 >" name="Object Attach HUD" /> | 40 | <pie_menu label="Attach HUD >" name="Object Attach HUD" /> |
41 | <pie_menu label="Attach >" name="Object Attach" /> | 41 | <pie_menu label="Attach >" 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 >" name="Rate Menu"> | 46 | <pie_menu label="More >" 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 >" name="Take Off >"> | 22 | <pie_menu enabled="true" label="Take Off >" name="Take Off >"> |
23 | <pie_menu enabled="true" label="Clothes >" name="Clothes >"> | 23 | <pie_menu enabled="true" label="Clothes >" name="Clothes >"> |
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 >" name="More >"> | 54 | <pie_menu enabled="true" label="More >" name="More >"> |
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 >" name="Object Detach HUD" /> | 79 | <pie_menu enabled="true" label="HUD >" name="Object Detach HUD" /> |
80 | <menu_item_separator /> | 80 | <menu_item_separator /> |
81 | <pie_menu enabled="true" label="Detach >" name="Object Detach" /> | 81 | <pie_menu enabled="true" label="Detach >" 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'ajouter au patrimoine du groupe." /> | 23 | tool_tip="Un officier peut transférer ce terrain au groupe. Il viendra alors s'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'officier dans le groupe sélectionné." /> | 25 | tool_tip="Vous ne pouvez transférer le terrain que si vous avez un rôle d'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'entretenir." /> | 27 | tool_tip="Lorsque le terrain est transféré au groupe, la contribution du précédent propriétaire suffit à l'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'un titre de propriété est transféré au groupe, l'ancien propriétaire fait également un don de terrain suffisant." /> | 29 | tool_tip="Lorsqu'un titre de propriété est transféré au groupe, l'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'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'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'enchère : [ID] | 96 | Code de l'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. |
121 | Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails. | 121 | Allez dans le menu Monde > À 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'y a aucun règlement pour ce domaine. | 153 | Il n'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'autres : | 218 | Appartenant à d'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'un est assis : | 227 | Sélectionnés/où quelqu'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&apos;s objects (minutes, 0 for off):"> | 232 | <text type="string" length="1" name="Autoreturn other resident&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'autres résidents (minutes, 0 pour désactiver) : | 236 | Renvoi automatique des objets d'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&Culture"> | 295 | <combo_item name="Arts&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&Nature"> | 313 | <combo_item name="Parks&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'atterrissage : (aucun) | 336 | Point d'atterrissage : (aucun) |
337 | </text> | 337 | </text> |
338 | <text name="landing_point"> | 338 | <text name="landing_point"> |
339 | Lieu d'arrivée : [LANDING] | 339 | Lieu d'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'arrivée de l'avatar sur votre position actuelle. ll doit se trouver sur cette parcelle de terrain." /> | 345 | tool_tip="Définir le lieu d'arrivée de l'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'arrivée." /> | 347 | tool_tip="Dégager le lieu d'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'arrivée défini | 357 | Lieu d'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'arrivée indéfini | 360 | Lieu d'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'il s'agit de l'URL d'un film, d'une page web ou autre" /> | 375 | tool_tip="Indiquez s'il s'agit de l'URL d'un film, d'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 |
387 | la page web quand vous cliquez sur la flèche Jouer). | 387 | la 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 |
391 | média : | 391 | mé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'URL du média" name="hide_media_url" | 395 | <check_box label="Masquer l'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'URL du média. Cette option n'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'URL du média. Cette option n'est pas disponible pour les fichiers HTML." /> |
397 | <check_box label="Masquer l'URL de la musique" name="hide_music_url" | 397 | <check_box label="Masquer l'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'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'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 |
422 | la texture : | 422 | la 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'URL suivante : | 429 | par du contenu situé à l'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'échelle. La qualité visuelle sera peut-être amoindrie mais vous n'aurez à faire aucune autre mise à l'échelle ou alignement." /> | 432 | tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l'échelle. La qualité visuelle sera peut-être amoindrie mais vous n'aurez à faire aucune autre mise à l'é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'accès public" name="public_access" /> | 452 | <check_box label="Autoriser l'accès public" name="public_access" /> |
453 | <text name="Only Allow"> | 453 | <text name="Only Allow"> |
454 | Bloquer l'accès : | 454 | Bloquer l'accès : |
455 | </text> | 455 | </text> |
456 | <check_box | 456 | <check_box |
457 | label="Aux résidents qui n'ont pas fourni leurs informations de paiement à Linden Lab" | 457 | label="Aux résidents qui n'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'âge n'a pas été vérifié" | 459 | <check_box label="Aux résidents dont l'âge n'a pas été vérifié" |
460 | name="limit_age_verified" | 460 | name="limit_age_verified" |
461 | tool_tip="Aux résidents dont l'âge n'a pas été vérifié. Pour plus d'infos, consultez la page support.secondlife.com." /> | 461 | tool_tip="Aux résidents dont l'âge n'a pas été vérifié. Pour plus d'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'accès au groupe : [GROUP]" name="GroupCheck" | 465 | <check_box label="Autoriser l'accès au groupe : [GROUP]" name="GroupCheck" |
466 | tool_tip="Définir le groupe à l'onglet Général." /> | 466 | tool_tip="Définir le groupe à l'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'importe qui | 474 | N'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'accès :" name="HoursSpin" /> | 481 | <spinner label="Heures d'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> |