aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/doc/contributions.txt1
-rw-r--r--linden/indra/cmake/Python.cmake4
-rwxr-xr-xlinden/indra/develop.py48
-rw-r--r--linden/indra/llaudio/audioengine.h2
-rw-r--r--linden/indra/llcommon/CMakeLists.txt2
-rw-r--r--linden/indra/llcommon/llchat.h6
-rw-r--r--linden/indra/llcommon/llcursortypes.cpp89
-rw-r--r--linden/indra/llcommon/llcursortypes.h81
-rw-r--r--linden/indra/llmath/xform.h2
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp39
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.h1
-rw-r--r--linden/indra/llmedia/llmediaobserver.h1
-rw-r--r--linden/indra/llui/llpanel.cpp4
-rw-r--r--linden/indra/llui/llpanel.h2
-rw-r--r--linden/indra/llui/lltextbox.cpp7
-rw-r--r--linden/indra/llui/lltextbox.h3
-rw-r--r--linden/indra/llui/lltexteditor.cpp16
-rw-r--r--linden/indra/llui/lltexteditor.h8
-rw-r--r--linden/indra/llui/llview.cpp20
-rw-r--r--linden/indra/llui/llview.h5
-rw-r--r--linden/indra/llwindow/llwindow.h43
-rw-r--r--linden/indra/newview/CMakeLists.txt8
-rw-r--r--linden/indra/newview/app_settings/settings.xml113
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml141
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml141
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml141
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml141
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml141
-rw-r--r--linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml141
-rw-r--r--linden/indra/newview/llchatbar.cpp2
-rw-r--r--linden/indra/newview/llfilepicker.cpp6
-rw-r--r--linden/indra/newview/llfirstuse.cpp11
-rw-r--r--linden/indra/newview/llfirstuse.h1
-rw-r--r--linden/indra/newview/llfloaterabout.cpp4
-rw-r--r--linden/indra/newview/llfloaterchat.cpp17
-rw-r--r--linden/indra/newview/llfloaterchatterbox.h9
-rw-r--r--linden/indra/newview/llfloatermap.cpp638
-rw-r--r--linden/indra/newview/llfloatermap.h45
-rw-r--r--linden/indra/newview/llfloaterobjectiminfo.cpp204
-rw-r--r--linden/indra/newview/llfloaterobjectiminfo.h45
-rw-r--r--linden/indra/newview/llfloatertools.cpp3
-rw-r--r--linden/indra/newview/llfloaterwindlight.cpp53
-rw-r--r--linden/indra/newview/llfloaterwindlight.h3
-rw-r--r--linden/indra/newview/llfolderview.cpp45
-rw-r--r--linden/indra/newview/llfolderview.h5
-rw-r--r--linden/indra/newview/llgroupnotify.cpp4
-rw-r--r--linden/indra/newview/llimpanel.cpp4
-rw-r--r--linden/indra/newview/llinventoryactions.cpp45
-rw-r--r--linden/indra/newview/llinventorybridge.cpp192
-rw-r--r--linden/indra/newview/llinventorymodel.cpp2
-rw-r--r--linden/indra/newview/llinventoryview.cpp9
-rw-r--r--linden/indra/newview/llmanipscale.cpp26
-rw-r--r--linden/indra/newview/llmanipscale.h3
-rw-r--r--linden/indra/newview/llnetmap.cpp99
-rw-r--r--linden/indra/newview/llnetmap.h21
-rw-r--r--linden/indra/newview/lloverlaybar.cpp62
-rw-r--r--linden/indra/newview/lloverlaybar.h8
-rw-r--r--linden/indra/newview/llpanelavatar.cpp95
-rw-r--r--linden/indra/newview/llpanelavatar.h1
-rw-r--r--linden/indra/newview/llpaneldisplay.cpp7
-rw-r--r--linden/indra/newview/llpaneldisplay.h2
-rw-r--r--linden/indra/newview/llpanelgeneral.cpp2
-rw-r--r--linden/indra/newview/llpanelobject.cpp4
-rw-r--r--linden/indra/newview/llselectmgr.cpp5
-rw-r--r--linden/indra/newview/llspatialpartition.cpp2
-rw-r--r--linden/indra/newview/llstartup.cpp1
-rw-r--r--linden/indra/newview/llstylemap.cpp37
-rw-r--r--linden/indra/newview/llstylemap.h3
-rw-r--r--linden/indra/newview/lltexturectrl.cpp7
-rw-r--r--linden/indra/newview/lltoolpie.cpp9
-rw-r--r--linden/indra/newview/llviewermenu.cpp8
-rw-r--r--linden/indra/newview/llviewermessage.cpp73
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp4
-rw-r--r--linden/indra/newview/llviewerthrottle.cpp2
-rw-r--r--linden/indra/newview/llvlcomposition.cpp9
-rw-r--r--linden/indra/newview/llvoavatar.cpp4
-rw-r--r--linden/indra/newview/llwindlightremotectrl.cpp267
-rw-r--r--linden/indra/newview/llwindlightremotectrl.h60
-rw-r--r--linden/indra/newview/llwlparammanager.cpp40
-rw-r--r--linden/indra/newview/llwlparammanager.h17
-rw-r--r--linden/indra/newview/llworldmapview.cpp69
-rw-r--r--linden/indra/newview/llworldmapview.h6
-rw-r--r--linden/indra/newview/skins/default/colors_base.xml5
-rw-r--r--linden/indra/newview/skins/default/textures/arrow_left.tgabin0 -> 510 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/arrow_right.tgabin0 -> 510 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/map_avatar_32.tgabin0 -> 2894 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/map_avatar_above_32.tgabin0 -> 2909 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/map_avatar_below_32.tgabin0 -> 3037 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/map_avatar_you_32.tgabin0 -> 3395 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/textures.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml18
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml97
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml54
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_profile.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml24
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notify.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml568
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml17
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml14
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml22
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml34
-rw-r--r--linden/indra/newview/skins/silver/colors_base.xml2
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_left.tgabin0 -> 424 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_right.tgabin0 -> 424 bytes
-rw-r--r--linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml430
114 files changed, 3964 insertions, 1020 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index a1c8624..2acb043 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -21,6 +21,7 @@ Aimee Trescothick
21 VWR-8341 21 VWR-8341
22 VWR-8430 22 VWR-8430
23 VWR-9255 23 VWR-9255
24 VWR-12748
24Alejandro Rosenthal 25Alejandro Rosenthal
25 VWR-1184 26 VWR-1184
26Alissa Sabre 27Alissa Sabre
diff --git a/linden/indra/cmake/Python.cmake b/linden/indra/cmake/Python.cmake
index 4f86d32..0901c1b 100644
--- a/linden/indra/cmake/Python.cmake
+++ b/linden/indra/cmake/Python.cmake
@@ -13,6 +13,10 @@ if (WINDOWS)
13 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] 13 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath]
14 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] 14 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath]
15 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] 15 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath]
16 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath]
17 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath]
18 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath]
19 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath]
16 ) 20 )
17elseif (EXISTS /etc/debian_version) 21elseif (EXISTS /etc/debian_version)
18 # On Debian and Ubuntu, avoid Python 2.4 if possible. 22 # On Debian and Ubuntu, avoid Python 2.4 if possible.
diff --git a/linden/indra/develop.py b/linden/indra/develop.py
index bd8f080..207a48b 100755
--- a/linden/indra/develop.py
+++ b/linden/indra/develop.py
@@ -469,8 +469,15 @@ class WindowsSetup(PlatformSetup):
469 print 'Building with ', self.gens[version]['gen'] 469 print 'Building with ', self.gens[version]['gen']
470 break 470 break
471 else: 471 else:
472 print >> sys.stderr, 'Cannot find a Visual Studio installation!' 472 print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
473 eys.exit(1) 473 for version in 'vc80 vc90 vc71'.split():
474 if self.find_visual_studio_express(version):
475 self._generator = version
476 print 'Building with ', self.gens[version]['gen'] , "Express edition"
477 break
478 else:
479 print >> sys.stderr, 'Cannot find any Visual Studio installation'
480 eys.exit(1)
474 return self._generator 481 return self._generator
475 482
476 def _set_generator(self, gen): 483 def _set_generator(self, gen):
@@ -523,6 +530,28 @@ class WindowsSetup(PlatformSetup):
523 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] 530 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
524 return '' 531 return ''
525 532
533 def find_visual_studio_express(self, gen=None):
534 if gen is None:
535 gen = self._generator
536 gen = gen.lower()
537 try:
538 import _winreg
539 key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s\Setup\VC' %
540 self.gens[gen]['ver'])
541 value_str = (r'ProductDir')
542 print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
543 (key_str, value_str))
544 print key_str
545
546 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
547 key = _winreg.OpenKey(reg, key_str)
548 value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
549 print 'Found: %s' % value
550 return value
551 except WindowsError, err:
552 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
553 return ''
554
526 def get_build_cmd(self): 555 def get_build_cmd(self):
527 if self.incredibuild: 556 if self.incredibuild:
528 config = self.build_type 557 config = self.build_type
@@ -530,10 +559,23 @@ class WindowsSetup(PlatformSetup):
530 config = '\"%s|Win32\"' % config 559 config = '\"%s|Win32\"' % config
531 560
532 return "buildconsole %s.sln /build %s" % (self.project_name, config) 561 return "buildconsole %s.sln /build %s" % (self.project_name, config)
562
563 environment = self.find_visual_studio()
564 if environment == '':
565 environment = self.find_visual_studio_express()
566 if environment == '':
567 print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
568 else:
569 print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand"
570 build_dirs=self.build_dirs();
571 print >> sys.stderr, "Solution can now be found in:", build_dirs[0]
572 print >> sys.stderr, "Set %s as startup project" % self.project_name
573 print >> sys.stderr, "Set build target is Release or RelWithDbgInfo"
574 exit(0)
533 575
534 # devenv.com is CLI friendly, devenv.exe... not so much. 576 # devenv.com is CLI friendly, devenv.exe... not so much.
535 return ('"%sdevenv.com" %s.sln /build %s' % 577 return ('"%sdevenv.com" %s.sln /build %s' %
536 (self.find_visual_studio(), self.project_name, self.build_type)) 578 (environment, self.project_name, self.build_type))
537 579
538 # this override of run exists because the PlatformSetup version 580 # this override of run exists because the PlatformSetup version
539 # uses Unix/Mac only calls. Freakin' os module! 581 # uses Unix/Mac only calls. Freakin' os module!
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h
index d289ba5..579f58f 100644
--- a/linden/indra/llaudio/audioengine.h
+++ b/linden/indra/llaudio/audioengine.h
@@ -182,6 +182,8 @@ public:
182 static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status); 182 static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status);
183 183
184 friend class LLPipeline; // For debugging 184 friend class LLPipeline; // For debugging
185
186 LLMediaBase * getStreamMedia() { return mInternetStreamMedia; }
185public: 187public:
186 F32 mMaxWindGain; // Hack. Public to set before fade in? 188 F32 mMaxWindGain; // Hack. Public to set before fade in?
187 189
diff --git a/linden/indra/llcommon/CMakeLists.txt b/linden/indra/llcommon/CMakeLists.txt
index 4001e1f..3f14be6 100644
--- a/linden/indra/llcommon/CMakeLists.txt
+++ b/linden/indra/llcommon/CMakeLists.txt
@@ -20,6 +20,7 @@ set(llcommon_SOURCE_FILES
20 llcommon.cpp 20 llcommon.cpp
21 llcrc.cpp 21 llcrc.cpp
22 llcriticaldamp.cpp 22 llcriticaldamp.cpp
23 llcursortypes.cpp
23 lldate.cpp 24 lldate.cpp
24 llerror.cpp 25 llerror.cpp
25 llerrorthread.cpp 26 llerrorthread.cpp
@@ -90,6 +91,7 @@ set(llcommon_HEADER_FILES
90 llcommon.h 91 llcommon.h
91 llcrc.h 92 llcrc.h
92 llcriticaldamp.h 93 llcriticaldamp.h
94 llcursortypes.h
93 lldarray.h 95 lldarray.h
94 lldarrayptr.h 96 lldarrayptr.h
95 lldate.h 97 lldate.h
diff --git a/linden/indra/llcommon/llchat.h b/linden/indra/llcommon/llchat.h
index aa4469c..6c75a25 100644
--- a/linden/indra/llcommon/llchat.h
+++ b/linden/indra/llcommon/llchat.h
@@ -81,9 +81,10 @@ public:
81 mAudible(CHAT_AUDIBLE_FULLY), 81 mAudible(CHAT_AUDIBLE_FULLY),
82 mMuted(FALSE), 82 mMuted(FALSE),
83 mTime(0.0), 83 mTime(0.0),
84 mPosAgent() 84 mPosAgent(),
85 mURL()
85 { } 86 { }
86 87
87 std::string mText; // UTF-8 line of text 88 std::string mText; // UTF-8 line of text
88 std::string mFromName; // agent or object name 89 std::string mFromName; // agent or object name
89 LLUUID mFromID; // agent id or object id 90 LLUUID mFromID; // agent id or object id
@@ -97,6 +98,7 @@ public:
97 BOOL mMuted; // pass muted chat to maintain list of chatters 98 BOOL mMuted; // pass muted chat to maintain list of chatters
98 F64 mTime; // viewer only, seconds from viewer start 99 F64 mTime; // viewer only, seconds from viewer start
99 LLVector3 mPosAgent; 100 LLVector3 mPosAgent;
101 std::string mURL;
100}; 102};
101 103
102#endif 104#endif
diff --git a/linden/indra/llcommon/llcursortypes.cpp b/linden/indra/llcommon/llcursortypes.cpp
new file mode 100644
index 0000000..858414b
--- /dev/null
+++ b/linden/indra/llcommon/llcursortypes.cpp
@@ -0,0 +1,89 @@
1/**
2 * @file llcursortypes.cpp
3 * @brief Cursor types and lookup of types from a string
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "llcursortypes.h"
33
34ECursorType getCursorFromString(const std::string& cursor_string)
35{
36 static std::map<std::string,U32> cursor_string_table;
37 if (cursor_string_table.empty())
38 {
39 cursor_string_table["UI_CURSOR_ARROW"] = UI_CURSOR_ARROW;
40 cursor_string_table["UI_CURSOR_WAIT"] = UI_CURSOR_WAIT;
41 cursor_string_table["UI_CURSOR_HAND"] = UI_CURSOR_HAND;
42 cursor_string_table["UI_CURSOR_IBEAM"] = UI_CURSOR_IBEAM;
43 cursor_string_table["UI_CURSOR_CROSS"] = UI_CURSOR_CROSS;
44 cursor_string_table["UI_CURSOR_SIZENWSE"] = UI_CURSOR_SIZENWSE;
45 cursor_string_table["UI_CURSOR_SIZENESW"] = UI_CURSOR_SIZENESW;
46 cursor_string_table["UI_CURSOR_SIZEWE"] = UI_CURSOR_SIZEWE;
47 cursor_string_table["UI_CURSOR_SIZENS"] = UI_CURSOR_SIZENS;
48 cursor_string_table["UI_CURSOR_NO"] = UI_CURSOR_NO;
49 cursor_string_table["UI_CURSOR_WORKING"] = UI_CURSOR_WORKING;
50 cursor_string_table["UI_CURSOR_TOOLGRAB"] = UI_CURSOR_TOOLGRAB;
51 cursor_string_table["UI_CURSOR_TOOLLAND"] = UI_CURSOR_TOOLLAND;
52 cursor_string_table["UI_CURSOR_TOOLFOCUS"] = UI_CURSOR_TOOLFOCUS;
53 cursor_string_table["UI_CURSOR_TOOLCREATE"] = UI_CURSOR_TOOLCREATE;
54 cursor_string_table["UI_CURSOR_ARROWDRAG"] = UI_CURSOR_ARROWDRAG;
55 cursor_string_table["UI_CURSOR_ARROWCOPY"] = UI_CURSOR_ARROWCOPY;
56 cursor_string_table["UI_CURSOR_ARROWDRAGMULTI"] = UI_CURSOR_ARROWDRAGMULTI;
57 cursor_string_table["UI_CURSOR_ARROWCOPYMULTI"] = UI_CURSOR_ARROWCOPYMULTI;
58 cursor_string_table["UI_CURSOR_NOLOCKED"] = UI_CURSOR_NOLOCKED;
59 cursor_string_table["UI_CURSOR_ARROWLOCKED"] = UI_CURSOR_ARROWLOCKED;
60 cursor_string_table["UI_CURSOR_GRABLOCKED"] = UI_CURSOR_GRABLOCKED;
61 cursor_string_table["UI_CURSOR_TOOLTRANSLATE"] = UI_CURSOR_TOOLTRANSLATE;
62 cursor_string_table["UI_CURSOR_TOOLROTATE"] = UI_CURSOR_TOOLROTATE;
63 cursor_string_table["UI_CURSOR_TOOLSCALE"] = UI_CURSOR_TOOLSCALE;
64 cursor_string_table["UI_CURSOR_TOOLCAMERA"] = UI_CURSOR_TOOLCAMERA;
65 cursor_string_table["UI_CURSOR_TOOLPAN"] = UI_CURSOR_TOOLPAN;
66 cursor_string_table["UI_CURSOR_TOOLZOOMIN"] = UI_CURSOR_TOOLZOOMIN;
67 cursor_string_table["UI_CURSOR_TOOLPICKOBJECT3"] = UI_CURSOR_TOOLPICKOBJECT3;
68 cursor_string_table["UI_CURSOR_TOOLSIT"] = UI_CURSOR_TOOLSIT;
69 cursor_string_table["UI_CURSOR_TOOLBUY"] = UI_CURSOR_TOOLBUY;
70 cursor_string_table["UI_CURSOR_TOOLPAY"] = UI_CURSOR_TOOLPAY;
71 cursor_string_table["UI_CURSOR_TOOLOPEN"] = UI_CURSOR_TOOLOPEN;
72 cursor_string_table["UI_CURSOR_TOOLPLAY"] = UI_CURSOR_TOOLPLAY;
73 cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE;
74 cursor_string_table["UI_CURSOR_TOOLMEDIAOPEN"] = UI_CURSOR_TOOLMEDIAOPEN;
75 cursor_string_table["UI_CURSOR_PIPETTE"] = UI_CURSOR_PIPETTE;
76 }
77
78 std::map<std::string,U32>::const_iterator iter = cursor_string_table.find(cursor_string);
79
80 if (iter != cursor_string_table.end())
81 {
82 return (ECursorType)iter->second;
83 }
84
85 return UI_CURSOR_ARROW;
86}
87
88
89
diff --git a/linden/indra/llcommon/llcursortypes.h b/linden/indra/llcommon/llcursortypes.h
new file mode 100644
index 0000000..9be064f
--- /dev/null
+++ b/linden/indra/llcommon/llcursortypes.h
@@ -0,0 +1,81 @@
1/**
2 * @file llcursortypes.h
3 * @brief Cursor types
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLCURSORTYPES_H
33#define LL_LLCURSORTYPES_H
34
35#include "linden_common.h"
36
37// If you add types here, add them in LLCursor::getCursorFromString
38enum ECursorType {
39 UI_CURSOR_ARROW,
40 UI_CURSOR_WAIT,
41 UI_CURSOR_HAND,
42 UI_CURSOR_IBEAM,
43 UI_CURSOR_CROSS,
44 UI_CURSOR_SIZENWSE,
45 UI_CURSOR_SIZENESW,
46 UI_CURSOR_SIZEWE,
47 UI_CURSOR_SIZENS,
48 UI_CURSOR_NO,
49 UI_CURSOR_WORKING,
50 UI_CURSOR_TOOLGRAB,
51 UI_CURSOR_TOOLLAND,
52 UI_CURSOR_TOOLFOCUS,
53 UI_CURSOR_TOOLCREATE,
54 UI_CURSOR_ARROWDRAG,
55 UI_CURSOR_ARROWCOPY, // drag with copy
56 UI_CURSOR_ARROWDRAGMULTI,
57 UI_CURSOR_ARROWCOPYMULTI, // drag with copy
58 UI_CURSOR_NOLOCKED,
59 UI_CURSOR_ARROWLOCKED,
60 UI_CURSOR_GRABLOCKED,
61 UI_CURSOR_TOOLTRANSLATE,
62 UI_CURSOR_TOOLROTATE,
63 UI_CURSOR_TOOLSCALE,
64 UI_CURSOR_TOOLCAMERA,
65 UI_CURSOR_TOOLPAN,
66 UI_CURSOR_TOOLZOOMIN,
67 UI_CURSOR_TOOLPICKOBJECT3,
68 UI_CURSOR_TOOLSIT,
69 UI_CURSOR_TOOLBUY,
70 UI_CURSOR_TOOLPAY,
71 UI_CURSOR_TOOLOPEN,
72 UI_CURSOR_TOOLPLAY,
73 UI_CURSOR_TOOLPAUSE,
74 UI_CURSOR_TOOLMEDIAOPEN,
75 UI_CURSOR_PIPETTE,
76 UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor)
77};
78
79ECursorType getCursorFromString(const std::string& cursor_string);
80
81#endif // LL_LLCURSORTYPES_H
diff --git a/linden/indra/llmath/xform.h b/linden/indra/llmath/xform.h
index 6f880cb..b41219c 100644
--- a/linden/indra/llmath/xform.h
+++ b/linden/indra/llmath/xform.h
@@ -37,7 +37,7 @@
37 37
38const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f 38const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f
39const F32 MIN_OBJECT_Z = -256.f; 39const F32 MIN_OBJECT_Z = -256.f;
40const F32 DEFAULT_MAX_PRIM_SCALE = 10.f; 40//const F32 DEFAULT_MAX_PRIM_SCALE = 10.f; set in llmanipscale.cpp now
41const F32 MIN_PRIM_SCALE = 0.01f; 41const F32 MIN_PRIM_SCALE = 0.01f;
42const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX 42const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX
43 43
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp
index d1bab29..a9e0004 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp
@@ -89,6 +89,7 @@ LLMediaImplGStreamer () :
89 mPump ( NULL ), 89 mPump ( NULL ),
90 mPlaybin ( NULL ), 90 mPlaybin ( NULL ),
91 mVideoSink ( NULL ), 91 mVideoSink ( NULL ),
92 mLastTitle ( "" ),
92 mState( GST_STATE_NULL ), 93 mState( GST_STATE_NULL ),
93 mPlayThread ( NULL ) 94 mPlayThread ( NULL )
94{ 95{
@@ -470,6 +471,8 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
470 case GST_STATE_PAUSED: 471 case GST_STATE_PAUSED:
471 break; 472 break;
472 case GST_STATE_PLAYING: 473 case GST_STATE_PLAYING:
474 //impl->mLastTitle = "";
475
473 LLMediaEvent event( impl, 100 ); 476 LLMediaEvent event( impl, 100 );
474 impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event ); 477 impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event );
475 // emit an event to say that a media source was loaded 478 // emit an event to say that a media source was loaded
@@ -521,18 +524,28 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
521 } 524 }
522 case GST_MESSAGE_TAG: 525 case GST_MESSAGE_TAG:
523 { 526 {
524 GstTagList *tag_list; 527 GstTagList *new_tags;
525 gchar *title; 528
526 gchar *artist; 529 gst_message_parse_tag( message, &new_tags );
527 gst_message_parse_tag(message, &tag_list); 530
528 gboolean hazTitle = gst_tag_list_get_string(tag_list, 531 gchar *title;
529 GST_TAG_TITLE, &title); 532
530 gboolean hazArtist = gst_tag_list_get_string(tag_list, 533 if ( gst_tag_list_get_string(new_tags, GST_TAG_TITLE, &title) )
531 GST_TAG_ARTIST, &artist); 534 {
532 if(hazTitle) 535 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL;
533 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL; 536 std::string newtitle(title);
534 if(hazArtist) 537 gst_tag_list_free(new_tags);
535 LL_INFOS("MediaInfo") << "Artist: " << artist << LL_ENDL; 538
539 if ( newtitle != impl->mLastTitle && newtitle != "" )
540 {
541 impl->mLastTitle = newtitle;
542 LLMediaEvent event( impl, impl->mLastTitle );
543 impl->getEventEmitter().update( &LLMediaObserver::onMediaTitleChange, event );
544 }
545
546 g_free(title);
547 }
548
536 break; 549 break;
537 } 550 }
538 case GST_MESSAGE_EOS: 551 case GST_MESSAGE_EOS:
@@ -551,10 +564,10 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
551 impl->addCommand(LLMediaBase::COMMAND_STOP); 564 impl->addCommand(LLMediaBase::COMMAND_STOP);
552 } 565 }
553 break; 566 break;
567 }
554 default: 568 default:
555 /* unhandled message */ 569 /* unhandled message */
556 break; 570 break;
557 }
558 } 571 }
559 /* we want to be notified again the next time there is a message 572 /* we want to be notified again the next time there is a message
560 * on the bus, so return true (false means we want to stop watching 573 * on the bus, so return true (false means we want to stop watching
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.h b/linden/indra/llmedia/llmediaimplgstreamer.h
index baefdaf..51a8c37 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.h
+++ b/linden/indra/llmedia/llmediaimplgstreamer.h
@@ -127,6 +127,7 @@ class LLMediaImplGStreamer:
127 GMainLoop *mPump; // event pump for this media 127 GMainLoop *mPump; // event pump for this media
128 GstElement *mPlaybin; 128 GstElement *mPlaybin;
129 GstSLVideo *mVideoSink; 129 GstSLVideo *mVideoSink;
130 std::string mLastTitle;
130 GstState mState; 131 GstState mState;
131 GstState getState() const { return mState; } 132 GstState getState() const { return mState; }
132 133
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index e6da4f6..97fed5f 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -102,6 +102,7 @@ class LLMediaObserver
102 virtual void onMediaSizeChange( const EventType& event_in ) { } 102 virtual void onMediaSizeChange( const EventType& event_in ) { }
103 virtual void onMediaContentsChange( const EventType& event_in ) { } 103 virtual void onMediaContentsChange( const EventType& event_in ) { }
104 virtual void onMediaStatusTextChange( const EventType& event_in ) { } 104 virtual void onMediaStatusTextChange( const EventType& event_in ) { }
105 virtual void onMediaTitleChange( const EventType &event_in ) { }
105 virtual void onNavigateBegin( const EventType& event_in ) { } 106 virtual void onNavigateBegin( const EventType& event_in ) { }
106 virtual void onNavigateComplete( const EventType& event_in ) { } 107 virtual void onNavigateComplete( const EventType& event_in ) { }
107 virtual void onUpdateProgress( const EventType& event_in ) { } 108 virtual void onUpdateProgress( const EventType& event_in ) { }
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index d37517f..05103dc 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -982,12 +982,12 @@ void LLPanel::childSetAction(const std::string& id, void(*function)(void*), void
982 } 982 }
983} 983}
984 984
985void LLPanel::childSetActionTextbox(const std::string& id, void(*function)(void*)) 985void LLPanel::childSetActionTextbox(const std::string& id, void(*function)(void*), void* value)
986{ 986{
987 LLTextBox* textbox = getChild<LLTextBox>(id); 987 LLTextBox* textbox = getChild<LLTextBox>(id);
988 if (textbox) 988 if (textbox)
989 { 989 {
990 textbox->setClickedCallback(function); 990 textbox->setClickedCallback(function, value);
991 } 991 }
992} 992}
993 993
diff --git a/linden/indra/llui/llpanel.h b/linden/indra/llui/llpanel.h
index 46022e5..8dea9b1 100644
--- a/linden/indra/llui/llpanel.h
+++ b/linden/indra/llui/llpanel.h
@@ -220,7 +220,7 @@ public:
220 220
221 // LLButton 221 // LLButton
222 void childSetAction(const std::string& id, void(*function)(void*), void* value); 222 void childSetAction(const std::string& id, void(*function)(void*), void* value);
223 void childSetActionTextbox(const std::string& id, void(*function)(void*)); 223 void childSetActionTextbox(const std::string& id, void(*function)(void*), void* value = NULL);
224 void childSetControlName(const std::string& id, const std::string& control_name); 224 void childSetControlName(const std::string& id, const std::string& control_name);
225 225
226 // Error reporting 226 // Error reporting
diff --git a/linden/indra/llui/lltextbox.cpp b/linden/indra/llui/lltextbox.cpp
index f43b7d2..e45f97b 100644
--- a/linden/indra/llui/lltextbox.cpp
+++ b/linden/indra/llui/lltextbox.cpp
@@ -33,6 +33,7 @@
33#include "lltextbox.h" 33#include "lltextbox.h"
34#include "lluictrlfactory.h" 34#include "lluictrlfactory.h"
35#include "llfocusmgr.h" 35#include "llfocusmgr.h"
36#include "llwindow.h"
36 37
37static LLRegisterWidget<LLTextBox> r("text"); 38static LLRegisterWidget<LLTextBox> r("text");
38 39
@@ -193,12 +194,14 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
193 194
194BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask) 195BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
195{ 196{
197 BOOL handled = LLView::handleHover(x,y,mask);
196 if(mHoverActive) 198 if(mHoverActive)
197 { 199 {
198 mHasHover = TRUE; // This should be set every frame during a hover. 200 mHasHover = TRUE; // This should be set every frame during a hover.
199 return TRUE; 201 getWindow()->setCursor(UI_CURSOR_ARROW);
200 } 202 }
201 return LLView::handleHover(x,y,mask); 203
204 return (handled || mHasHover);
202} 205}
203 206
204void LLTextBox::setText(const LLStringExplicit& text) 207void LLTextBox::setText(const LLStringExplicit& text)
diff --git a/linden/indra/llui/lltextbox.h b/linden/indra/llui/lltextbox.h
index 83e4a9b..aac5344 100644
--- a/linden/indra/llui/lltextbox.h
+++ b/linden/indra/llui/lltextbox.h
@@ -88,8 +88,7 @@ public:
88 void setVPad(S32 pixels) { mVPad = pixels; } 88 void setVPad(S32 pixels) { mVPad = pixels; }
89 void setRightAlign() { mHAlign = LLFontGL::RIGHT; } 89 void setRightAlign() { mHAlign = LLFontGL::RIGHT; }
90 void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; } 90 void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
91 void setClickedCallback( void (*cb)(void *data) ){ mClickedCallback = cb; } // mouse down and up within button 91 void setClickedCallback( void (*cb)(void *data), void* data = NULL ){ mClickedCallback = cb; mCallbackUserData = data; } // mouse down and up within button
92 void setCallbackUserData( void* data ) { mCallbackUserData = data; }
93 92
94 const LLFontGL* getFont() const { return mFontGL; } 93 const LLFontGL* getFont() const { return mFontGL; }
95 94
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 95cce60..8fa253a 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -3605,13 +3605,13 @@ void LLTextEditor::appendColoredText(const std::string &new_text,
3605 style->setVisible(true); 3605 style->setVisible(true);
3606 style->setColor(color); 3606 style->setColor(color);
3607 style->setFontName(font_name); 3607 style->setFontName(font_name);
3608 appendStyledText(new_text, allow_undo, prepend_newline, &style); 3608 appendStyledText(new_text, allow_undo, prepend_newline, style);
3609} 3609}
3610 3610
3611void LLTextEditor::appendStyledText(const std::string &new_text, 3611void LLTextEditor::appendStyledText(const std::string &new_text,
3612 bool allow_undo, 3612 bool allow_undo,
3613 bool prepend_newline, 3613 bool prepend_newline,
3614 const LLStyleSP *stylep) 3614 const LLStyleSP stylep)
3615{ 3615{
3616 if(mParseHTML) 3616 if(mParseHTML)
3617 { 3617 {
@@ -3626,14 +3626,14 @@ void LLTextEditor::appendStyledText(const std::string &new_text,
3626 html->setColor(mLinkColor); 3626 html->setColor(mLinkColor);
3627 if (stylep) 3627 if (stylep)
3628 { 3628 {
3629 html->setFontName((*stylep)->getFontString()); 3629 html->setFontName(stylep->getFontString());
3630 } 3630 }
3631 html->mUnderline = TRUE; 3631 html->mUnderline = TRUE;
3632 3632
3633 if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, stylep); 3633 if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, stylep);
3634 html->setLinkHREF(text.substr(start,end-start)); 3634 html->setLinkHREF(text.substr(start,end-start));
3635 appendText(text.substr(start, end-start),allow_undo, prepend_newline, &html); 3635 appendText(text.substr(start, end-start),allow_undo, prepend_newline, html);
3636 if (end < (S32)text.length()) 3636 if (end < (S32)text.length())
3637 { 3637 {
3638 text = text.substr(end,text.length() - end); 3638 text = text.substr(end,text.length() - end);
3639 end=0; 3639 end=0;
@@ -3653,7 +3653,7 @@ void LLTextEditor::appendStyledText(const std::string &new_text,
3653 3653
3654// Appends new text to end of document 3654// Appends new text to end of document
3655void LLTextEditor::appendText(const std::string &new_text, bool allow_undo, bool prepend_newline, 3655void LLTextEditor::appendText(const std::string &new_text, bool allow_undo, bool prepend_newline,
3656 const LLStyleSP *stylep) 3656 const LLStyleSP stylep)
3657{ 3657{
3658 // Save old state 3658 // Save old state
3659 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax()); 3659 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax());
@@ -3685,7 +3685,7 @@ void LLTextEditor::appendText(const std::string &new_text, bool allow_undo, bool
3685 { 3685 {
3686 S32 segment_start = old_length; 3686 S32 segment_start = old_length;
3687 S32 segment_end = getLength(); 3687 S32 segment_end = getLength();
3688 LLTextSegment* segment = new LLTextSegment(*stylep, segment_start, segment_end ); 3688 LLTextSegment* segment = new LLTextSegment(stylep, segment_start, segment_end );
3689 mSegments.push_back(segment); 3689 mSegments.push_back(segment);
3690 } 3690 }
3691 3691
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h
index 0777e5f..7e93de1 100644
--- a/linden/indra/llui/lltexteditor.h
+++ b/linden/indra/llui/lltexteditor.h
@@ -146,16 +146,16 @@ public:
146 void insertText(const std::string &text); 146 void insertText(const std::string &text);
147 // appends text at end 147 // appends text at end
148 void appendText(const std::string &wtext, bool allow_undo, bool prepend_newline, 148 void appendText(const std::string &wtext, bool allow_undo, bool prepend_newline,
149 const LLStyleSP *stylep = NULL); 149 const LLStyleSP stylep = NULL);
150 150
151 void appendColoredText(const std::string &wtext, bool allow_undo, 151 void appendColoredText(const std::string &wtext, bool allow_undo,
152 bool prepend_newline, 152 bool prepend_newline,
153 const LLColor4 &color, 153 const LLColor4 &color,
154 const std::string& font_name = LLStringUtil::null); 154 const std::string& font_name = LLStringUtil::null);
155 // if styled text starts a line, you need to prepend a newline. 155 // if styled text starts a line, you need to prepend a newline.
156 void appendStyledText(const std::string &new_text, bool allow_undo, 156 void appendStyledText(const std::string &new_text, bool allow_undo,
157 bool prepend_newline, 157 bool prepend_newline,
158 const LLStyleSP *stylep = NULL); 158 const LLStyleSP stylep = NULL);
159 159
160 // Removes text from the end of document 160 // Removes text from the end of document
161 // Does not change highlight or cursor position. 161 // Does not change highlight or cursor position.
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index 78bf168..e3652b7 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -85,7 +85,8 @@ LLView::LLView() :
85 mLastVisible(TRUE), 85 mLastVisible(TRUE),
86 mUseBoundingRect(FALSE), 86 mUseBoundingRect(FALSE),
87 mVisible(TRUE), 87 mVisible(TRUE),
88 mNextInsertionOrdinal(0) 88 mNextInsertionOrdinal(0),
89 mHoverCursor(UI_CURSOR_ARROW)
89{ 90{
90} 91}
91 92
@@ -102,7 +103,8 @@ LLView::LLView(const std::string& name, BOOL mouse_opaque) :
102 mLastVisible(TRUE), 103 mLastVisible(TRUE),
103 mUseBoundingRect(FALSE), 104 mUseBoundingRect(FALSE),
104 mVisible(TRUE), 105 mVisible(TRUE),
105 mNextInsertionOrdinal(0) 106 mNextInsertionOrdinal(0),
107 mHoverCursor(UI_CURSOR_ARROW)
106{ 108{
107} 109}
108 110
@@ -123,7 +125,8 @@ LLView::LLView(
123 mLastVisible(TRUE), 125 mLastVisible(TRUE),
124 mUseBoundingRect(FALSE), 126 mUseBoundingRect(FALSE),
125 mVisible(TRUE), 127 mVisible(TRUE),
126 mNextInsertionOrdinal(0) 128 mNextInsertionOrdinal(0),
129 mHoverCursor(UI_CURSOR_ARROW)
127{ 130{
128} 131}
129 132
@@ -657,7 +660,7 @@ BOOL LLView::handleHover(S32 x, S32 y, MASK mask)
657 if( !handled 660 if( !handled
658 && blockMouseEvent(x, y) ) 661 && blockMouseEvent(x, y) )
659 { 662 {
660 LLUI::sWindow->setCursor(UI_CURSOR_ARROW); 663 LLUI::sWindow->setCursor(mHoverCursor);
661 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl; 664 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl;
662 handled = TRUE; 665 handled = TRUE;
663 } 666 }
@@ -2622,7 +2625,14 @@ void LLView::initFromXML(LLXMLNodePtr node, LLView* parent)
2622 node->getAttributeBOOL("visible", visible); 2625 node->getAttributeBOOL("visible", visible);
2623 setVisible(visible); 2626 setVisible(visible);
2624 } 2627 }
2625 2628
2629 if (node->hasAttribute("hover_cursor"))
2630 {
2631 std::string cursor_string;
2632 node->getAttributeString("hover_cursor", cursor_string);
2633 mHoverCursor = getCursorFromString(cursor_string);
2634 }
2635
2626 node->getAttributeBOOL("use_bounding_rect", mUseBoundingRect); 2636 node->getAttributeBOOL("use_bounding_rect", mUseBoundingRect);
2627 node->getAttributeBOOL("mouse_opaque", mMouseOpaque); 2637 node->getAttributeBOOL("mouse_opaque", mMouseOpaque);
2628 2638
diff --git a/linden/indra/llui/llview.h b/linden/indra/llui/llview.h
index da7f164..df34a3e 100644
--- a/linden/indra/llui/llview.h
+++ b/linden/indra/llui/llview.h
@@ -51,6 +51,7 @@
51#include "llxmlnode.h" 51#include "llxmlnode.h"
52#include "stdenums.h" 52#include "stdenums.h"
53#include "lluistring.h" 53#include "lluistring.h"
54#include "llcursortypes.h"
54 55
55const U32 FOLLOWS_NONE = 0x00; 56const U32 FOLLOWS_NONE = 0x00;
56const U32 FOLLOWS_LEFT = 0x01; 57const U32 FOLLOWS_LEFT = 0x01;
@@ -653,7 +654,9 @@ private:
653 mutable dummy_widget_map_t mDummyWidgets; 654 mutable dummy_widget_map_t mDummyWidgets;
654 655
655 boost::signals::connection mControlConnection; 656 boost::signals::connection mControlConnection;
656 657
658 ECursorType mHoverCursor;
659
657public: 660public:
658 static BOOL sDebugRects; // Draw debug rects behind everything. 661 static BOOL sDebugRects; // Draw debug rects behind everything.
659 static BOOL sDebugKeys; 662 static BOOL sDebugKeys;
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index 821de2f..0acbcb9 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -35,48 +35,7 @@
35#include "llrect.h" 35#include "llrect.h"
36#include "llcoord.h" 36#include "llcoord.h"
37#include "llstring.h" 37#include "llstring.h"
38 38#include "llcursortypes.h"
39
40enum ECursorType {
41 UI_CURSOR_ARROW,
42 UI_CURSOR_WAIT,
43 UI_CURSOR_HAND,
44 UI_CURSOR_IBEAM,
45 UI_CURSOR_CROSS,
46 UI_CURSOR_SIZENWSE,
47 UI_CURSOR_SIZENESW,
48 UI_CURSOR_SIZEWE,
49 UI_CURSOR_SIZENS,
50 UI_CURSOR_NO,
51 UI_CURSOR_WORKING,
52 UI_CURSOR_TOOLGRAB,
53 UI_CURSOR_TOOLLAND,
54 UI_CURSOR_TOOLFOCUS,
55 UI_CURSOR_TOOLCREATE,
56 UI_CURSOR_ARROWDRAG,
57 UI_CURSOR_ARROWCOPY, // drag with copy
58 UI_CURSOR_ARROWDRAGMULTI,
59 UI_CURSOR_ARROWCOPYMULTI, // drag with copy
60 UI_CURSOR_NOLOCKED,
61 UI_CURSOR_ARROWLOCKED,
62 UI_CURSOR_GRABLOCKED,
63 UI_CURSOR_TOOLTRANSLATE,
64 UI_CURSOR_TOOLROTATE,
65 UI_CURSOR_TOOLSCALE,
66 UI_CURSOR_TOOLCAMERA,
67 UI_CURSOR_TOOLPAN,
68 UI_CURSOR_TOOLZOOMIN,
69 UI_CURSOR_TOOLPICKOBJECT3,
70 UI_CURSOR_TOOLSIT,
71 UI_CURSOR_TOOLBUY,
72 UI_CURSOR_TOOLPAY,
73 UI_CURSOR_TOOLOPEN,
74 UI_CURSOR_TOOLPLAY,
75 UI_CURSOR_TOOLPAUSE,
76 UI_CURSOR_TOOLMEDIAOPEN,
77 UI_CURSOR_PIPETTE,
78 UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor)
79};
80 39
81class LLSplashScreen; 40class LLSplashScreen;
82 41
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt
index f224652..bb07922 100644
--- a/linden/indra/newview/CMakeLists.txt
+++ b/linden/indra/newview/CMakeLists.txt
@@ -168,6 +168,7 @@ set(viewer_SOURCE_FILES
168 llfloatermute.cpp 168 llfloatermute.cpp
169 llfloaternamedesc.cpp 169 llfloaternamedesc.cpp
170 llfloaternewim.cpp 170 llfloaternewim.cpp
171 llfloaterobjectiminfo.cpp
171 llfloateropenobject.cpp 172 llfloateropenobject.cpp
172 llfloaterparcel.cpp 173 llfloaterparcel.cpp
173 llfloaterpermissionsmgr.cpp 174 llfloaterpermissionsmgr.cpp
@@ -422,6 +423,7 @@ set(viewer_SOURCE_FILES
422 llwearablelist.cpp 423 llwearablelist.cpp
423 llweb.cpp 424 llweb.cpp
424 llwebbrowserctrl.cpp 425 llwebbrowserctrl.cpp
426 llwindlightremotectrl.cpp
425 llwind.cpp 427 llwind.cpp
426 llwlanimator.cpp 428 llwlanimator.cpp
427 llwldaycycle.cpp 429 llwldaycycle.cpp
@@ -571,6 +573,7 @@ set(viewer_HEADER_FILES
571 llfloatermute.h 573 llfloatermute.h
572 llfloaternamedesc.h 574 llfloaternamedesc.h
573 llfloaternewim.h 575 llfloaternewim.h
576 llfloaterobjectiminfo.h
574 llfloateropenobject.h 577 llfloateropenobject.h
575 llfloaterparcel.h 578 llfloaterparcel.h
576 llfloaterpermissionsmgr.h 579 llfloaterpermissionsmgr.h
@@ -830,6 +833,7 @@ set(viewer_HEADER_FILES
830 llwebbrowserctrl.h 833 llwebbrowserctrl.h
831 llwind.h 834 llwind.h
832 llwindebug.h 835 llwindebug.h
836 llwindlightremotectrl.h
833 llwlanimator.h 837 llwlanimator.h
834 llwldaycycle.h 838 llwldaycycle.h
835 llwlparammanager.h 839 llwlparammanager.h
@@ -1097,6 +1101,7 @@ set(viewer_XUI_FILES
1097 skins/default/xui/en-us/floater_name_description.xml 1101 skins/default/xui/en-us/floater_name_description.xml
1098 skins/default/xui/en-us/floater_new_im.xml 1102 skins/default/xui/en-us/floater_new_im.xml
1099 skins/default/xui/en-us/floater_new_outfit_dialog.xml 1103 skins/default/xui/en-us/floater_new_outfit_dialog.xml
1104 skins/default/xui/en-us/floater_object_im_info.xml
1100 skins/default/xui/en-us/floater_openobject.xml 1105 skins/default/xui/en-us/floater_openobject.xml
1101 skins/default/xui/en-us/floater_pay_object.xml 1106 skins/default/xui/en-us/floater_pay_object.xml
1102 skins/default/xui/en-us/floater_pay.xml 1107 skins/default/xui/en-us/floater_pay.xml
@@ -1213,6 +1218,9 @@ set(viewer_XUI_FILES
1213 skins/default/xui/en-us/panel_voice_options.xml 1218 skins/default/xui/en-us/panel_voice_options.xml
1214 skins/default/xui/en-us/panel_voice_remote_expanded.xml 1219 skins/default/xui/en-us/panel_voice_remote_expanded.xml
1215 skins/default/xui/en-us/panel_voice_remote.xml 1220 skins/default/xui/en-us/panel_voice_remote.xml
1221 skins/default/xui/en-us/panel_windlight_controls.xml
1222 skins/default/xui/en-us/panel_windlight_remote.xml
1223 skins/default/xui/en-us/panel_windlight_remote_expanded.xml
1216 skins/default/xui/en-us/role_actions.xml 1224 skins/default/xui/en-us/role_actions.xml
1217 skins/default/xui/en-us/strings.xml 1225 skins/default/xui/en-us/strings.xml
1218 skins/default/xui/en-us/teleport_strings.xml 1226 skins/default/xui/en-us/teleport_strings.xml
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 154fd5f..194e95e 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -763,6 +763,17 @@
763 <key>Value</key> 763 <key>Value</key>
764 <integer>0</integer> 764 <integer>0</integer>
765 </map> 765 </map>
766 <key>BlockClickSit</key>
767 <map>
768 <key>Comment</key>
769 <string>Block click sit</string>
770 <key>Persist</key>
771 <integer>1</integer>
772 <key>Type</key>
773 <string>Boolean</string>
774 <key>Value</key>
775 <integer>0</integer>
776 </map>
766 <key>BrowserHome</key> 777 <key>BrowserHome</key>
767 <map> 778 <map>
768 <key>Comment</key> 779 <key>Comment</key>
@@ -2492,6 +2503,17 @@
2492 <key>Value</key> 2503 <key>Value</key>
2493 <integer>1</integer> 2504 <integer>1</integer>
2494 </map> 2505 </map>
2506 <key>EnableWindlightRemote</key>
2507 <map>
2508 <key>Comment</key>
2509 <string>Enable windlight quick access remote in toolbar</string>
2510 <key>Persist</key>
2511 <integer>1</integer>
2512 <key>Type</key>
2513 <string>Boolean</string>
2514 <key>Value</key>
2515 <integer>1</integer>
2516 </map>
2495 <key>EnergyFromTop</key> 2517 <key>EnergyFromTop</key>
2496 <map> 2518 <map>
2497 <key>Comment</key> 2519 <key>Comment</key>
@@ -3205,7 +3227,24 @@
3205 <integer>0</integer> 3227 <integer>0</integer>
3206 </array> 3228 </array>
3207 </map> 3229 </map>
3208 <key>FloaterOpenObjectRect</key> 3230
3231 <key>FloaterObjectIMInfo</key>
3232 <map>
3233 <key>Comment</key>
3234 <string>Rectangle for floater object im info windows</string>
3235 <key>Persist</key>
3236 <integer>1</integer>
3237 <key>Type</key>
3238 <string>Rect</string>
3239 <key>Value</key>
3240 <array>
3241 <integer>0</integer>
3242 <integer>300</integer>
3243 <integer>300</integer>
3244 <integer>0</integer>
3245 </array>
3246 </map>
3247 <key>FloaterOpenObjectRect</key>
3209 <map> 3248 <map>
3210 <key>Comment</key> 3249 <key>Comment</key>
3211 <string>Rectangle for Open Object window</string> 3250 <string>Rectangle for Open Object window</string>
@@ -4136,6 +4175,17 @@
4136 <key>Value</key> 4175 <key>Value</key>
4137 <real>1.0</real> 4176 <real>1.0</real>
4138 </map> 4177 </map>
4178 <key>InventorySearchType</key>
4179 <map>
4180 <key>Comment</key>
4181 <string>Controls what type of inventory search we perform.</string>
4182 <key>Persist</key>
4183 <integer>0</integer>
4184 <key>Type</key>
4185 <string>U32</string>
4186 <key>Value</key>
4187 <integer>0</integer>
4188 </map>
4139 <key>InventorySortOrder</key> 4189 <key>InventorySortOrder</key>
4140 <map> 4190 <map>
4141 <key>Comment</key> 4191 <key>Comment</key>
@@ -4670,6 +4720,17 @@
4670 <key>Value</key> 4720 <key>Value</key>
4671 <integer>0</integer> 4721 <integer>0</integer>
4672 </map> 4722 </map>
4723 <key>LoggedIntoOpenSim</key>
4724 <map>
4725 <key>Comment</key>
4726 <string>Check whether or not we're in an OpenSimulator (default 0)</string>
4727 <key>Persist</key>
4728 <integer>1</integer>
4729 <key>Type</key>
4730 <string>Boolean</string>
4731 <key>Value</key>
4732 <integer>0</integer>
4733 </map>
4673 <key>LoginAsGod</key> 4734 <key>LoginAsGod</key>
4674 <map> 4735 <map>
4675 <key>Comment</key> 4736 <key>Comment</key>
@@ -4747,6 +4808,17 @@
4747 <key>Value</key> 4808 <key>Value</key>
4748 <real>128.0</real> 4809 <real>128.0</real>
4749 </map> 4810 </map>
4811 <key>MapShowAgentCount</key>
4812 <map>
4813 <key>Comment</key>
4814 <string>Show number of agents next to region names on world map</string>
4815 <key>Persist</key>
4816 <integer>1</integer>
4817 <key>Type</key>
4818 <string>Boolean</string>
4819 <key>Value</key>
4820 <integer>1</integer>
4821 </map>
4750 <key>MapShowEvents</key> 4822 <key>MapShowEvents</key>
4751 <map> 4823 <map>
4752 <key>Comment</key> 4824 <key>Comment</key>
@@ -4992,7 +5064,7 @@
4992 <key>MiniMapScale</key> 5064 <key>MiniMapScale</key>
4993 <map> 5065 <map>
4994 <key>Comment</key> 5066 <key>Comment</key>
4995 <string>Miniature world map zoom levle (pixels per region)</string> 5067 <string>Miniature world map zoom level (pixels per region)</string>
4996 <key>Persist</key> 5068 <key>Persist</key>
4997 <integer>1</integer> 5069 <integer>1</integer>
4998 <key>Type</key> 5070 <key>Type</key>
@@ -5184,7 +5256,7 @@
5184 <key>Type</key> 5256 <key>Type</key>
5185 <string>F32</string> 5257 <string>F32</string>
5186 <key>Value</key> 5258 <key>Value</key>
5187 <integer>20</integer> 5259 <integer>96</integer>
5188 </map> 5260 </map>
5189 <key>NewCacheLocation</key> 5261 <key>NewCacheLocation</key>
5190 <map> 5262 <map>
@@ -7474,6 +7546,17 @@
7474 <key>Value</key> 7546 <key>Value</key>
7475 <integer>0</integer> 7547 <integer>0</integer>
7476 </map> 7548 </map>
7549 <key>ShowStreamTitle</key>
7550 <map>
7551 <key>Comment</key>
7552 <string>Show the title of the song playing on the parcel's stream</string>
7553 <key>Persist</key>
7554 <integer>1</integer>
7555 <key>Type</key>
7556 <string>Boolean</string>
7557 <key>Value</key>
7558 <integer>1</integer>
7559 </map>
7477 <key>ShowTangentBasis</key> 7560 <key>ShowTangentBasis</key>
7478 <map> 7561 <map>
7479 <key>Comment</key> 7562 <key>Comment</key>
@@ -7540,6 +7623,17 @@
7540 <key>Value</key> 7623 <key>Value</key>
7541 <integer>0</integer> 7624 <integer>0</integer>
7542 </map> 7625 </map>
7626 <key>ShowWindlightSettingsPopup</key>
7627 <map>
7628 <key>Comment</key>
7629 <string>Show environment settings popup</string>
7630 <key>Persist</key>
7631 <integer>1</integer>
7632 <key>Type</key>
7633 <string>Boolean</string>
7634 <key>Value</key>
7635 <integer>0</integer>
7636 </map>
7543 <key>ShowWorldMap</key> 7637 <key>ShowWorldMap</key>
7544 <map> 7638 <map>
7545 <key>Comment</key> 7639 <key>Comment</key>
@@ -8044,7 +8138,7 @@
8044 <key>Type</key> 8138 <key>Type</key>
8045 <string>F32</string> 8139 <string>F32</string>
8046 <key>Value</key> 8140 <key>Value</key>
8047 <real>500.0</real> 8141 <real>1000.0</real>
8048 </map> 8142 </map>
8049 <key>ToolHelpRect</key> 8143 <key>ToolHelpRect</key>
8050 <map> 8144 <map>
@@ -10256,6 +10350,17 @@
10256 <key>Value</key> 10350 <key>Value</key>
10257 <integer>1</integer> 10351 <integer>1</integer>
10258 </map> 10352 </map>
10353 <key>WarnFirstMiniMap</key>
10354 <map>
10355 <key>Comment</key>
10356 <string>Enables FirstMiniMap warning dialog</string>
10357 <key>Persist</key>
10358 <integer>1</integer>
10359 <key>Type</key>
10360 <string>Boolean</string>
10361 <key>Value</key>
10362 <integer>1</integer>
10363 </map>
10259 <key>WarnFirstOverrideKeys</key> 10364 <key>WarnFirstOverrideKeys</key>
10260 <map> 10365 <map>
10261 <key>Comment</key> 10366 <key>Comment</key>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml
new file mode 100644
index 0000000..896abf6
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%201.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.35999998450279236</real>
6 <real>0.42000001668930054</real>
7 <real>0.42000001668930054</real>
8 <real>0.42000001668930054</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>0.51999998092651367</real>
13 <real>0.2800000011920929</real>
14 <real>0.51999998092651367</real>
15 <real>0.51999998092651367</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.69999998807907104</real>
20 <real>0.69999998807907104</real>
21 <real>0.68000000715255737</real>
22 <real>0.69999998807907104</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>1</real>
27 <real>0.79000002145767212</real>
28 <real>0.80000001192092896</real>
29 <real>1</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.40999999642372131</real>
34 <real>0.39999997615814209</real>
35 <real>0.88999998569488525</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.28999999165534973</real>
41 <real>0.32999998331069946</real>
42 <real>0.039999999105930328</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.37999999523162842</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>11.809999465942383</real>
55 <real>12.799999237060547</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.31999999284744263</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.00021999998716637492</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>4</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>3.8327431678771973</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.5399999618530273</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>14.40000057220459</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.85000002384185791</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>2.0399999618530273</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.049999997019767761</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>0.63680768013000488</real>
116 <real>0.043968122452497482</real>
117 <real>-0.76976805925369263</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>676.10003662109375</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>18</integer>
129 <key>star_brightness</key>
130 <real>2</real>
131 <key>sun_angle</key>
132 <real>0.043982300907373428</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>2.369999885559082</real>
136 <real>1.4099999666213989</real>
137 <real>1.0199999809265137</real>
138 <real>2.369999885559082</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml
new file mode 100644
index 0000000..3b170ac
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%202.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.84000003337860107</real>
6 <real>0.56999999284744263</real>
7 <real>0.56999999284744263</real>
8 <real>0.84000003337860107</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>1.0799999237060547</real>
13 <real>0.51999998092651367</real>
14 <real>0.51999998092651367</real>
15 <real>1.0799999237060547</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.57999998331069946</real>
20 <real>0.25999999046325684</real>
21 <real>0.25999999046325684</real>
22 <real>0.57999998331069946</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>1</real>
27 <real>0.79000002145767212</real>
28 <real>0.80000001192092896</real>
29 <real>1</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.40999999642372131</real>
34 <real>0.39999997615814209</real>
35 <real>0.88999998569488525</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.28999999165534973</real>
41 <real>0.32999998331069946</real>
42 <real>0.039999999105930328</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.37999999523162842</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>11.809999465942383</real>
55 <real>12.799999237060547</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.31999999284744263</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.0002899999963119626</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>5.5999999046325684</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>3.8327431678771973</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.5399999618530273</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>14.40000057220459</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.85000002384185791</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>2.0399999618530273</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.049999997019767761</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>0.63495957851409912</real>
116 <real>0.087851203978061676</real>
117 <real>-0.76753407716751099</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>676.10003662109375</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>18</integer>
129 <key>star_brightness</key>
130 <real>2</real>
131 <key>sun_angle</key>
132 <real>0.087964601814746857</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>2.2799999713897705</real>
136 <real>0.75</real>
137 <real>0.59999996423721313</real>
138 <real>2.2799999713897705</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml
new file mode 100644
index 0000000..5cc7a61
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%203.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.71999996900558472</real>
6 <real>0.71999996900558472</real>
7 <real>0.71999996900558472</real>
8 <real>0.23999999463558197</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>0.31999999284744263</real>
13 <real>0.094117648899555206</real>
14 <real>0.094117648899555206</real>
15 <real>0.15999999642372131</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.45999997854232788</real>
20 <real>0</real>
21 <real>0.039999999105930328</real>
22 <real>0.45999997854232788</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>0.14000000059604645</real>
27 <real>0.14000000059604645</real>
28 <real>0.14000000059604645</real>
29 <real>0.14000000059604645</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.74000000953674316</real>
34 <real>0.93999999761581421</real>
35 <real>0.20999999344348907</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.65999996662139893</real>
41 <real>0.52999997138977051</real>
42 <real>0.0099999997764825821</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.070000000298023224</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>18</real>
55 <real>20</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.34000000357627869</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.00018000000272877514</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>6.7000002861022949</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>3.5185837745666504</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.0399999618530273</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>17.399999618530273</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.64999997615814209</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>0.40999999642372131</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.17000000178813934</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>0.3677685558795929</real>
116 <real>0.043968122452497482</real>
117 <real>-0.92887735366821289</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>263</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>24</integer>
129 <key>star_brightness</key>
130 <real>1.0399999618530273</real>
131 <key>sun_angle</key>
132 <real>0.043982300907373428</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>1.5899999141693115</real>
136 <real>1.5899999141693115</real>
137 <real>1.5899999141693115</real>
138 <real>1.5899999141693115</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml
new file mode 100644
index 0000000..d48a4a2
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.42000001668930054</real>
6 <real>0.29999998211860657</real>
7 <real>0.29999998211860657</real>
8 <real>0.42000001668930054</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>0.59999996423721313</real>
13 <real>0.15999999642372131</real>
14 <real>0.2199999988079071</real>
15 <real>0.59999996423721313</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.029999999329447746</real>
20 <real>0</real>
21 <real>0</real>
22 <real>0.079999998211860657</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>0.81999999284744263</real>
27 <real>0.18999999761581421</real>
28 <real>0.039999999105930328</real>
29 <real>0.81999999284744263</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.74000000953674316</real>
34 <real>0.93999999761581421</real>
35 <real>0.20999999344348907</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.65999996662139893</real>
41 <real>0.52999997138977051</real>
42 <real>0.0099999997764825821</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.14000000059604645</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>18</real>
55 <real>20</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.37999999523162842</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.00015999999595806003</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>17.399999618530273</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>2.3247785568237305</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.5299999713897705</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>17.399999618530273</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.64999997615814209</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>0.32999998331069946</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.079999998211860657</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>-0.72615015506744385</real>
116 <real>0.087851203978061676</real>
117 <real>-0.68190038204193115</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>1048</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>24</integer>
129 <key>star_brightness</key>
130 <real>1.3199999332427979</real>
131 <key>sun_angle</key>
132 <real>0.087964601814746857</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>1.5899999141693115</real>
136 <real>0.47999998927116394</real>
137 <real>0.53999996185302734</real>
138 <real>1.5899999141693115</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml
new file mode 100644
index 0000000..3ceb600
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.77999997138977051</real>
6 <real>0.29999998211860657</real>
7 <real>0.29999998211860657</real>
8 <real>0.77999997138977051</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>1.5799999237060547</real>
13 <real>0.45999997854232788</real>
14 <real>0.45999997854232788</real>
15 <real>1.5799999237060547</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.97999995946884155</real>
20 <real>0.34000000357627869</real>
21 <real>0.35999998450279236</real>
22 <real>0.97999995946884155</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>0</real>
27 <real>0</real>
28 <real>0</real>
29 <real>0</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.74000000953674316</real>
34 <real>0.93999999761581421</real>
35 <real>0.19999998807907104</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.65999996662139893</real>
41 <real>0.69999998807907104</real>
42 <real>0</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.070000000298023224</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>2.8600001335144043</real>
55 <real>17.589999675750732</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.42999997735023499</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.00015999999595806003</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>2.1000001430511475</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>3.7699110507965088</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.1100000143051147</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>14.000000953674316</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.89999997615814209</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>0.82999998331069946</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.48999997973442078</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>0.58778512477874756</real>
116 <real>0</real>
117 <real>-0.80901706218719482</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>276</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>24</integer>
129 <key>star_brightness</key>
130 <real>1.1699999570846558</real>
131 <key>sun_angle</key>
132 <real>0</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>0.29999998211860657</real>
136 <real>0.29999998211860657</real>
137 <real>0.29999998211860657</real>
138 <real>0.099999994039535522</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml b/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml
new file mode 100644
index 0000000..c36da85
--- /dev/null
+++ b/linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml
@@ -0,0 +1,141 @@
1<llsd>
2 <map>
3 <key>ambient</key>
4 <array>
5 <real>0.77999997138977051</real>
6 <real>0.29999998211860657</real>
7 <real>0.29999998211860657</real>
8 <real>0.77999997138977051</real>
9 </array>
10 <key>blue_density</key>
11 <array>
12 <real>0.65999996662139893</real>
13 <real>0.58384609222412109</real>
14 <real>0.58384609222412109</real>
15 <real>0.32999998331069946</real>
16 </array>
17 <key>blue_horizon</key>
18 <array>
19 <real>0.37999999523162842</real>
20 <real>0.34000000357627869</real>
21 <real>0.35999998450279236</real>
22 <real>0.37999999523162842</real>
23 </array>
24 <key>cloud_color</key>
25 <array>
26 <real>0</real>
27 <real>0</real>
28 <real>0</real>
29 <real>0</real>
30 </array>
31 <key>cloud_pos_density1</key>
32 <array>
33 <real>0.74000000953674316</real>
34 <real>0.93999999761581421</real>
35 <real>0.19999998807907104</real>
36 <real>1</real>
37 </array>
38 <key>cloud_pos_density2</key>
39 <array>
40 <real>0.65999996662139893</real>
41 <real>0.69999998807907104</real>
42 <real>0</real>
43 <real>1</real>
44 </array>
45 <key>cloud_scale</key>
46 <array>
47 <real>0.070000000298023224</real>
48 <real>0</real>
49 <real>0</real>
50 <real>1</real>
51 </array>
52 <key>cloud_scroll_rate</key>
53 <array>
54 <real>2.8600001335144043</real>
55 <real>17.589999675750732</real>
56 </array>
57 <key>cloud_shadow</key>
58 <array>
59 <real>0.42999997735023499</real>
60 <real>0</real>
61 <real>0</real>
62 <real>1</real>
63 </array>
64 <key>density_multiplier</key>
65 <array>
66 <real>0.00015999999595806003</real>
67 <real>0</real>
68 <real>0</real>
69 <real>1</real>
70 </array>
71 <key>distance_multiplier</key>
72 <array>
73 <real>2.1000001430511475</real>
74 <real>0</real>
75 <real>0</real>
76 <real>1</real>
77 </array>
78 <key>east_angle</key>
79 <real>3.7699110507965088</real>
80 <key>enable_cloud_scroll</key>
81 <array>
82 <boolean>1</boolean>
83 <boolean>1</boolean>
84 </array>
85 <key>gamma</key>
86 <array>
87 <real>1.1100000143051147</real>
88 <real>0</real>
89 <real>0</real>
90 <real>1</real>
91 </array>
92 <key>glow</key>
93 <array>
94 <real>14.000000953674316</real>
95 <real>0.0010000000474974513</real>
96 <real>-0.89999997615814209</real>
97 <real>1</real>
98 </array>
99 <key>haze_density</key>
100 <array>
101 <real>0.82999998331069946</real>
102 <real>0</real>
103 <real>0</real>
104 <real>1</real>
105 </array>
106 <key>haze_horizon</key>
107 <array>
108 <real>0.2800000011920929</real>
109 <real>0.19915600121021271</real>
110 <real>0.19915600121021271</real>
111 <real>1</real>
112 </array>
113 <key>lightnorm</key>
114 <array>
115 <real>0.58778512477874756</real>
116 <real>0</real>
117 <real>-0.80901706218719482</real>
118 <real>0</real>
119 </array>
120 <key>max_y</key>
121 <array>
122 <real>276</real>
123 <real>0</real>
124 <real>0</real>
125 <real>1</real>
126 </array>
127 <key>preset_num</key>
128 <integer>24</integer>
129 <key>star_brightness</key>
130 <real>1.1699999570846558</real>
131 <key>sun_angle</key>
132 <real>0</real>
133 <key>sunlight_color</key>
134 <array>
135 <real>0.29999998211860657</real>
136 <real>0.29999998211860657</real>
137 <real>0.29999998211860657</real>
138 <real>0.099999994039535522</real>
139 </array>
140 </map>
141</llsd>
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index 1b1284d..1de3690 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -616,7 +616,7 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL
616{ 616{
617 // Look for "/20 foo" channel chats. 617 // Look for "/20 foo" channel chats.
618 S32 channel = mChannelControl ? (S32)(getChild<LLSpinCtrl>("channel_control")->get()) : 0; 618 S32 channel = mChannelControl ? (S32)(getChild<LLSpinCtrl>("channel_control")->get()) : 0;
619 //S32 channel = (S32)(getChild<LLSpinCtrl>("ChatChannel")->get()); 619
620 LLWString out_text = stripChannelNumber(wtext, &channel); 620 LLWString out_text = stripChannelNumber(wtext, &channel);
621 std::string utf8_out_text = wstring_to_utf8str(out_text); 621 std::string utf8_out_text = wstring_to_utf8str(out_text);
622 std::string utf8_text = wstring_to_utf8str(wtext); 622 std::string utf8_text = wstring_to_utf8str(wtext);
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp
index caf79eb..954a274 100644
--- a/linden/indra/newview/llfilepicker.cpp
+++ b/linden/indra/newview/llfilepicker.cpp
@@ -998,6 +998,12 @@ GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::stri
998 (GTK_FILE_CHOOSER(win), 998 (GTK_FILE_CHOOSER(win),
999 this_path->second.c_str()); 999 this_path->second.c_str());
1000 } 1000 }
1001 else if (getenv("HOME"))
1002 {
1003 gtk_file_chooser_set_current_folder
1004 (GTK_FILE_CHOOSER(win),
1005 getenv("HOME"));
1006 }
1001 1007
1002# if LL_X11 1008# if LL_X11
1003 // Make GTK tell the window manager to associate this 1009 // Make GTK tell the window manager to associate this
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp
index ee7053d..b807b17 100644
--- a/linden/indra/newview/llfirstuse.cpp
+++ b/linden/indra/newview/llfirstuse.cpp
@@ -131,6 +131,17 @@ void LLFirstUse::useMap()
131} 131}
132 132
133// static 133// static
134void LLFirstUse::useMiniMap()
135{
136 if (gSavedSettings.getWarning("FirstMiniMap"))
137 {
138 gSavedSettings.setWarning("FirstMiniMap", FALSE);
139
140 LLNotifyBox::showXml("FirstMiniMap");
141 }
142}
143
144// static
134void LLFirstUse::useGoTo() 145void LLFirstUse::useGoTo()
135{ 146{
136 // nothing for now JC 147 // nothing for now JC
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h
index eef0537..cbb31ab 100644
--- a/linden/indra/newview/llfirstuse.h
+++ b/linden/indra/newview/llfirstuse.h
@@ -92,6 +92,7 @@ public:
92 static void useBalanceDecrease(S32 delta); 92 static void useBalanceDecrease(S32 delta);
93 static void useSit(); 93 static void useSit();
94 static void useMap(); 94 static void useMap();
95 static void useMiniMap();
95 static void useGoTo(); 96 static void useGoTo();
96 static void useBuild(); 97 static void useBuild();
97 static void useLeftClickNoHit(); 98 static void useLeftClickNoHit();
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp
index 63f72af..57c5339 100644
--- a/linden/indra/newview/llfloaterabout.cpp
+++ b/linden/indra/newview/llfloaterabout.cpp
@@ -119,7 +119,7 @@ LLFloaterAbout::LLFloaterAbout()
119 __DATE__, __TIME__); 119 __DATE__, __TIME__);
120 120
121 support_widget->appendColoredText(version, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor")); 121 support_widget->appendColoredText(version, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor"));
122 support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), FALSE, FALSE, &viewer_link_style); 122 support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), false, false, viewer_link_style);
123 123
124 std::string support; 124 std::string support;
125 support.append("\n\n"); 125 support.append("\n\n");
@@ -163,7 +163,7 @@ LLFloaterAbout::LLFloaterAbout()
163 support.append("\n"); 163 support.append("\n");
164 164
165 support_widget->appendColoredText(support, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor")); 165 support_widget->appendColoredText(support, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor"));
166 support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), FALSE, FALSE, &server_link_style); 166 support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), false, false, server_link_style);
167 167
168 support = "\n\n"; 168 support = "\n\n";
169 } 169 }
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 68aaceb..1f51a21 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -189,7 +189,7 @@ void LLFloaterChat::updateConsoleVisibility()
189 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater? 189 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater?
190} 190}
191 191
192void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LLColor4& color) 192void add_timestamped_line(LLViewerTextEditor* edit, LLChat chat, const LLColor4& color)
193{ 193{
194 std::string line = chat.mText; 194 std::string line = chat.mText;
195 bool prepend_newline = true; 195 bool prepend_newline = true;
@@ -199,20 +199,25 @@ void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LL
199 prepend_newline = false; 199 prepend_newline = false;
200 } 200 }
201 201
202 // If the msg is not from an agent (not yourself though), 202 // If the msg is from an agent (not yourself though),
203 // extract out the sender name and replace it with the hotlinked name. 203 // extract out the sender name and replace it with the hotlinked name.
204 if (chat.mSourceType == CHAT_SOURCE_AGENT && 204 if (chat.mSourceType == CHAT_SOURCE_AGENT &&
205 chat.mFromID != LLUUID::null && 205 chat.mFromID != LLUUID::null &&
206// (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0))
207 (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0) &&
208// [RLVa] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) 206// [RLVa] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e)
209 (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ) 207 (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) )
210// [/RLVa] 208// [/RLVa]
211 { 209 {
210 chat.mURL = llformat("secondlife:///app/agent/%s/about",chat.mFromID.asString().c_str());
211 }
212
213 // If the chat line has an associated url, link it up to the name.
214 if (!chat.mURL.empty()
215 && (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0))
216 {
212 std::string start_line = line.substr(0, chat.mFromName.length() + 1); 217 std::string start_line = line.substr(0, chat.mFromName.length() + 1);
213 line = line.substr(chat.mFromName.length() + 1); 218 line = line.substr(chat.mFromName.length() + 1);
214 const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID); 219 const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID,chat.mURL);
215 edit->appendStyledText(start_line, false, prepend_newline, &sourceStyle); 220 edit->appendStyledText(start_line, false, prepend_newline, sourceStyle);
216 prepend_newline = false; 221 prepend_newline = false;
217 } 222 }
218 edit->appendColoredText(line, false, prepend_newline, color); 223 edit->appendColoredText(line, false, prepend_newline, color);
diff --git a/linden/indra/newview/llfloaterchatterbox.h b/linden/indra/newview/llfloaterchatterbox.h
index 39e1025..04833ab 100644
--- a/linden/indra/newview/llfloaterchatterbox.h
+++ b/linden/indra/newview/llfloaterchatterbox.h
@@ -149,7 +149,14 @@ public:
149 { 149 {
150 if (visible(instance, key)) 150 if (visible(instance, key))
151 { 151 {
152 LLFloaterChatterBox::hideInstance(); 152 if(instance->getHost())
153 {
154 LLFloaterChatterBox::hideInstance();
155 }
156 else
157 {
158 VisibilityPolicy<LLFloater>::hide(instance, key);
159 }
153 } 160 }
154 } 161 }
155 162
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp
index 8714d4f..3be891e 100644
--- a/linden/indra/newview/llfloatermap.cpp
+++ b/linden/indra/newview/llfloatermap.cpp
@@ -42,14 +42,40 @@
42#include "llresizebar.h" 42#include "llresizebar.h"
43#include "lluictrlfactory.h" 43#include "lluictrlfactory.h"
44 44
45// radar
46#include "llfirstuse.h"
47#include "llfloateravatarinfo.h"
48#include "llfloaterfriends.h"
49#include "llfloatergroupinvite.h"
50#include "llfloatergroups.h"
51#include "llfloaterreporter.h"
52#include "llimview.h"
53#include "llmutelist.h"
54#include "llparcel.h"
55#include "llregionposition.h"
56#include "roles_constants.h"
57#include "llscrolllistctrl.h"
58#include "lltracker.h"
59#include "llviewerobjectlist.h"
60#include "llviewermenu.h"
61#include "llviewermessage.h"
62#include "llviewerparcelmgr.h"
63#include "llviewerregion.h"
64#include "llviewerwindow.h"
65#include "llvoavatar.h"
66#include "llworld.h"
67
45LLFloaterMap::LLFloaterMap(const LLSD& key) 68LLFloaterMap::LLFloaterMap(const LLSD& key)
46 : 69 :
47 LLFloater(std::string("minimap")), 70 LLFloater(std::string("minimap")),
48 mPanelMap(NULL) 71 mPanelMap(NULL),
72 mUpdate(TRUE)
49{ 73{
50 LLCallbackMap::map_t factory_map; 74 LLCallbackMap::map_t factory_map;
51 factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this); 75 factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this);
52 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); 76 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE);
77
78 mSelectedAvatar.setNull();
53} 79}
54 80
55 81
@@ -67,6 +93,30 @@ BOOL LLFloaterMap::postBuild()
67 sendChildToBack(getDragHandle()); 93 sendChildToBack(getDragHandle());
68 sendChildToFront(getChild<LLButton>("llfloater_close_btn")); 94 sendChildToFront(getChild<LLButton>("llfloater_close_btn"));
69 setIsChrome(TRUE); 95 setIsChrome(TRUE);
96
97 mRadarList = getChild<LLScrollListCtrl>("RadarList");
98 childSetCommitCallback("RadarList", onList, this);
99 mRadarList->setDoubleClickCallback(onClickIM);
100
101 childSetFocusChangedCallback("near_me_range", onRangeChange, this);
102
103 childSetAction("im_btn", onClickIM, this);
104 childSetAction("profile_btn", onClickProfile, this);
105 childSetAction("offer_teleport_btn", onClickOfferTeleport, this);
106 childSetAction("track_btn", onClickTrack, this);
107 childSetAction("invite_btn", onClickInvite, this);
108 childSetAction("add_btn", onClickAddFriend, this);
109 childSetAction("freeze_btn", onClickFreeze, this);
110 childSetAction("eject_btn", onClickEject, this);
111 childSetAction("mute_btn", onClickMute, this);
112 childSetAction("unmute_btn", onClickUnmute, this);
113 childSetAction("ar_btn", onClickAR, this);
114 childSetAction("estate_eject_btn", onClickEjectFromEstate, this);
115
116 setDefaultBtn("im_btn");
117
118 populateRadar();
119
70 return TRUE; 120 return TRUE;
71} 121}
72 122
@@ -122,13 +172,597 @@ void LLFloaterMap::draw()
122 } 172 }
123} 173}
124 174
125
126// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c) 175// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c)
127void LLFloaterMap::open() 176void LLFloaterMap::open()
128{ 177{
129 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP)) 178 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP))
130 { 179 {
131 LLFloater::open(); 180 LLFloater::open();
181 LLFirstUse::useMiniMap();
132 } 182 }
133} 183}
134// [/RLVa:KB] 184// [/RLVa:KB]
185
186// TODO: make this detachable
187// TODO: make this expand/collapse
188
189/*
190* Imprudence Radar
191* @brief inworld radar integrated with the minimap
192* by McCabe Maxsted
193* Estate tab portion by Dale Glass
194*/
195
196//static
197void LLFloaterMap::updateRadar()
198{
199 LLFloaterMap::getInstance()->populateRadar();
200}
201
202void LLFloaterMap::populateRadar()
203{
204 if (!mUpdate || !LLFloaterMap::getInstance()->getVisible())
205 {
206 return;
207 }
208
209 if (visibleItemsSelected())
210 {
211 mSelectedAvatar = mRadarList->getFirstSelected()->getUUID();
212 }
213 else
214 {
215 mSelectedAvatar.setNull();
216 }
217
218 S32 scroll_pos = mRadarList->getScrollPos();
219
220 LLVector3d current_pos = gAgent.getPositionGlobal();
221
222 // find what avatars you can see
223 std::vector<LLUUID> avatar_ids;
224 std::vector<LLVector3d> positions;
225 LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, current_pos, gSavedSettings.getF32("NearMeRange"));
226
227 LLSD element;
228
229 mRadarList->deleteAllItems();
230
231 for (U32 i=0; i<avatar_ids.size(); i++)
232 {
233 if (avatar_ids[i] == gAgent.getID() ||
234 avatar_ids[i].isNull())
235 {
236 continue;
237 }
238
239 // Add to list only if we get their name
240 std::string fullname = getSelectedName(avatar_ids[i]);
241 if (!fullname.empty())
242 {
243 std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : "";
244 element["id"] = avatar_ids[i];
245 element["columns"][0]["column"] = "avatar_name";
246 element["columns"][0]["type"] = "text";
247 element["columns"][0]["value"] = fullname + " " + mute_text;
248 element["columns"][1]["column"] = "avatar_distance";
249 element["columns"][1]["type"] = "text";
250
251 LLVector3d temp = positions[i] - current_pos;
252 F32 distance = (F32)temp.magVec();
253 char dist[32];
254 snprintf(dist, sizeof(dist), "%.1f", distance);
255 element["columns"][1]["value"] = strcat(dist,"m");
256
257 mRadarList->addElement(element, ADD_BOTTOM);
258 }
259 }
260
261 mRadarList->sortItems();
262 mRadarList->setScrollPos(scroll_pos);
263 if (mSelectedAvatar.notNull())
264 {
265 mRadarList->selectByID(mSelectedAvatar);
266 }
267
268 // set count
269 std::stringstream avatar_count;
270 avatar_count.str("");
271 if (avatar_ids.empty())
272 {
273 mRadarList->addCommentText(getString("no_one_near"), ADD_TOP);
274 avatar_count << "0";
275 }
276 else
277 {
278 avatar_count << (int)avatar_ids.size();
279 }
280 childSetText("lblAvatarCount", avatar_count.str());
281
282 toggleButtons();
283
284 //llinfos << "mSelectedAvatar: " << mSelectedAvatar.asString() << llendl;
285}
286
287void LLFloaterMap::toggleButtons()
288{
289 BOOL enable = FALSE;
290 BOOL enable_unmute = FALSE;
291 BOOL enable_track = FALSE;
292 BOOL enable_estate = FALSE;
293 if (childHasFocus("RadarPanel"))
294 {
295 enable = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE;
296 enable_unmute = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE;
297 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar);
298 enable_estate = getKickable(mSelectedAvatar);
299 }
300 else
301 {
302 mRadarList->deselect();
303 }
304
305 childSetEnabled("im_btn", enable);
306 childSetEnabled("profile_btn", enable);
307 childSetEnabled("offer_teleport_btn", enable);
308 childSetEnabled("track_btn", enable_track);
309 childSetEnabled("invite_btn", enable);
310 childSetEnabled("add_btn", enable);
311 childSetEnabled("freeze_btn", enable_estate);
312 childSetEnabled("eject_btn", enable_estate);
313 childSetEnabled("mute_btn", enable);
314 childSetEnabled("unmute_btn", enable_unmute);
315 childSetEnabled("ar_btn", enable);
316 childSetEnabled("estate_eject_btn", enable_estate);
317}
318
319BOOL LLFloaterMap::getKickable(const LLUUID &agent_id)
320{
321 if (agent_id.notNull())
322 {
323 LLViewerObject* av_obj = gObjectList.findObject(agent_id);
324 if (av_obj != NULL && av_obj->isAvatar())
325 {
326 LLVOAvatar* avatar = (LLVOAvatar*)av_obj;
327 LLViewerRegion* region = avatar->getRegion();
328 if (region)
329 {
330 const LLVector3& pos = avatar->getPositionRegion();
331 const LLVector3d& pos_global = avatar->getPositionGlobal();
332 if (LLWorld::getInstance()->positionRegionValidGlobal(pos_global))
333 {
334 LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
335
336 BOOL new_value = (region != NULL);
337
338 if (new_value)
339 {
340 new_value = region->isOwnedSelf(pos);
341 if (!new_value || region->isOwnedGroup(pos))
342 {
343 new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
344 }
345 }
346 return new_value;
347 }
348 }
349 }
350 }
351 return FALSE;
352}
353
354// static
355void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data)
356{
357 LLFloaterMap* self = (LLFloaterMap*)user_data;
358 if (self)
359 {
360 self->toggleButtons();
361 }
362}
363
364BOOL LLFloaterMap::visibleItemsSelected() const
365{
366 if (mRadarList->getFirstSelectedIndex() >= 0)
367 {
368 return TRUE;
369 }
370 return FALSE;
371}
372
373// static
374void LLFloaterMap::onRangeChange(LLFocusableElement* focus, void* user_data)
375{
376 LLFloaterMap* self = (LLFloaterMap*)user_data;
377 if (self)
378 {
379 self->mUpdate = !(self->childHasFocus("near_me_range"));
380 }
381}
382
383// static
384LLUUID LLFloaterMap::getSelected()
385{
386 return LLFloaterMap::getInstance()->mSelectedAvatar;
387}
388
389//
390// Avatar tab
391//
392
393// static
394void LLFloaterMap::onClickIM(void* user_data)
395{
396 LLFloaterMap* self = (LLFloaterMap*) user_data;
397 LLScrollListItem *item = self->mRadarList->getFirstSelected();
398 if (item != NULL)
399 {
400 LLUUID agent_id = item->getUUID();
401 gIMMgr->setFloaterOpen(TRUE);
402 gIMMgr->addSession(getSelectedName(agent_id), IM_NOTHING_SPECIAL, agent_id);
403 }
404}
405
406// static
407void LLFloaterMap::onClickProfile(void* user_data)
408{
409 LLFloaterMap* self = (LLFloaterMap*) user_data;
410 LLScrollListItem *item = self->mRadarList->getFirstSelected();
411 if (item != NULL)
412 {
413 LLUUID agent_id = item->getUUID();
414 LLFloaterAvatarInfo::show(agent_id);
415 }
416}
417
418// static
419void LLFloaterMap::onClickOfferTeleport(void* user_data)
420{
421 LLFloaterMap* self = (LLFloaterMap*) user_data;
422 LLScrollListItem *item = self->mRadarList->getFirstSelected();
423 if (item != NULL)
424 {
425 LLUUID agent_id = item->getUUID();
426 handle_lure(agent_id);
427 }
428}
429
430// static
431void LLFloaterMap::onClickTrack(void* user_data)
432{
433 LLFloaterMap* self = (LLFloaterMap*) user_data;
434 LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus();
435
436 if (LLTracker::TRACKING_AVATAR == tracking_status)
437 {
438 LLTracker::stopTracking(NULL);
439 }
440 else
441 {
442 LLScrollListItem *item = self->mRadarList->getFirstSelected();
443 if (item != NULL)
444 {
445 LLUUID agent_id = item->getUUID();
446 LLTracker::trackAvatar(agent_id, getSelectedName(agent_id));
447 }
448 }
449}
450
451// static
452void LLFloaterMap::onClickInvite(void* user_data)
453{
454 LLFloaterMap* self = (LLFloaterMap*) user_data;
455 LLScrollListItem *item = self->mRadarList->getFirstSelected();
456 if (item != NULL)
457 {
458 LLUUID agent_id = item->getUUID();
459 LLFloaterGroupPicker* widget;
460 widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
461 if (widget)
462 {
463 widget->center();
464 widget->setPowersMask(GP_MEMBER_INVITE);
465 widget->setSelectCallback(callback_invite_to_group, (void *)&agent_id);
466 }
467 }
468}
469
470// static
471void LLFloaterMap::callback_invite_to_group(LLUUID group_id, void *user_data)
472{
473 std::vector<LLUUID> agent_ids;
474 agent_ids.push_back(*(LLUUID *)user_data);
475
476 LLFloaterGroupInvite::showForGroup(group_id, &agent_ids);
477}
478
479// static
480void LLFloaterMap::onClickAddFriend(void* user_data)
481{
482 LLFloaterMap* self = (LLFloaterMap*) user_data;
483 LLScrollListItem *item = self->mRadarList->getFirstSelected();
484 if (item != NULL)
485 {
486 LLUUID agent_id = item->getUUID();
487 LLPanelFriends::requestFriendshipDialog(agent_id, getSelectedName(agent_id));
488 }
489}
490
491//
492// Estate tab
493//
494
495//static
496std::string LLFloaterMap::getSelectedName(const LLUUID &agent_id)
497{
498 std::string agent_name;
499 if(gCacheName->getFullName(agent_id, agent_name) && agent_name != " ")
500 {
501 return agent_name;
502 }
503 return LLStringUtil::null;
504}
505
506//static
507void LLFloaterMap::callbackFreeze(S32 option, void *user_data)
508{
509 LLFloaterMap *self = (LLFloaterMap*)user_data;
510
511 if ( option == 0 )
512 {
513 sendFreeze(self->mSelectedAvatar, true);
514 }
515 else if ( option == 1 )
516 {
517 sendFreeze(self->mSelectedAvatar, false);
518 }
519}
520
521//static
522void LLFloaterMap::callbackEject(S32 option, void *user_data)
523{
524 LLFloaterMap *self = (LLFloaterMap*)user_data;
525
526 if ( option == 0 )
527 {
528 sendEject(self->mSelectedAvatar, false);
529 }
530 else if ( option == 1 )
531 {
532 sendEject(self->mSelectedAvatar, true);
533 }
534}
535
536//static
537void LLFloaterMap::callbackEjectFromEstate(S32 option, void *user_data)
538{
539 LLFloaterMap *self = (LLFloaterMap*)user_data;
540
541 if ( option == 0 )
542 {
543 cmdEstateEject(self->mSelectedAvatar);
544 }
545 else if ( option == 1 )
546 {
547 cmdEstateBan(self->mSelectedAvatar);
548 }
549}
550
551void LLFloaterMap::onClickFreeze(void *user_data)
552{
553 LLFloaterMap *self = (LLFloaterMap*)user_data;
554 LLStringUtil::format_map_t args;
555 LLSD payload;
556 args["[AVATAR_NAME]"] = getSelectedName(self->mSelectedAvatar);
557 gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data);
558}
559
560//static
561void LLFloaterMap::onClickEject(void *user_data)
562{
563 LLFloaterMap *self = (LLFloaterMap*)user_data;
564 LLStringUtil::format_map_t args;
565 LLSD payload;
566 args["AVATAR_NAME"] = getSelectedName(self->mSelectedAvatar);
567 gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data);
568}
569
570//static
571void LLFloaterMap::onClickMute(void *user_data)
572{
573 LLFloaterMap *self = (LLFloaterMap*)user_data;
574 LLScrollListItem *item = self->mRadarList->getFirstSelected();
575 if (item != NULL)
576 {
577 LLUUID agent_id = item->getUUID();
578 std::string agent_name = getSelectedName(agent_id);
579 if (LLMuteList::getInstance()->isMuted(agent_id))
580 {
581 //LLMute mute(agent_id, agent_name, LLMute::AGENT);
582 //LLMuteList::getInstance()->remove(mute);
583 //LLFloaterMute::getInstance()->selectMute(agent_id);
584 }
585 else
586 {
587 LLMute mute(agent_id, agent_name, LLMute::AGENT);
588 LLMuteList::getInstance()->add(mute);
589 }
590 }
591}
592
593//static
594void LLFloaterMap::onClickUnmute(void *user_data)
595{
596 LLFloaterMap *self = (LLFloaterMap*)user_data;
597 LLScrollListItem *item = self->mRadarList->getFirstSelected();
598 if (item != NULL)
599 {
600 LLUUID agent_id = item->getUUID();
601 std::string agent_name = getSelectedName(agent_id);
602 if (LLMuteList::getInstance()->isMuted(agent_id))
603 {
604 LLMute mute(agent_id, agent_name, LLMute::AGENT);
605 LLMuteList::getInstance()->remove(mute);
606 //LLFloaterMute::getInstance()->selectMute(agent_id);
607 }
608 else
609 {
610 //LLMute mute(agent_id, agent_name, LLMute::AGENT);
611 //LLMuteList::getInstance()->add(mute);
612 }
613 }
614}
615
616//static
617void LLFloaterMap::onClickEjectFromEstate(void *user_data)
618{
619 LLFloaterMap *self = (LLFloaterMap*)user_data;
620 LLStringUtil::format_map_t args;
621 LLSD payload;
622 args["EVIL_USER"] = getSelectedName(self->mSelectedAvatar);
623 gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data);
624}
625
626//static
627void LLFloaterMap::onClickAR(void *user_data)
628{
629 LLFloaterMap *self = (LLFloaterMap*)user_data;
630 LLUUID agent_id = self->mSelectedAvatar;
631
632 if (agent_id.notNull())
633 {
634 LLFloaterReporter::showFromObject(agent_id);
635 }
636}
637
638// static
639void LLFloaterMap::cmdEstateEject(const LLUUID &avatar)
640{
641 sendEstateMessage("teleporthomeuser", avatar);
642}
643
644// static
645void LLFloaterMap::cmdEstateBan(const LLUUID &avatar)
646{
647 sendEstateMessage("teleporthomeuser", avatar); // Kick first, just to be sure
648 sendEstateBan(avatar);
649}
650
651// static
652void LLFloaterMap::sendFreeze(const LLUUID& avatar_id, bool freeze)
653{
654 U32 flags = 0x0;
655 if (!freeze)
656 {
657 // unfreeze
658 flags |= 0x1;
659 }
660
661 LLMessageSystem* msg = gMessageSystem;
662 LLViewerObject* avatar = gObjectList.findObject(avatar_id);
663
664 if (avatar)
665 {
666 msg->newMessage("FreezeUser");
667 msg->nextBlock("AgentData");
668 msg->addUUID("AgentID", gAgent.getID());
669 msg->addUUID("SessionID", gAgent.getSessionID());
670 msg->nextBlock("Data");
671 msg->addUUID("TargetID", avatar_id );
672 msg->addU32("Flags", flags );
673 msg->sendReliable( avatar->getRegion()->getHost() );
674 }
675}
676
677// static
678void LLFloaterMap::sendEject(const LLUUID& avatar_id, bool ban)
679{
680 LLMessageSystem* msg = gMessageSystem;
681 LLViewerObject* avatar = gObjectList.findObject(avatar_id);
682
683 if (avatar)
684 {
685 U32 flags = 0x0;
686 if ( ban )
687 {
688 // eject and add to ban list
689 flags |= 0x1;
690 }
691
692 msg->newMessage("EjectUser");
693 msg->nextBlock("AgentData");
694 msg->addUUID("AgentID", gAgent.getID() );
695 msg->addUUID("SessionID", gAgent.getSessionID() );
696 msg->nextBlock("Data");
697 msg->addUUID("TargetID", avatar_id );
698 msg->addU32("Flags", flags );
699 msg->sendReliable( avatar->getRegion()->getHost() );
700 }
701}
702
703// static
704void LLFloaterMap::sendEstateMessage(const char* request, const LLUUID &target)
705{
706
707 LLMessageSystem* msg = gMessageSystem;
708 LLUUID invoice;
709
710 // This seems to provide an ID so that the sim can say which request it's
711 // replying to. I think this can be ignored for now.
712 invoice.generate();
713
714 llinfos << "Sending estate request '" << request << "'" << llendl;
715 msg->newMessage("EstateOwnerMessage");
716 msg->nextBlockFast(_PREHASH_AgentData);
717 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
718 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
719 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
720 msg->nextBlock("MethodData");
721 msg->addString("Method", request);
722 msg->addUUID("Invoice", invoice);
723
724 // Agent id
725 msg->nextBlock("ParamList");
726 msg->addString("Parameter", gAgent.getID().asString().c_str());
727
728 // Target
729 msg->nextBlock("ParamList");
730 msg->addString("Parameter", target.asString().c_str());
731
732 msg->sendReliable(gAgent.getRegion()->getHost());
733}
734
735// static
736void LLFloaterMap::sendEstateBan(const LLUUID& agent)
737{
738 LLUUID invoice;
739 U32 flags = ESTATE_ACCESS_BANNED_AGENT_ADD;
740
741 invoice.generate();
742
743 LLMessageSystem* msg = gMessageSystem;
744 msg->newMessage("EstateOwnerMessage");
745 msg->nextBlockFast(_PREHASH_AgentData);
746 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
747 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
748 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
749
750 msg->nextBlock("MethodData");
751 msg->addString("Method", "estateaccessdelta");
752 msg->addUUID("Invoice", invoice);
753
754 char buf[MAX_STRING]; /* Flawfinder: ignore*/
755 gAgent.getID().toString(buf);
756 msg->nextBlock("ParamList");
757 msg->addString("Parameter", buf);
758
759 snprintf(buf, MAX_STRING, "%u", flags); /* Flawfinder: ignore */
760 msg->nextBlock("ParamList");
761 msg->addString("Parameter", buf);
762
763 agent.toString(buf);
764 msg->nextBlock("ParamList");
765 msg->addString("Parameter", buf);
766
767 gAgent.sendReliableMessage();
768}
diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h
index 857b1ed..81e4159 100644
--- a/linden/indra/newview/llfloatermap.h
+++ b/linden/indra/newview/llfloatermap.h
@@ -33,6 +33,7 @@
33#define LL_LLFLOATERMAP_H 33#define LL_LLFLOATERMAP_H
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36#include "llscrolllistctrl.h"
36 37
37class LLNetMap; 38class LLNetMap;
38 39
@@ -46,6 +47,9 @@ public:
46 47
47 static void* createPanelMiniMap(void* data); 48 static void* createPanelMiniMap(void* data);
48 49
50 static void updateRadar();
51 static LLUUID getSelected();
52
49 BOOL postBuild(); 53 BOOL postBuild();
50 54
51 /*virtual*/ void draw(); 55 /*virtual*/ void draw();
@@ -59,7 +63,46 @@ public:
59 63
60private: 64private:
61 LLFloaterMap(const LLSD& key = LLSD()); 65 LLFloaterMap(const LLSD& key = LLSD());
62 LLNetMap* mPanelMap; 66
67 LLNetMap* mPanelMap;
68 LLScrollListCtrl* mRadarList;
69 LLUUID mSelectedAvatar;
70 bool mUpdate;
71
72 static void onList(LLUICtrl* ctrl, void* user_data);
73 static void onRangeChange(LLFocusableElement* focus, void* user_data);
74 BOOL visibleItemsSelected() const;
75 BOOL getKickable(const LLUUID &agent_id);
76 void toggleButtons();
77 void populateRadar();
78
79 static void onClickProfile(void* user_data);
80 static void onClickIM(void* user_data);
81 static void onClickAddFriend(void* user_data);
82 static void onClickOfferTeleport(void* user_data);
83 static void onClickTrack(void* user_data);
84 static void onClickInvite(void* user_data);
85 static void callback_invite_to_group(LLUUID group_id, void *user_data);
86
87 static std::string getSelectedName(const LLUUID &agent_id);
88 static void onClickFreeze(void *user_data);
89 static void onClickEject(void *user_data);
90 static void onClickMute(void *user_data);
91 static void onClickUnmute(void *user_data);
92 static void onClickAR(void *user_data);
93 static void onClickEjectFromEstate(void *user_data);
94
95 static void callbackFreeze(S32 option, void *user_data);
96 static void callbackEject(S32 option, void *user_data);
97 static void callbackAR(void *user_data);
98 static void callbackEjectFromEstate(S32 option, void *user_data);
99
100 static void sendFreeze(const LLUUID &avatar, bool);
101 static void sendEject(const LLUUID &avatar, bool);
102 static void cmdEstateEject(const LLUUID &avatar);
103 static void cmdEstateBan(const LLUUID &avatar);
104 static void sendEstateBan(const LLUUID& agent);
105 static void sendEstateMessage(const char* request, const LLUUID &target);
63}; 106};
64 107
65#endif // LL_LLFLOATERMAP_H 108#endif // LL_LLFLOATERMAP_H
diff --git a/linden/indra/newview/llfloaterobjectiminfo.cpp b/linden/indra/newview/llfloaterobjectiminfo.cpp
new file mode 100644
index 0000000..6cbc4e2
--- /dev/null
+++ b/linden/indra/newview/llfloaterobjectiminfo.cpp
@@ -0,0 +1,204 @@
1/**
2 * @file llfloaterobjectiminfo.cpp
3 * @brief A floater with information about an object that sent an IM.
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "llviewerprecompiledheaders.h"
33
34#include "llfloaterobjectiminfo.h"
35
36#include "llagentdata.h"
37#include "llcachename.h"
38#include "llcommandhandler.h"
39#include "llfloater.h"
40#include "llfloateravatarinfo.h"
41#include "llfloatergroupinfo.h"
42#include "llfloatermute.h"
43#include "llmutelist.h"
44#include "llsdutil.h"
45#include "lluictrlfactory.h"
46#include "llurldispatcher.h"
47#include "llviewercontrol.h"
48
49////////////////////////////////////////////////////////////////////////////
50// LLFloaterObjectIMInfo
51class LLFloaterObjectIMInfo : public LLFloater, public LLFloaterSingleton<LLFloaterObjectIMInfo>
52{
53public:
54 LLFloaterObjectIMInfo(const LLSD& sd);
55 virtual ~LLFloaterObjectIMInfo() { };
56
57 BOOL postBuild(void);
58
59 void update(const LLUUID& id, const std::string& name, const std::string& slurl, const LLUUID& owner, bool owner_is_group);
60
61 // UI Handlers
62 static void onClickMap(void* data);
63 static void onClickOwner(void* data);
64 static void onClickMute(void* data);
65
66 static void nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data);
67
68private:
69 LLUUID mObjectID;
70 std::string mObjectName;
71 std::string mSlurl;
72 LLUUID mOwnerID;
73 std::string mOwnerName;
74 bool mOwnerIsGroup;
75};
76
77LLFloaterObjectIMInfo::LLFloaterObjectIMInfo(const LLSD& seed)
78: mObjectID(), mObjectName(), mSlurl(), mOwnerID(), mOwnerName(), mOwnerIsGroup(false)
79{
80 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_object_im_info.xml");
81
82 if (getRect().mLeft == 0
83 && getRect().mBottom == 0)
84 {
85 center();
86 }
87}
88
89BOOL LLFloaterObjectIMInfo::postBuild(void)
90{
91 childSetAction("Mute",onClickMute,this);
92 childSetActionTextbox("OwnerName",onClickOwner, this);
93 childSetActionTextbox("Slurl",onClickMap, this);
94
95 return true;
96}
97
98void LLFloaterObjectIMInfo::update(const LLUUID& object_id, const std::string& name, const std::string& slurl, const LLUUID& owner_id, bool owner_is_group)
99{
100 // When talking to an old region we won't have a slurl.
101 // The object id isn't really the object id either but we don't use it so who cares.
102 bool have_slurl = !slurl.empty();
103 childSetVisible("Unknown_Slurl",!have_slurl);
104 childSetVisible("Slurl",have_slurl);
105
106 childSetText("ObjectName",name);
107 childSetText("Slurl",slurl);
108 childSetText("OwnerName",std::string(""));
109
110 bool my_object = (owner_id == gAgentID);
111 childSetEnabled("Mute",!my_object);
112
113 mObjectID = object_id;
114 mObjectName = name;
115 mSlurl = slurl;
116 mOwnerID = owner_id;
117 mOwnerIsGroup = owner_is_group;
118
119 if (gCacheName) gCacheName->get(owner_id,owner_is_group,nameCallback,this);
120}
121
122//static
123void LLFloaterObjectIMInfo::onClickMap(void* data)
124{
125 LLFloaterObjectIMInfo* self = (LLFloaterObjectIMInfo*)data;
126
127 std::ostringstream link;
128 link << "secondlife://" << self->mSlurl;
129 LLURLDispatcher::dispatch(link.str(),false);
130}
131
132//static
133void LLFloaterObjectIMInfo::onClickOwner(void* data)
134{
135 LLFloaterObjectIMInfo* self = (LLFloaterObjectIMInfo*)data;
136 if (self->mOwnerIsGroup)
137 {
138 LLFloaterGroupInfo::showFromUUID(self->mOwnerID);
139 }
140 else
141 {
142 LLFloaterAvatarInfo::showFromObject(self->mOwnerID);
143 }
144}
145
146//static
147void LLFloaterObjectIMInfo::onClickMute(void* data)
148{
149 LLFloaterObjectIMInfo* self = (LLFloaterObjectIMInfo*)data;
150
151 LLMute::EType mute_type = (self->mOwnerIsGroup) ? LLMute::GROUP : LLMute::AGENT;
152 LLMute mute(self->mOwnerID, self->mOwnerName, mute_type);
153 LLMuteList::getInstance()->add(mute);
154 LLFloaterMute::showInstance();
155 self->close();
156}
157
158//static
159void LLFloaterObjectIMInfo::nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data)
160{
161 LLFloaterObjectIMInfo* self = (LLFloaterObjectIMInfo*)data;
162 self->mOwnerName = first;
163 if (!last.empty())
164 {
165 self->mOwnerName += " " + last;
166 }
167
168 self->childSetText("OwnerName",self->mOwnerName);
169}
170
171////////////////////////////////////////////////////////////////////////////
172// LLObjectIMInfo
173void LLObjectIMInfo::show(const LLUUID &object_id, const std::string &name, const std::string &location, const LLUUID &owner_id, bool owner_is_group)
174{
175 LLFloaterObjectIMInfo* im_info_floater = LLFloaterObjectIMInfo::showInstance();
176 im_info_floater->update(object_id,name,location,owner_id,owner_is_group);
177}
178
179////////////////////////////////////////////////////////////////////////////
180// LLObjectIMInfoHandler
181class LLObjectIMInfoHandler : public LLCommandHandler
182{
183public:
184 LLObjectIMInfoHandler() : LLCommandHandler("objectim", false) { }
185
186 bool handle(const LLSD& tokens, const LLSD& query_map);
187};
188
189// Creating the object registers with the dispatcher.
190LLObjectIMInfoHandler gObjectIMHandler;
191
192// ex. secondlife:///app/objectim/9426adfc-9c17-8765-5f09-fdf19957d003?owner=a112d245-9095-4e9c-ace4-ffa31717f934&groupowned=true&slurl=ahern/123/123/123&name=Object
193bool LLObjectIMInfoHandler::handle(const LLSD &tokens, const LLSD &query_map)
194{
195 LLUUID task_id = tokens[0].asUUID();
196 std::string name = query_map["name"].asString();
197 std::string slurl = query_map["slurl"].asString();
198 LLUUID owner = query_map["owner"].asUUID();
199 bool group_owned = query_map.has("groupowned");
200
201 LLObjectIMInfo::show(task_id,name,slurl,owner,group_owned);
202
203 return true;
204}
diff --git a/linden/indra/newview/llfloaterobjectiminfo.h b/linden/indra/newview/llfloaterobjectiminfo.h
new file mode 100644
index 0000000..0564c3e
--- /dev/null
+++ b/linden/indra/newview/llfloaterobjectiminfo.h
@@ -0,0 +1,45 @@
1/**
2 * @file llfloaterobjectiminfo.h
3 * @brief Shows a dialog with information about an object.
4 *
5 * $LicenseInfo:firstyear=2006&license=viewergpl$
6 *
7 * Copyright (c) 2006-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLFLOATEROBJECTIMINFO_H
33#define LL_LLFLOATEROBJECTIMINFO_H
34
35namespace LLObjectIMInfo
36{
37 // Show an LLFloaterObjectIMInfo for this object.
38 static void show(const LLUUID& object_id,
39 const std::string& name,
40 const std::string& location,
41 const LLUUID& owner_id,
42 bool owner_is_group);
43};
44
45#endif // LL_LLFLOATERURLDISPLAY_H
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index b63138f..d2a8040 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -693,7 +693,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
693 LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && 693 LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() &&
694 !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) 694 !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment())
695 { 695 {
696 if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 696 if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() > 0 &&
697 LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() !=
697 LLSelectMgr::getInstance()->getSelection()->getObjectCount()) 698 LLSelectMgr::getInstance()->getSelection()->getObjectCount())
698 { 699 {
699 can_unlink = true; 700 can_unlink = true;
diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp
index 4b0dd04..9936f3b 100644
--- a/linden/indra/newview/llfloaterwindlight.cpp
+++ b/linden/indra/newview/llfloaterwindlight.cpp
@@ -60,6 +60,7 @@
60 60
61#undef max 61#undef max
62 62
63
63LLFloaterWindLight* LLFloaterWindLight::sWindLight = NULL; 64LLFloaterWindLight* LLFloaterWindLight::sWindLight = NULL;
64 65
65std::set<std::string> LLFloaterWindLight::sDefaultPresets; 66std::set<std::string> LLFloaterWindLight::sDefaultPresets;
@@ -227,6 +228,10 @@ void LLFloaterWindLight::initCallbacks(void) {
227 // Dome 228 // Dome
228 childSetCommitCallback("WLGamma", onFloatControlMoved, &param_mgr->mWLGamma); 229 childSetCommitCallback("WLGamma", onFloatControlMoved, &param_mgr->mWLGamma);
229 childSetCommitCallback("WLStarAlpha", onStarAlphaMoved, NULL); 230 childSetCommitCallback("WLStarAlpha", onStarAlphaMoved, NULL);
231
232 // next/prev buttons
233 childSetAction("next", onClickNext, this);
234 childSetAction("prev", onClickPrev, this);
230} 235}
231 236
232void LLFloaterWindLight::onClickHelp(void* data) 237void LLFloaterWindLight::onClickHelp(void* data)
@@ -1001,3 +1006,51 @@ void LLFloaterWindLight::deactivateAnimator()
1001 LLWLParamManager::instance()->mAnimator.mIsRunning = false; 1006 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
1002 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; 1007 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
1003} 1008}
1009
1010void LLFloaterWindLight::onClickNext(void* user_data)
1011{
1012 LLWLParamManager * param_mgr = LLWLParamManager::instance();
1013 LLWLParamSet& currentParams = param_mgr->mCurParams;
1014
1015 // find place of current param
1016 std::map<std::string, LLWLParamSet>::iterator mIt =
1017 param_mgr->mParamList.find(currentParams.mName);
1018
1019 // if at the end, loop
1020 std::map<std::string, LLWLParamSet>::iterator last = param_mgr->mParamList.end(); --last;
1021 if(mIt == last)
1022 {
1023 mIt = param_mgr->mParamList.begin();
1024 }
1025 else
1026 {
1027 mIt++;
1028 }
1029 param_mgr->mAnimator.mIsRunning = false;
1030 param_mgr->mAnimator.mUseLindenTime = false;
1031 param_mgr->loadPreset(mIt->first, true);
1032}
1033
1034void LLFloaterWindLight::onClickPrev(void* user_data)
1035{
1036 LLWLParamManager * param_mgr = LLWLParamManager::instance();
1037 LLWLParamSet& currentParams = param_mgr->mCurParams;
1038
1039 // find place of current param
1040 std::map<std::string, LLWLParamSet>::iterator mIt =
1041 param_mgr->mParamList.find(currentParams.mName);
1042
1043 // if at the beginning, loop
1044 if(mIt == param_mgr->mParamList.begin())
1045 {
1046 std::map<std::string, LLWLParamSet>::iterator last = param_mgr->mParamList.end(); --last;
1047 mIt = last;
1048 }
1049 else
1050 {
1051 mIt--;
1052 }
1053 param_mgr->mAnimator.mIsRunning = false;
1054 param_mgr->mAnimator.mUseLindenTime = false;
1055 param_mgr->loadPreset(mIt->first, true);
1056}
diff --git a/linden/indra/newview/llfloaterwindlight.h b/linden/indra/newview/llfloaterwindlight.h
index 3e5556b..70e76c5 100644
--- a/linden/indra/newview/llfloaterwindlight.h
+++ b/linden/indra/newview/llfloaterwindlight.h
@@ -136,6 +136,9 @@ private:
136 static LLFloaterWindLight* sWindLight; 136 static LLFloaterWindLight* sWindLight;
137 137
138 static std::set<std::string> sDefaultPresets; 138 static std::set<std::string> sDefaultPresets;
139
140 static void onClickNext(void* user_data);
141 static void onClickPrev(void* user_data);
139}; 142};
140 143
141 144
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 70c4ead..5407f06 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -281,7 +281,28 @@ void LLFolderViewItem::refreshFromListener()
281{ 281{
282 if(mListener) 282 if(mListener)
283 { 283 {
284 //Super crazy hack to build the creator search label - RK
285 LLInventoryItem* item = gInventory.getItem(mListener->getUUID());
286 std::string creator_name;
287 if(item)
288 {
289 if(item->getCreatorUUID().notNull())
290 {
291 gCacheName->getFullName(item->getCreatorUUID(), creator_name);
292 }
293 }
294 mLabelCreator = creator_name;
295 /*if(creator_name == "(Loading...)")
296 mLabelCreator = "";
297 else
298 mLabelCreator = creator_name;*/
299
300 //Label for name search
284 mLabel = mListener->getDisplayName(); 301 mLabel = mListener->getDisplayName();
302
303 //Build label for combined search - RK
304 mLabelAll = mLabel + " " + mLabelCreator;
305
285 setIcon(mListener->getIcon()); 306 setIcon(mListener->getIcon());
286 time_t creation_date = mListener->getCreationDate(); 307 time_t creation_date = mListener->getCreationDate();
287 if (mCreationDate != creation_date) 308 if (mCreationDate != creation_date)
@@ -299,12 +320,26 @@ void LLFolderViewItem::refresh()
299 refreshFromListener(); 320 refreshFromListener();
300 321
301 std::string searchable_label(mLabel); 322 std::string searchable_label(mLabel);
323 std::string searchable_label_creator(mLabelCreator);
324 std::string searchable_label_all(mLabelAll);
325
326 //add the (no modify), (no transfer) etc stuff to each label.
302 searchable_label.append(mLabelSuffix); 327 searchable_label.append(mLabelSuffix);
328 searchable_label_creator.append(mLabelSuffix);
329 searchable_label_all.append(mLabelSuffix);
330
331 //all labels need to be uppercase.
303 LLStringUtil::toUpper(searchable_label); 332 LLStringUtil::toUpper(searchable_label);
333 LLStringUtil::toUpper(searchable_label_creator);
334 LLStringUtil::toUpper(searchable_label_all);
304 335
305 if (mSearchableLabel.compare(searchable_label)) 336 if (mSearchableLabel.compare(searchable_label) ||
337 mSearchableLabelCreator.compare(searchable_label_creator))
306 { 338 {
307 mSearchableLabel.assign(searchable_label); 339 mSearchableLabel.assign(searchable_label);
340 mSearchableLabelCreator.assign(searchable_label_creator);
341 mSearchableLabelAll.assign(searchable_label_all);
342
308 dirtyFilter(); 343 dirtyFilter();
309 // some part of label has changed, so overall width has potentially changed 344 // some part of label has changed, so overall width has potentially changed
310 if (mParentFolder) 345 if (mParentFolder)
@@ -588,7 +623,13 @@ void LLFolderViewItem::rename(const std::string& new_name)
588 623
589const std::string& LLFolderViewItem::getSearchableLabel() const 624const std::string& LLFolderViewItem::getSearchableLabel() const
590{ 625{
591 return mSearchableLabel; 626 U32 search_type = gSavedSettings.getU32("InventorySearchType");
627 if(search_type == 4)
628 return mSearchableLabelAll;
629 else if(search_type == 1)
630 return mSearchableLabelCreator;
631 else
632 return mSearchableLabel;
592} 633}
593 634
594const std::string& LLFolderViewItem::getName( void ) const 635const std::string& LLFolderViewItem::getName( void ) const
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index 3c350d4..25b4362 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -338,6 +338,11 @@ protected:
338 338
339 std::string mLabel; 339 std::string mLabel;
340 std::string mSearchableLabel; 340 std::string mSearchableLabel;
341 std::string mLabelAll;
342 std::string mSearchableLabelAll;
343 std::string mLabelCreator;
344 std::string mSearchableLabelCreator;
345
341 std::string mType; 346 std::string mType;
342 S32 mLabelWidth; 347 S32 mLabelWidth;
343 U32 mCreationDate; 348 U32 mCreationDate;
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index 37897eb..2f8e838 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -220,8 +220,8 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
220 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig")); 220 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig"));
221 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif")); 221 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif"));
222 222
223 text->appendStyledText(subject,false,false,&headerstyle); 223 text->appendStyledText(subject,false,false,headerstyle);
224 text->appendStyledText(time_buf,false,false,&datestyle); 224 text->appendStyledText(time_buf,false,false,datestyle);
225 // Sadly, our LLTextEditor can't handle both styled and unstyled text 225 // Sadly, our LLTextEditor can't handle both styled and unstyled text
226 // at the same time. Hence this space must be styled. JC 226 // at the same time. Hence this space must be styled. JC
227 text->appendColoredText(std::string(" "),false,false,LLColor4::grey4); 227 text->appendColoredText(std::string(" "),false,false,LLColor4::grey4);
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 7e4ed19..014c050 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -1543,8 +1543,8 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1543 else 1543 else
1544 { 1544 {
1545 // Convert the name to a hotlink and add to message. 1545 // Convert the name to a hotlink and add to message.
1546 const LLStyleSP &source_style = LLStyleMap::instance().lookup(source); 1546 const LLStyleSP &source_style = LLStyleMap::instance().lookupAgent(source);
1547 mHistoryEditor->appendStyledText(name,false,prepend_newline,&source_style); 1547 mHistoryEditor->appendStyledText(name,false,prepend_newline,source_style);
1548 } 1548 }
1549 prepend_newline = false; 1549 prepend_newline = false;
1550 } 1550 }
diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp
index 0bf3ab2..b598c83 100644
--- a/linden/indra/newview/llinventoryactions.cpp
+++ b/linden/indra/newview/llinventoryactions.cpp
@@ -85,6 +85,9 @@
85#include "lluictrlfactory.h" 85#include "lluictrlfactory.h"
86#include "llselectmgr.h" 86#include "llselectmgr.h"
87 87
88// Defined in llinventorybridge.cpp
89void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove);
90
88const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not) 91const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not)
89const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not) 92const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
90const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not) 93const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
@@ -115,6 +118,12 @@ bool doToSelected(LLFolderView* folder, std::string action)
115 std::set<LLUUID> selected_items; 118 std::set<LLUUID> selected_items;
116 folder->getSelectionList(selected_items); 119 folder->getSelectionList(selected_items);
117 120
121 if ( ("attach" == action) && (selected_items.size() > 1) )
122 {
123 wear_attachments_on_avatar(selected_items, FALSE);
124 return true;
125 }
126
118 LLMultiPreview* multi_previewp = NULL; 127 LLMultiPreview* multi_previewp = NULL;
119 LLMultiProperties* multi_propertiesp = NULL; 128 LLMultiProperties* multi_propertiesp = NULL;
120 129
@@ -464,6 +473,40 @@ class LLDoCreateFloater : public inventory_listener_t
464 } 473 }
465}; 474};
466 475
476//Handles the search type buttons
477class SetSearchType : public inventory_listener_t
478{
479 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
480 {
481 std::string search_type = userdata.asString();
482 if(search_type == "name")
483 {
484 gSavedSettings.setU32("InventorySearchType", 0);
485
486 mPtr->getControl("Inventory.SearchByName")->setValue(TRUE);
487 mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE);
488 mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE);
489 }
490 else if(search_type == "creator")
491 {
492 gSavedSettings.setU32("InventorySearchType", 1);
493
494 mPtr->getControl("Inventory.SearchByName")->setValue(FALSE);
495 mPtr->getControl("Inventory.SearchByCreator")->setValue(TRUE);
496 mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE);
497 }
498 else if(search_type == "all")
499 {
500 gSavedSettings.setU32("InventorySearchType", 4);
501
502 mPtr->getControl("Inventory.SearchByName")->setValue(FALSE);
503 mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE);
504 mPtr->getControl("Inventory.SearchByAll")->setValue(TRUE);
505 }
506 return true;
507 }
508};
509
467class LLSetSortBy : public inventory_listener_t 510class LLSetSortBy : public inventory_listener_t
468{ 511{
469 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 512 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -711,6 +754,8 @@ void init_inventory_actions(LLInventoryView *floater)
711 (new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters"); 754 (new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters");
712 (new LLResetFilter())->registerListener(floater, "Inventory.ResetFilter"); 755 (new LLResetFilter())->registerListener(floater, "Inventory.ResetFilter");
713 (new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy"); 756 (new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy");
757
758 (new SetSearchType())->registerListener(floater, "Inventory.SetSearchBy");
714} 759}
715 760
716void init_inventory_panel_actions(LLInventoryPanel *panel) 761void init_inventory_panel_actions(LLInventoryPanel *panel)
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index dc1e0a1..19a5ade 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -111,6 +111,8 @@ void remove_inventory_category_from_avatar(LLInventoryCategory* category);
111void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata); 111void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata);
112void move_task_inventory_callback(S32 option, void* user_data); 112void move_task_inventory_callback(S32 option, void* user_data);
113void confirm_replace_attachment_rez(S32 option, void* user_data); 113void confirm_replace_attachment_rez(S32 option, void* user_data);
114void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove);
115void wear_attachments_on_avatar(const LLInventoryModel::item_array_t& items, BOOL remove);
114 116
115std::string ICON_NAME[ICON_NAME_COUNT] = 117std::string ICON_NAME[ICON_NAME_COUNT] =
116{ 118{
@@ -3740,6 +3742,31 @@ private:
3740 bool mAppend; 3742 bool mAppend;
3741}; 3743};
3742 3744
3745class LLWearAttachmentsCallback : public LLInventoryCallback
3746{
3747public:
3748 LLWearAttachmentsCallback(bool append) : mAppend(append) {}
3749 void fire(const LLUUID& item_id)
3750 {
3751 mItemIDs.insert(item_id);
3752 }
3753protected:
3754 ~LLWearAttachmentsCallback()
3755 {
3756 if( LLInventoryCallbackManager::is_instantiated() )
3757 {
3758 wear_attachments_on_avatar(mItemIDs, mAppend);
3759 }
3760 else
3761 {
3762 llwarns << "Dropping unhandled LLWearAttachments" << llendl;
3763 }
3764 }
3765private:
3766 std::set<LLUUID> mItemIDs;
3767 bool mAppend;
3768};
3769
3743void LLOutfitObserver::done() 3770void LLOutfitObserver::done()
3744{ 3771{
3745 // We now have an outfit ready to be copied to agent inventory. Do 3772 // We now have an outfit ready to be copied to agent inventory. Do
@@ -4109,67 +4136,7 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata )
4109 if( obj_count > 0 ) 4136 if( obj_count > 0 )
4110 { 4137 {
4111 // We've found some attachements. Add these. 4138 // We've found some attachements. Add these.
4112 4139 wear_attachments_on_avatar(obj_item_array, !wear_info->mAppend);
4113 LLVOAvatar* avatar = gAgent.getAvatarObject();
4114 if( avatar )
4115 {
4116 // Build a compound message to send all the objects that need to be rezzed.
4117
4118 // Limit number of packets to send
4119 const S32 MAX_PACKETS_TO_SEND = 10;
4120 const S32 OBJECTS_PER_PACKET = 4;
4121 const S32 MAX_OBJECTS_TO_SEND = MAX_PACKETS_TO_SEND * OBJECTS_PER_PACKET;
4122 if( obj_count > MAX_OBJECTS_TO_SEND )
4123 {
4124 obj_count = MAX_OBJECTS_TO_SEND;
4125 }
4126
4127 // Create an id to keep the parts of the compound message together
4128 LLUUID compound_msg_id;
4129 compound_msg_id.generate();
4130 LLMessageSystem* msg = gMessageSystem;
4131
4132 for(i = 0; i < obj_count; ++i)
4133 {
4134 if( 0 == (i % OBJECTS_PER_PACKET) )
4135 {
4136 // Start a new message chunk
4137 msg->newMessageFast(_PREHASH_RezMultipleAttachmentsFromInv);
4138 msg->nextBlockFast(_PREHASH_AgentData);
4139 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
4140 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
4141 msg->nextBlockFast(_PREHASH_HeaderData);
4142 msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id );
4143 msg->addU8Fast(_PREHASH_TotalObjects, obj_count );
4144// msg->addBOOLFast(_PREHASH_FirstDetachAll, !wear_info->mAppend );
4145// [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a
4146 // This really should just *always* be FALSE since TRUE can result in loss of the current asset state
4147 msg->addBOOLFast(_PREHASH_FirstDetachAll, (!wear_info->mAppend) && (!gRlvHandler.hasLockedAttachment()) );
4148// [/RLVa:KB]
4149 }
4150
4151 LLInventoryItem* item = obj_item_array.get(i);
4152 msg->nextBlockFast(_PREHASH_ObjectData );
4153 msg->addUUIDFast(_PREHASH_ItemID, item->getUUID() );
4154 msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner());
4155// msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point
4156// [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a
4157 msg->addU8Fast(_PREHASH_AttachmentPt,
4158 ( (!rlv_handler_t::isEnabled()) || (RlvSettings::getEnableWear()) || (!gRlvHandler.hasLockedAttachment()) )
4159 ? 0
4160 : gRlvHandler.getAttachPointIndex(gRlvHandler.getAttachPoint(item, true)));
4161// [/RLVa:KB]
4162 pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
4163 msg->addStringFast(_PREHASH_Name, item->getName());
4164 msg->addStringFast(_PREHASH_Description, item->getDescription());
4165
4166 if( (i+1 == obj_count) || ((OBJECTS_PER_PACKET-1) == (i % OBJECTS_PER_PACKET)) )
4167 {
4168 // End of message chunk
4169 msg->sendReliable( gAgent.getRegion()->getHost() );
4170 }
4171 }
4172 }
4173 } 4140 }
4174 } 4141 }
4175 delete wear_info; 4142 delete wear_info;
@@ -4260,6 +4227,109 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B
4260 dec_busy_count(); 4227 dec_busy_count();
4261} 4228}
4262 4229
4230void wear_attachments_on_avatar(const std::set<LLUUID>& item_ids, BOOL remove)
4231{
4232 // NOTE: the inventory items can reside in the user's inventory, the library, or any combination of the two
4233
4234 LLInventoryModel::item_array_t items;
4235 LLPointer<LLInventoryCallback> cb;
4236
4237 for (std::set<LLUUID>::const_iterator it = item_ids.begin(); it != item_ids.end(); ++it)
4238 {
4239 LLViewerInventoryItem* item = gInventory.getItem(*it);
4240 if ( (item) && (LLAssetType::AT_OBJECT == item->getType()) )
4241 {
4242 if ( (gInventory.isObjectDescendentOf(*it, gAgent.getInventoryRootID())) )
4243 {
4244 items.put(item);
4245 }
4246 else if ( (item->isComplete()) )
4247 {
4248 if (cb.isNull())
4249 cb = new LLWearAttachmentsCallback(remove);
4250 copy_inventory_item(gAgent.getID(), item->getPermissions().getOwner(), item->getUUID(), LLUUID::null, std::string(), cb);
4251 }
4252 }
4253 }
4254
4255 wear_attachments_on_avatar(items, remove);
4256}
4257
4258void wear_attachments_on_avatar(const LLInventoryModel::item_array_t& items, BOOL remove)
4259{
4260 // NOTE: all inventory items must reside in the user's inventory
4261
4262 LLVOAvatar* avatarp = gAgent.getAvatarObject();
4263 if(!avatarp)
4264 {
4265 llwarns << "No avatar found." << llendl;
4266 return;
4267 }
4268
4269 // Build a compound message to send all the objects that need to be rezzed.
4270
4271 // Limit number of packets to send
4272 const S32 MAX_PACKETS_TO_SEND = 10;
4273 const S32 OBJECTS_PER_PACKET = 4;
4274 const S32 MAX_OBJECTS_TO_SEND = MAX_PACKETS_TO_SEND * OBJECTS_PER_PACKET;
4275
4276 S32 count = items.count();
4277 if ( !count )
4278 {
4279 return;
4280 }
4281 else if ( count > MAX_OBJECTS_TO_SEND )
4282 {
4283 count = MAX_OBJECTS_TO_SEND;
4284 }
4285
4286 // Create an id to keep the parts of the compound message together
4287 LLUUID compound_msg_id;
4288 compound_msg_id.generate();
4289 LLMessageSystem* msg = gMessageSystem;
4290
4291 for(S32 i = 0; i < count; ++i)
4292 {
4293 if( 0 == (i % OBJECTS_PER_PACKET) )
4294 {
4295 // Start a new message chunk
4296 msg->newMessageFast(_PREHASH_RezMultipleAttachmentsFromInv);
4297 msg->nextBlockFast(_PREHASH_AgentData);
4298 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
4299 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
4300 msg->nextBlockFast(_PREHASH_HeaderData);
4301 msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id );
4302 msg->addU8Fast(_PREHASH_TotalObjects, count );
4303// msg->addBOOLFast(_PREHASH_FirstDetachAll, remove );
4304// [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a
4305 // This really should just *always* be FALSE since TRUE can result in loss of the current asset state
4306 msg->addBOOLFast(_PREHASH_FirstDetachAll, remove && (!gRlvHandler.hasLockedAttachment()) );
4307// [/RLVa:KB]
4308 }
4309
4310 LLInventoryItem* item = items.get(i);
4311 msg->nextBlockFast(_PREHASH_ObjectData );
4312 msg->addUUIDFast(_PREHASH_ItemID, item->getUUID() );
4313 msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner());
4314// msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point
4315// [RLVa:KB] - Checked: 2009-07-06 (RLVa-1.0.0c) | Added: RLVa-0.2.2a
4316 msg->addU8Fast(_PREHASH_AttachmentPt,
4317 ( (!rlv_handler_t::isEnabled()) || (RlvSettings::getEnableWear()) || (!gRlvHandler.hasLockedAttachment()) )
4318 ? 0
4319 : gRlvHandler.getAttachPointIndex(gRlvHandler.getAttachPoint(item, true)));
4320// [/RLVa:KB]
4321 pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
4322 msg->addStringFast(_PREHASH_Name, item->getName());
4323 msg->addStringFast(_PREHASH_Description, item->getDescription());
4324
4325 if( (i+1 == count) || ((OBJECTS_PER_PACKET-1) == (i % OBJECTS_PER_PACKET)) )
4326 {
4327 // End of message chunk
4328 msg->sendReliable( gAgent.getRegion()->getHost() );
4329 }
4330 }
4331}
4332
4263void remove_inventory_category_from_avatar( LLInventoryCategory* category ) 4333void remove_inventory_category_from_avatar( LLInventoryCategory* category )
4264{ 4334{
4265 if(!category) return; 4335 if(!category) return;
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index e662058..324e36a 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -1499,6 +1499,8 @@ void LLInventoryModel::stopBackgroundFetch()
1499//static 1499//static
1500void LLInventoryModel::backgroundFetch(void*) 1500void LLInventoryModel::backgroundFetch(void*)
1501{ 1501{
1502 if (gDisconnected)
1503 return;
1502 if (sBackgroundFetchActive && gAgent.getRegion()) 1504 if (sBackgroundFetchActive && gAgent.getRegion())
1503 { 1505 {
1504 //If we'll be using the capability, we'll be sending batches and the background thing isn't as important. 1506 //If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index 8e8e894..a8d5045 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -521,6 +521,15 @@ void LLInventoryView::init(LLInventoryModel* inventory)
521 addBoolControl("Inventory.FoldersAlwaysByName", sort_folders_by_name ); 521 addBoolControl("Inventory.FoldersAlwaysByName", sort_folders_by_name );
522 addBoolControl("Inventory.SystemFoldersToTop", sort_system_folders_to_top ); 522 addBoolControl("Inventory.SystemFoldersToTop", sort_system_folders_to_top );
523 523
524 //Search Controls
525 U32 search_type = gSavedSettings.getU32("InventorySearchType");
526 BOOL search_by_name = (search_type == 0);
527
528 addBoolControl("Inventory.SearchByName", search_by_name);
529 addBoolControl("Inventory.SearchByCreator", !search_by_name);
530
531 addBoolControl("Inventory.SearchByAll", !search_by_name);
532
524 mSavedFolderState = new LLSaveFolderState(); 533 mSavedFolderState = new LLSaveFolderState();
525 mSavedFolderState->setApply(FALSE); 534 mSavedFolderState->setApply(FALSE);
526 535
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index 10cb0c3..5a67937 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -69,6 +69,8 @@ const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f;
69const F32 SELECTED_MANIPULATOR_SCALE = 1.2f; 69const F32 SELECTED_MANIPULATOR_SCALE = 1.2f;
70const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; 70const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f;
71const S32 NUM_MANIPULATORS = 14; 71const S32 NUM_MANIPULATORS = 14;
72const F32 DEFAULT_LL_MAX_PRIM_SCALE = 10.f;
73const F32 DEFAULT_OPENSIM_MAX_PRIM_SCALE = 128.f;
72 74
73const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] = 75const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] =
74{ 76{
@@ -173,6 +175,7 @@ LLManipScale::LLManipScale( LLToolComposite* composite )
173 mScaledBoxHandleSize( 1.f ), 175 mScaledBoxHandleSize( 1.f ),
174 mLastMouseX( -1 ), 176 mLastMouseX( -1 ),
175 mLastMouseY( -1 ), 177 mLastMouseY( -1 ),
178 mMaxPrimSize(0.f),
176 mSendUpdateOnMouseUp( FALSE ), 179 mSendUpdateOnMouseUp( FALSE ),
177 mLastUpdateFlags( 0 ), 180 mLastUpdateFlags( 0 ),
178 mScaleSnapUnit1(1.f), 181 mScaleSnapUnit1(1.f),
@@ -201,6 +204,7 @@ void LLManipScale::render()
201 LLGLDepthTest gls_depth(GL_TRUE); 204 LLGLDepthTest gls_depth(GL_TRUE);
202 LLGLEnable gl_blend(GL_BLEND); 205 LLGLEnable gl_blend(GL_BLEND);
203 LLGLEnable gls_alpha_test(GL_ALPHA_TEST); 206 LLGLEnable gls_alpha_test(GL_ALPHA_TEST);
207 mMaxPrimSize = gSavedSettings.getBOOL("LoggedIntoOpenSim") ? DEFAULT_OPENSIM_MAX_PRIM_SCALE : DEFAULT_LL_MAX_PRIM_SCALE;
204 208
205 if( canAffectSelection() ) 209 if( canAffectSelection() )
206 { 210 {
@@ -952,8 +956,8 @@ void LLManipScale::dragCorner( S32 x, S32 y )
952 mInSnapRegime = FALSE; 956 mInSnapRegime = FALSE;
953 } 957 }
954 958
955 F32 max_scale_factor = DEFAULT_MAX_PRIM_SCALE / MIN_PRIM_SCALE; 959 F32 max_scale_factor = mMaxPrimSize / MIN_PRIM_SCALE;
956 F32 min_scale_factor = MIN_PRIM_SCALE / DEFAULT_MAX_PRIM_SCALE; 960 F32 min_scale_factor = MIN_PRIM_SCALE / mMaxPrimSize;
957 961
958 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale 962 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale
959 for (LLObjectSelection::iterator iter = mObjectSelection->begin(); 963 for (LLObjectSelection::iterator iter = mObjectSelection->begin();
@@ -965,7 +969,7 @@ void LLManipScale::dragCorner( S32 x, S32 y )
965 { 969 {
966 const LLVector3& scale = selectNode->mSavedScale; 970 const LLVector3& scale = selectNode->mSavedScale;
967 971
968 F32 cur_max_scale_factor = llmin( DEFAULT_MAX_PRIM_SCALE / scale.mV[VX], DEFAULT_MAX_PRIM_SCALE / scale.mV[VY], DEFAULT_MAX_PRIM_SCALE / scale.mV[VZ] ); 972 F32 cur_max_scale_factor = llmin( mMaxPrimSize / scale.mV[VX], mMaxPrimSize / scale.mV[VY], mMaxPrimSize / scale.mV[VZ] );
969 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); 973 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor );
970 974
971 F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); 975 F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] );
@@ -1262,7 +1266,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto
1262 1266
1263 F32 denom = axis * dir_local; 1267 F32 denom = axis * dir_local;
1264 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters 1268 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters
1265 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); 1269 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, mMaxPrimSize);
1266 // propagate scale constraint back to position offset 1270 // propagate scale constraint back to position offset
1267 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position 1271 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position
1268 1272
@@ -1962,7 +1966,7 @@ F32 LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const
1962 max_extent = bbox_extents.mV[i]; 1966 max_extent = bbox_extents.mV[i];
1963 } 1967 }
1964 } 1968 }
1965 max_scale_factor = bbox_extents.magVec() * DEFAULT_MAX_PRIM_SCALE / max_extent; 1969 max_scale_factor = bbox_extents.magVec() * mMaxPrimSize / max_extent;
1966 1970
1967 if (getUniform()) 1971 if (getUniform())
1968 { 1972 {
@@ -1977,7 +1981,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const
1977{ 1981{
1978 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); 1982 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox );
1979 bbox_extents.abs(); 1983 bbox_extents.abs();
1980 F32 min_extent = DEFAULT_MAX_PRIM_SCALE; 1984 F32 min_extent = mMaxPrimSize;
1981 for (U32 i = VX; i <= VZ; i++) 1985 for (U32 i = VX; i <= VZ; i++)
1982 { 1986 {
1983 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) 1987 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent)
@@ -2052,3 +2056,13 @@ BOOL LLManipScale::canAffectSelection()
2052 } 2056 }
2053 return can_scale; 2057 return can_scale;
2054} 2058}
2059
2060//static
2061F32 LLManipScale::getMaxPrimSize()
2062{
2063 if (gSavedSettings.getBOOL("LoggedIntoOpenSim"))
2064 {
2065 return DEFAULT_OPENSIM_MAX_PRIM_SCALE;
2066 }
2067 return DEFAULT_LL_MAX_PRIM_SCALE;
2068}
diff --git a/linden/indra/newview/llmanipscale.h b/linden/indra/newview/llmanipscale.h
index 98d8c63..c60cb69 100644
--- a/linden/indra/newview/llmanipscale.h
+++ b/linden/indra/newview/llmanipscale.h
@@ -88,6 +88,8 @@ public:
88 static void setShowAxes( BOOL b ); 88 static void setShowAxes( BOOL b );
89 static BOOL getShowAxes(); 89 static BOOL getShowAxes();
90 90
91 static F32 getMaxPrimSize();
92
91private: 93private:
92 void renderCorners( const LLBBox& local_bbox ); 94 void renderCorners( const LLBBox& local_bbox );
93 void renderFaces( const LLBBox& local_bbox ); 95 void renderFaces( const LLBBox& local_bbox );
@@ -165,6 +167,7 @@ private:
165 F32 mScaleSnapValue; 167 F32 mScaleSnapValue;
166 BOOL mInSnapRegime; 168 BOOL mInSnapRegime;
167 F32* mManipulatorScales; 169 F32* mManipulatorScales;
170 F32 mMaxPrimSize;
168}; 171};
169 172
170#endif // LL_MANIPSCALE_H 173#endif // LL_MANIPSCALE_H
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index 8f5d90d..9ef56c1 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -45,6 +45,7 @@
45#include "llcolorscheme.h" 45#include "llcolorscheme.h"
46#include "llviewercontrol.h" 46#include "llviewercontrol.h"
47#include "llfloateravatarinfo.h" 47#include "llfloateravatarinfo.h"
48#include "llfloatermap.h"
48#include "llfloaterworldmap.h" 49#include "llfloaterworldmap.h"
49#include "llframetimer.h" 50#include "llframetimer.h"
50#include "llmutelist.h" 51#include "llmutelist.h"
@@ -69,13 +70,15 @@
69#include "llglheaders.h" 70#include "llglheaders.h"
70 71
71const F32 MAP_SCALE_MIN = 32; 72const F32 MAP_SCALE_MIN = 32;
72const F32 MAP_SCALE_MID = 172; 73const F32 MAP_SCALE_MID = 1024;
73const F32 MAP_SCALE_MAX = 512; 74const F32 MAP_SCALE_MAX = 4096;
74const F32 MAP_SCALE_INCREMENT = 16; 75const F32 MAP_SCALE_INCREMENT = 16;
75const F32 MAP_MIN_PICK_DIST = 4; 76const F32 MAP_SCALE_ZOOM_FACTOR = 1.25f; // Zoom in factor per click of the scroll wheel (25%)
76const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f; 77const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f;
78const F32 MIN_DOT_RADIUS = 3.5f;
79const F32 DOT_SCALE = 0.75f;
80const F32 MIN_PICK_SCALE = 2.f;
77const S32 SLOP = 2; 81const S32 SLOP = 2;
78
79const S32 TRACKING_RADIUS = 3; 82const S32 TRACKING_RADIUS = 3;
80 83
81LLNetMap::LLNetMap(const std::string& name) : 84LLNetMap::LLNetMap(const std::string& name) :
@@ -91,6 +94,7 @@ LLNetMap::LLNetMap(const std::string& name) :
91{ 94{
92 mScale = gSavedSettings.getF32("MiniMapScale"); 95 mScale = gSavedSettings.getF32("MiniMapScale");
93 mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); 96 mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters();
97 mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
94 98
95 mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal(); 99 mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal();
96 100
@@ -98,6 +102,8 @@ LLNetMap::LLNetMap(const std::string& name) :
98 (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel"); 102 (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel");
99 (new LLCenterMap())->registerListener(this, "MiniMap.Center"); 103 (new LLCenterMap())->registerListener(this, "MiniMap.Center");
100 (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter"); 104 (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter");
105 (new LLRotateMap())->registerListener(this, "MiniMap.Rotate");
106 (new LLCheckRotateMap())->registerListener(this, "MiniMap.CheckRotate");
101 (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap"); 107 (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap");
102 (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking"); 108 (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking");
103 (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking"); 109 (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking");
@@ -117,6 +123,11 @@ LLNetMap::LLNetMap(const std::string& name) :
117 mPopupMenuHandle = menu->getHandle(); 123 mPopupMenuHandle = menu->getHandle();
118} 124}
119 125
126BOOL LLNetMap::postBuild()
127{
128 return TRUE;
129}
130
120LLNetMap::~LLNetMap() 131LLNetMap::~LLNetMap()
121{ 132{
122} 133}
@@ -143,6 +154,7 @@ void LLNetMap::setScale( F32 scale )
143 } 154 }
144 155
145 mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters(); 156 mPixelsPerMeter = mScale / LLWorld::getInstance()->getRegionWidthInMeters();
157 mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
146 158
147 mUpdateNow = TRUE; 159 mUpdateNow = TRUE;
148} 160}
@@ -325,12 +337,15 @@ void LLNetMap::draw()
325 LLUI::getCursorPositionLocal(this, &local_mouse_x, &local_mouse_y); 337 LLUI::getCursorPositionLocal(this, &local_mouse_x, &local_mouse_y);
326 mClosestAgentToCursor.setNull(); 338 mClosestAgentToCursor.setNull();
327 F32 closest_dist = F32_MAX; 339 F32 closest_dist = F32_MAX;
340 F32 min_pick_dist = mDotRadius * MIN_PICK_SCALE;
328 341
329 // Draw avatars 342 // Draw avatars
330 LLColor4 avatar_color = gColors.getColor( "MapAvatar" ); 343 LLColor4 avatar_color = gColors.getColor( "MapAvatar" );
331 LLColor4 friend_color = gColors.getColor( "MapFriend" ); 344 LLColor4 friend_color = gColors.getColor( "MapFriend" );
332 LLColor4 muted_color = gColors.getColor( "MapMuted" ); 345 LLColor4 muted_color = gColors.getColor( "MapMuted" );
346 LLColor4 selected_color = gColors.getColor( "MapSelected" );
333 LLColor4 glyph_color; 347 LLColor4 glyph_color;
348 F32 glyph_radius;
334 349
335 std::vector<LLUUID> avatar_ids; 350 std::vector<LLUUID> avatar_ids;
336 std::vector<LLVector3d> positions; 351 std::vector<LLVector3d> positions;
@@ -340,20 +355,38 @@ void LLNetMap::draw()
340 // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest. 355 // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest.
341 // just be careful to sort the avatar IDs along with the positions. -MG 356 // just be careful to sort the avatar IDs along with the positions. -MG
342 pos_map = globalPosToView(positions[i], rotate_map); 357 pos_map = globalPosToView(positions[i], rotate_map);
343 358
344 // Show them muted even if they're friends 359 if (LLFloaterMap::getSelected() == avatar_ids[i])
345 if (LLMuteList::getInstance()->isMuted(avatar_ids[i]))
346 { 360 {
347 glyph_color = muted_color; 361 glyph_radius = mDotRadius * 1.7f;
362 glyph_color = selected_color;
348 } 363 }
349 else if (is_agent_friend(avatar_ids[i])) 364 else
350 { 365 {
351 glyph_color = friend_color; 366 glyph_radius = mDotRadius;
367 // Show them muted even if they're friends
368 if (LLMuteList::getInstance()->isMuted(avatar_ids[i]))
369 {
370 glyph_color = muted_color;
371 }
372 else if (is_agent_friend(avatar_ids[i]))
373 {
374 glyph_color = friend_color;
375 }
376 else
377 {
378 glyph_color = avatar_color;
379 }
352 } 380 }
353 else 381
382// [RLVa:KB]
383 if ( rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) )
354 { 384 {
385 // User is not allowed to see who it is, or even if it's a friend,
386 // due to RLV settings.
355 glyph_color = avatar_color; 387 glyph_color = avatar_color;
356 } 388 }
389// [/RLVa:KB]
357 390
358// [RLVa:KB] 391// [RLVa:KB]
359 if ( !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ) 392 if ( !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) )
@@ -368,10 +401,11 @@ void LLNetMap::draw()
368 LLWorldMapView::drawAvatar( 401 LLWorldMapView::drawAvatar(
369 pos_map.mV[VX], pos_map.mV[VY], 402 pos_map.mV[VX], pos_map.mV[VY],
370 glyph_color, 403 glyph_color,
371 pos_map.mV[VZ]); 404 pos_map.mV[VZ],
405 glyph_radius);
372 406
373 F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); 407 F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y));
374 if(dist_to_cursor < MAP_MIN_PICK_DIST && dist_to_cursor < closest_dist) 408 if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist)
375 { 409 {
376 closest_dist = dist_to_cursor; 410 closest_dist = dist_to_cursor;
377 mClosestAgentToCursor = avatar_ids[i]; 411 mClosestAgentToCursor = avatar_ids[i];
@@ -400,10 +434,13 @@ void LLNetMap::draw()
400 // Draw dot for self avatar position 434 // Draw dot for self avatar position
401 pos_global = gAgent.getPositionGlobal(); 435 pos_global = gAgent.getPositionGlobal();
402 pos_map = globalPosToView(pos_global, rotate_map); 436 pos_map = globalPosToView(pos_global, rotate_map);
403 LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage; 437 LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;
438 S32 dot_width = llround(mDotRadius * 2.f);
404 you->draw( 439 you->draw(
405 llround(pos_map.mV[VX]) - you->getWidth()/2, 440 llround(pos_map.mV[VX] - mDotRadius),
406 llround(pos_map.mV[VY]) - you->getHeight()/2); 441 llround(pos_map.mV[VY] - mDotRadius),
442 dot_width,
443 dot_width);
407 444
408 // Draw frustum 445 // Draw frustum
409 F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters(); 446 F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters();
@@ -460,6 +497,8 @@ void LLNetMap::draw()
460 setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2); 497 setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2);
461 498
462 LLView::draw(); 499 LLView::draw();
500
501 LLFloaterMap::updateRadar();
463} 502}
464 503
465void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) 504void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -542,8 +581,12 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y, BOOL rotated )
542 581
543BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks) 582BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
544{ 583{
545 // note that clicks are reversed from what you'd think 584 // note that clicks are reversed from what you'd think: i.e. > 0 means zoom out, < 0 means zoom in
546 setScale(llclamp(mScale - clicks*MAP_SCALE_INCREMENT, MAP_SCALE_MIN, MAP_SCALE_MAX)); 585 F32 scale = mScale;
586
587 scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks);
588 setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX));
589
547 return TRUE; 590 return TRUE;
548} 591}
549 592
@@ -562,7 +605,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
562 if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) 605 if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname))
563 { 606 {
564// [RLVa:KB] 607// [RLVa:KB]
565 if ( !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ) 608 if ( rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) )
566 { 609 {
567 // User is not allowed to see who it is, due to RLV settings. 610 // User is not allowed to see who it is, due to RLV settings.
568 msg.append(rlv_handler_t::cstrHidden); 611 msg.append(rlv_handler_t::cstrHidden);
@@ -576,7 +619,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
576 } 619 }
577 620
578// [RLVa:KB] 621// [RLVa:KB]
579 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) 622 if (rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
580 { 623 {
581 // User is not allowed to see where they are, due to RLV settings. 624 // User is not allowed to see where they are, due to RLV settings.
582 msg.append( rlv_handler_t::cstrHidden ); 625 msg.append( rlv_handler_t::cstrHidden );
@@ -922,6 +965,22 @@ bool LLNetMap::LLScaleMap::handleEvent(LLPointer<LLEvent> event, const LLSD& use
922 return true; 965 return true;
923} 966}
924 967
968bool LLNetMap::LLRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
969{
970 BOOL rotate = gSavedSettings.getBOOL("MiniMapRotate");
971 gSavedSettings.setBOOL("MiniMapRotate", !rotate);
972
973 return true;
974}
975
976bool LLNetMap::LLCheckRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
977{
978 LLNetMap *self = mPtr;
979 BOOL enabled = gSavedSettings.getBOOL("MiniMapRotate");
980 self->findControl(userdata["control"].asString())->setValue(enabled);
981 return true;
982}
983
925bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 984bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
926{ 985{
927 S32 center = userdata.asInteger(); 986 S32 center = userdata.asInteger();
diff --git a/linden/indra/newview/llnetmap.h b/linden/indra/newview/llnetmap.h
index ef046d8..800b825 100644
--- a/linden/indra/newview/llnetmap.h
+++ b/linden/indra/newview/llnetmap.h
@@ -52,6 +52,8 @@ class LLNetMap : public LLPanel
52{ 52{
53public: 53public:
54 LLNetMap(const std::string& name); 54 LLNetMap(const std::string& name);
55
56 virtual BOOL postBuild();
55 virtual ~LLNetMap(); 57 virtual ~LLNetMap();
56 58
57 virtual void draw(); 59 virtual void draw();
@@ -93,7 +95,8 @@ private:
93 F32 mScale; // Size of a region in pixels 95 F32 mScale; // Size of a region in pixels
94 F32 mPixelsPerMeter; // world meters to map pixels 96 F32 mPixelsPerMeter; // world meters to map pixels
95 F32 mObjectMapTPM; // texels per meter on map 97 F32 mObjectMapTPM; // texels per meter on map
96 F32 mObjectMapPixels; // Width of object map in pixels; 98 F32 mObjectMapPixels; // Width of object map in pixels
99 F32 mDotRadius; // Size of avatar markers
97 F32 mTargetPanX; 100 F32 mTargetPanX;
98 F32 mTargetPanY; 101 F32 mTargetPanY;
99 F32 mCurPanX; 102 F32 mCurPanX;
@@ -111,8 +114,8 @@ private:
111 LLPointer<LLImageGL> mObjectImagep; 114 LLPointer<LLImageGL> mObjectImagep;
112 115
113private: 116private:
114 LLUUID mClosestAgentToCursor; 117 LLUUID mClosestAgentToCursor;
115 LLUUID mClosestAgentAtLastRightClick; 118 LLUUID mClosestAgentAtLastRightClick;
116 119
117 static BOOL sRotateMap; 120 static BOOL sRotateMap;
118 static LLNetMap* sInstance; 121 static LLNetMap* sInstance;
@@ -140,6 +143,18 @@ private:
140 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); 143 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
141 }; 144 };
142 145
146 class LLRotateMap : public LLMemberListener<LLNetMap>
147 {
148 public:
149 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
150 };
151
152 class LLCheckRotateMap : public LLMemberListener<LLNetMap>
153 {
154 public:
155 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
156 };
157
143 class LLShowWorldMap : public LLMemberListener<LLNetMap> 158 class LLShowWorldMap : public LLMemberListener<LLNetMap>
144 { 159 {
145 public: 160 public:
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index 91ac440..c1a2354 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -41,6 +41,7 @@
41#include "llagent.h" 41#include "llagent.h"
42#include "llbutton.h" 42#include "llbutton.h"
43#include "llchatbar.h" 43#include "llchatbar.h"
44#include "llfloaterchat.h"
44#include "llfocusmgr.h" 45#include "llfocusmgr.h"
45#include "llimview.h" 46#include "llimview.h"
46#include "llmediaremotectrl.h" 47#include "llmediaremotectrl.h"
@@ -62,6 +63,7 @@
62#include "llvoavatar.h" 63#include "llvoavatar.h"
63#include "llvoiceremotectrl.h" 64#include "llvoiceremotectrl.h"
64#include "llwebbrowserctrl.h" 65#include "llwebbrowserctrl.h"
66#include "llwindlightremotectrl.h"
65#include "llselectmgr.h" 67#include "llselectmgr.h"
66 68
67// 69//
@@ -72,6 +74,53 @@ LLOverlayBar *gOverlayBar = NULL;
72 74
73extern S32 MENU_BAR_HEIGHT; 75extern S32 MENU_BAR_HEIGHT;
74 76
77
78class LLTitleObserver
79 : public LLMediaObserver
80{
81public:
82 void init(std::string url);
83 /*virtual*/ void onMediaTitleChange(const EventType& event_in);
84private:
85 LLMediaBase* mMediaSource;
86};
87
88static LLTitleObserver sTitleObserver;
89
90static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote");
91
92void LLTitleObserver::init(std::string url)
93{
94
95 if (!gAudiop)
96 {
97 return;
98 }
99
100 mMediaSource = gAudiop->getStreamMedia(); // LLViewerMedia::getSource();
101
102 if ( mMediaSource )
103 {
104 mMediaSource->addObserver(this);
105 }
106}
107
108//virtual
109void LLTitleObserver::onMediaTitleChange(const EventType& event_in)
110{
111 if ( !gSavedSettings.getBOOL("ShowStreamTitle") )
112 {
113 return;
114 }
115
116 LLChat chat;
117 //TODO: set this in XUI
118 std::string playing_msg = "Playing: " + event_in.getStringValue();
119 chat.mText = playing_msg;
120 LLFloaterChat::addChat(chat, FALSE, FALSE);
121}
122
123
75// 124//
76// Functions 125// Functions
77// 126//
@@ -92,6 +141,13 @@ void* LLOverlayBar::createVoiceRemote(void* userdata)
92 return self->mVoiceRemote; 141 return self->mVoiceRemote;
93} 142}
94 143
144void* LLOverlayBar::createWindlightRemote(void* userdata)
145{
146 LLOverlayBar *self = (LLOverlayBar*)userdata;
147 self->mWindlightRemote = new LLWindlightRemoteCtrl();
148 return self->mWindlightRemote;
149}
150
95void* LLOverlayBar::createChatBar(void* userdata) 151void* LLOverlayBar::createChatBar(void* userdata)
96{ 152{
97 gChatBar = new LLChatBar(); 153 gChatBar = new LLChatBar();
@@ -102,6 +158,7 @@ LLOverlayBar::LLOverlayBar()
102 : LLPanel(), 158 : LLPanel(),
103 mMediaRemote(NULL), 159 mMediaRemote(NULL),
104 mVoiceRemote(NULL), 160 mVoiceRemote(NULL),
161 mWindlightRemote(NULL),
105 mMusicState(STOPPED), 162 mMusicState(STOPPED),
106 mOriginalIMLabel("") 163 mOriginalIMLabel("")
107{ 164{
@@ -113,6 +170,7 @@ LLOverlayBar::LLOverlayBar()
113 LLCallbackMap::map_t factory_map; 170 LLCallbackMap::map_t factory_map;
114 factory_map["media_remote"] = LLCallbackMap(LLOverlayBar::createMediaRemote, this); 171 factory_map["media_remote"] = LLCallbackMap(LLOverlayBar::createMediaRemote, this);
115 factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this); 172 factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this);
173 factory_map["windlight_remote"] = LLCallbackMap(LLOverlayBar::createWindlightRemote, this);
116 factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this); 174 factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this);
117 175
118 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map); 176 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map);
@@ -272,6 +330,7 @@ void LLOverlayBar::refresh()
272 } 330 }
273 331
274 332
333 moveChildToBackOfTabGroup(mWindlightRemote);
275 moveChildToBackOfTabGroup(mMediaRemote); 334 moveChildToBackOfTabGroup(mMediaRemote);
276 moveChildToBackOfTabGroup(mVoiceRemote); 335 moveChildToBackOfTabGroup(mVoiceRemote);
277 336
@@ -280,6 +339,7 @@ void LLOverlayBar::refresh()
280 { 339 {
281 childSetVisible("media_remote_container", FALSE); 340 childSetVisible("media_remote_container", FALSE);
282 childSetVisible("voice_remote_container", FALSE); 341 childSetVisible("voice_remote_container", FALSE);
342 childSetVisible("windlight_remote_container", FALSE);
283 childSetVisible("state_buttons", FALSE); 343 childSetVisible("state_buttons", FALSE);
284 } 344 }
285 else 345 else
@@ -287,6 +347,7 @@ void LLOverlayBar::refresh()
287 // update "remotes" 347 // update "remotes"
288 childSetVisible("media_remote_container", TRUE); 348 childSetVisible("media_remote_container", TRUE);
289 childSetVisible("voice_remote_container", LLVoiceClient::voiceEnabled()); 349 childSetVisible("voice_remote_container", LLVoiceClient::voiceEnabled());
350 childSetVisible("windlight_remote_container", gSavedSettings.getBOOL("EnableWindlightRemote"));
290 childSetVisible("state_buttons", TRUE); 351 childSetVisible("state_buttons", TRUE);
291 } 352 }
292 353
@@ -416,6 +477,7 @@ void LLOverlayBar::toggleMusicPlay(void*)
416 // if ( gAudiop->isInternetStreamPlaying() == 0 ) 477 // if ( gAudiop->isInternetStreamPlaying() == 0 )
417 { 478 {
418 gAudiop->startInternetStream(parcel->getMusicURL()); 479 gAudiop->startInternetStream(parcel->getMusicURL());
480 sTitleObserver.init(parcel->getMusicURL());
419 } 481 }
420 } 482 }
421 } 483 }
diff --git a/linden/indra/newview/lloverlaybar.h b/linden/indra/newview/lloverlaybar.h
index 52a469a..140fabf 100644
--- a/linden/indra/newview/lloverlaybar.h
+++ b/linden/indra/newview/lloverlaybar.h
@@ -40,6 +40,7 @@ extern S32 STATUS_BAR_HEIGHT;
40class LLButton; 40class LLButton;
41class LLLineEditor; 41class LLLineEditor;
42class LLMediaRemoteCtrl; 42class LLMediaRemoteCtrl;
43
43class LLMessageSystem; 44class LLMessageSystem;
44class LLTextBox; 45class LLTextBox;
45class LLTextEditor; 46class LLTextEditor;
@@ -49,6 +50,7 @@ class LLFrameTimer;
49class LLStatGraph; 50class LLStatGraph;
50class LLSlider; 51class LLSlider;
51class LLVoiceRemoteCtrl; 52class LLVoiceRemoteCtrl;
53class LLWindlightRemoteCtrl;
52 54
53class LLOverlayBar 55class LLOverlayBar
54: public LLPanel 56: public LLPanel
@@ -88,13 +90,15 @@ public:
88protected: 90protected:
89 static void* createMediaRemote(void* userdata); 91 static void* createMediaRemote(void* userdata);
90 static void* createVoiceRemote(void* userdata); 92 static void* createVoiceRemote(void* userdata);
93 static void* createWindlightRemote(void* userdata);
91 static void* createChatBar(void* userdata); 94 static void* createChatBar(void* userdata);
92 95
93 void enableMediaButtons(); 96 void enableMediaButtons();
94 97
95protected: 98protected:
96 LLMediaRemoteCtrl* mMediaRemote; 99 LLMediaRemoteCtrl* mMediaRemote;
97 LLVoiceRemoteCtrl* mVoiceRemote; 100 LLVoiceRemoteCtrl* mVoiceRemote;
101 LLWindlightRemoteCtrl* mWindlightRemote;
98 bool mBuilt; // dialog constructed yet? 102 bool mBuilt; // dialog constructed yet?
99 S32 mMusicState; 103 S32 mMusicState;
100 std::string mOriginalIMLabel; 104 std::string mOriginalIMLabel;
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index 8c367fa..e101ea2 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -51,6 +51,7 @@
51 51
52#include "llfloaterfriends.h" 52#include "llfloaterfriends.h"
53#include "llfloatergroupinfo.h" 53#include "llfloatergroupinfo.h"
54#include "llfloatergroups.h"
54#include "llfloaterworldmap.h" 55#include "llfloaterworldmap.h"
55#include "llfloatermute.h" 56#include "llfloatermute.h"
56#include "llfloateravatarinfo.h" 57#include "llfloateravatarinfo.h"
@@ -86,6 +87,7 @@
86std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels; 87std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels;
87BOOL LLPanelAvatar::sAllowFirstLife = FALSE; 88BOOL LLPanelAvatar::sAllowFirstLife = FALSE;
88 89
90extern void callback_invite_to_group(LLUUID group_id, void *user_data);
89extern void handle_lure(const LLUUID& invitee); 91extern void handle_lure(const LLUUID& invitee);
90extern void handle_pay_by_id(const LLUUID& payee); 92extern void handle_pay_by_id(const LLUUID& payee);
91 93
@@ -428,6 +430,7 @@ BOOL LLPanelAvatarSecondLife::postBuild(void)
428 430
429 childSetAction("Find on Map", LLPanelAvatar::onClickTrack, getPanelAvatar()); 431 childSetAction("Find on Map", LLPanelAvatar::onClickTrack, getPanelAvatar());
430 childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar()); 432 childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar());
433 childSetAction("Invite to Group...", LLPanelAvatar::onClickGroupInvite, getPanelAvatar());
431 434
432 childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar()); 435 childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar());
433 childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar()); 436 childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar());
@@ -1433,6 +1436,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1433 } 1436 }
1434 childSetVisible("Instant Message...",FALSE); 1437 childSetVisible("Instant Message...",FALSE);
1435 childSetEnabled("Instant Message...",FALSE); 1438 childSetEnabled("Instant Message...",FALSE);
1439 childSetVisible("Invite to Group...",FALSE);
1440 childSetEnabled("Invite to Group...",FALSE);
1436 childSetVisible("Mute",FALSE); 1441 childSetVisible("Mute",FALSE);
1437 childSetEnabled("Mute",FALSE); 1442 childSetEnabled("Mute",FALSE);
1438 childSetVisible("Offer Teleport...",FALSE); 1443 childSetVisible("Offer Teleport...",FALSE);
@@ -1445,6 +1450,14 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1445 childSetEnabled("Add Friend...",FALSE); 1450 childSetEnabled("Add Friend...",FALSE);
1446 childSetVisible("Pay...",FALSE); 1451 childSetVisible("Pay...",FALSE);
1447 childSetEnabled("Pay...",FALSE); 1452 childSetEnabled("Pay...",FALSE);
1453 childSetVisible("Kick",FALSE);
1454 childSetEnabled("Kick",FALSE);
1455 childSetVisible("Freeze",FALSE);
1456 childSetEnabled("Freeze",FALSE);
1457 childSetVisible("Unfreeze",FALSE);
1458 childSetEnabled("Unfreeze",FALSE);
1459 childSetVisible("csr_btn", FALSE);
1460 childSetEnabled("csr_btn", FALSE);
1448 } 1461 }
1449 else 1462 else
1450 { 1463 {
@@ -1456,6 +1469,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1456 1469
1457 childSetVisible("Instant Message...",TRUE); 1470 childSetVisible("Instant Message...",TRUE);
1458 childSetEnabled("Instant Message...",FALSE); 1471 childSetEnabled("Instant Message...",FALSE);
1472 childSetVisible("Invite to Group...",TRUE);
1473 childSetEnabled("Invite to Group...",FALSE);
1459 childSetVisible("Mute",TRUE); 1474 childSetVisible("Mute",TRUE);
1460 childSetEnabled("Mute",FALSE); 1475 childSetEnabled("Mute",FALSE);
1461 1476
@@ -1482,20 +1497,20 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1482 childSetEnabled("Add Friend...", !avatar_is_friend); 1497 childSetEnabled("Add Friend...", !avatar_is_friend);
1483 childSetVisible("Pay...",TRUE); 1498 childSetVisible("Pay...",TRUE);
1484 childSetEnabled("Pay...",FALSE); 1499 childSetEnabled("Pay...",FALSE);
1500
1501 BOOL is_god = FALSE;
1502 if (gAgent.isGodlike()) is_god = TRUE;
1503
1504 childSetVisible("Kick", is_god);
1505 childSetEnabled("Kick", is_god);
1506 childSetVisible("Freeze", is_god);
1507 childSetEnabled("Freeze", is_god);
1508 childSetVisible("Unfreeze", is_god);
1509 childSetEnabled("Unfreeze", is_god);
1510 childSetVisible("csr_btn", is_god);
1511 childSetEnabled("csr_btn", is_god);
1485 } 1512 }
1486 } 1513 }
1487
1488 BOOL is_god = FALSE;
1489 if (gAgent.isGodlike()) is_god = TRUE;
1490
1491 childSetVisible("Kick", is_god);
1492 childSetEnabled("Kick", is_god);
1493 childSetVisible("Freeze", is_god);
1494 childSetEnabled("Freeze", is_god);
1495 childSetVisible("Unfreeze", is_god);
1496 childSetEnabled("Unfreeze", is_god);
1497 childSetVisible("csr_btn", is_god);
1498 childSetEnabled("csr_btn", is_god);
1499} 1514}
1500 1515
1501 1516
@@ -1538,9 +1553,18 @@ void LLPanelAvatar::resetGroupList()
1538 LLSD row; 1553 LLSD row;
1539 1554
1540 row["id"] = id ; 1555 row["id"] = id ;
1541 row["columns"][0]["value"] = group_string;
1542 row["columns"][0]["font"] = "SANSSERIF_SMALL"; 1556 row["columns"][0]["font"] = "SANSSERIF_SMALL";
1543 row["columns"][0]["width"] = 0; 1557 row["columns"][0]["width"] = 0;
1558 if (group_data.mListInProfile)
1559 {
1560 row["columns"][0]["value"] = group_string;
1561 row["columns"][0]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
1562 }
1563 else
1564 {
1565 row["columns"][0]["value"] = group_string + " " + getString("HiddenLabel");
1566 row["columns"][0]["color"] = gColors.getColor("ScriptBgReadOnlyColor").getValue();
1567 }
1544 group_list->addElement(row); 1568 group_list->addElement(row);
1545 } 1569 }
1546 group_list->sortByColumnIndex(0, TRUE); 1570 group_list->sortByColumnIndex(0, TRUE);
@@ -1563,6 +1587,22 @@ void LLPanelAvatar::onClickIM(void* userdata)
1563 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID); 1587 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID);
1564} 1588}
1565 1589
1590void LLPanelAvatar::onClickGroupInvite(void* userdata)
1591{
1592 LLPanelAvatar* self = (LLPanelAvatar*) userdata;
1593 if (self->getAvatarID().notNull())
1594 {
1595 LLFloaterGroupPicker* widget;
1596 widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
1597 if (widget)
1598 {
1599 widget->center();
1600 widget->setPowersMask(GP_MEMBER_INVITE);
1601 widget->setSelectCallback(callback_invite_to_group, (void *)&(self->getAvatarID()));
1602 }
1603 }
1604}
1605
1566 1606
1567// static 1607// static
1568//----------------------------------------------------------------------------- 1608//-----------------------------------------------------------------------------
@@ -1780,6 +1820,7 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
1780 continue; 1820 continue;
1781 } 1821 }
1782 self->childSetEnabled("Instant Message...",TRUE); 1822 self->childSetEnabled("Instant Message...",TRUE);
1823 self->childSetEnabled("Invite to Group...",TRUE);
1783 self->childSetEnabled("Pay...",TRUE); 1824 self->childSetEnabled("Pay...",TRUE);
1784 self->childSetEnabled("Mute",TRUE); 1825 self->childSetEnabled("Mute",TRUE);
1785 1826
@@ -2000,8 +2041,34 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
2000 2041
2001 LLSD row; 2042 LLSD row;
2002 row["id"] = group_id; 2043 row["id"] = group_id;
2003 row["columns"][0]["value"] = group_string;
2004 row["columns"][0]["font"] = "SANSSERIF_SMALL"; 2044 row["columns"][0]["font"] = "SANSSERIF_SMALL";
2045
2046 LLGroupData *group_data = NULL;
2047
2048 if (avatar_id == agent_id) // own avatar
2049 {
2050 // Search for this group in the agent's groups list
2051 LLDynamicArray<LLGroupData>::iterator i;
2052 for (i = gAgent.mGroups.begin(); i != gAgent.mGroups.end(); i++)
2053 {
2054 if (i->mID == group_id)
2055 {
2056 group_data = &*i;
2057 break;
2058 }
2059 }
2060 }
2061 // Set normal color if not found or if group is visible in profile
2062 if (!group_data || group_data->mListInProfile)
2063 {
2064 row["columns"][0]["value"] = group_string;
2065 row["columns"][0]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
2066 }
2067 else
2068 {
2069 row["columns"][0]["value"] = group_string + " " + self->getString("HiddenLabel");
2070 row["columns"][0]["color"] = gColors.getColor("ScriptBgReadOnlyColor").getValue();
2071 }
2005 if (group_list) 2072 if (group_list)
2006 { 2073 {
2007 group_list->addElement(row); 2074 group_list->addElement(row);
diff --git a/linden/indra/newview/llpanelavatar.h b/linden/indra/newview/llpanelavatar.h
index 4570145..b1bb317 100644
--- a/linden/indra/newview/llpanelavatar.h
+++ b/linden/indra/newview/llpanelavatar.h
@@ -311,6 +311,7 @@ public:
311 311
312 static void onClickTrack( void *userdata); 312 static void onClickTrack( void *userdata);
313 static void onClickIM( void *userdata); 313 static void onClickIM( void *userdata);
314 static void onClickGroupInvite( void *userdata);
314 static void onClickOfferTeleport( void *userdata); 315 static void onClickOfferTeleport( void *userdata);
315 static void onClickPay( void *userdata); 316 static void onClickPay( void *userdata);
316 static void onClickAddFriend(void* userdata); 317 static void onClickAddFriend(void* userdata);
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index 14e295c..e3da12a 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -318,6 +318,9 @@ BOOL LLPanelDisplay::postBuild()
318 mLightingText = getChild<LLTextBox>("LightingDetailText"); 318 mLightingText = getChild<LLTextBox>("LightingDetailText");
319 mMeshDetailText = getChild<LLTextBox>("MeshDetailText"); 319 mMeshDetailText = getChild<LLTextBox>("MeshDetailText");
320 320
321 childSetValue("toggle_windlight_control", gSavedSettings.getBOOL("EnableWindlightRemote"));
322 mWLControl = gSavedSettings.getBOOL("EnableWindlightRemote");
323
321 refresh(); 324 refresh();
322 325
323 return TRUE; 326 return TRUE;
@@ -700,6 +703,8 @@ void LLPanelDisplay::cancel()
700 gSavedSettings.setU32("WLSkyDetail", mSkyLOD); 703 gSavedSettings.setU32("WLSkyDetail", mSkyLOD);
701 gSavedSettings.setS32("RenderMaxPartCount", mParticleCount); 704 gSavedSettings.setS32("RenderMaxPartCount", mParticleCount);
702 gSavedSettings.setS32("RenderGlowResolutionPow", mPostProcess); 705 gSavedSettings.setS32("RenderGlowResolutionPow", mPostProcess);
706
707 gSavedSettings.setBOOL("EnableWindlightRemote", mWLControl);
703} 708}
704 709
705void LLPanelDisplay::apply() 710void LLPanelDisplay::apply()
@@ -711,6 +716,8 @@ void LLPanelDisplay::apply()
711 { 716 {
712 applyWindowSize(); 717 applyWindowSize();
713 } 718 }
719
720 gSavedSettings.setBOOL("EnableWindlightRemote", childGetValue("toggle_windlight_control").asBoolean());
714} 721}
715 722
716void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) 723void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data)
diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h
index f98e94e..80ef5cb 100644
--- a/linden/indra/newview/llpaneldisplay.h
+++ b/linden/indra/newview/llpaneldisplay.h
@@ -170,6 +170,8 @@ protected:
170 S32 mParticleCount; 170 S32 mParticleCount;
171 S32 mPostProcess; 171 S32 mPostProcess;
172 172
173 BOOL mWLControl;
174
173 static void setGraphicsSettings(LLControlGroup& group); 175 static void setGraphicsSettings(LLControlGroup& group);
174 static void createGroup(); 176 static void createGroup();
175 177
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index f370116..490e40d 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -60,7 +60,6 @@ BOOL LLPanelGeneral::postBuild()
60 childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); 60 childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames"));
61 childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); 61 childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle"));
62 childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); 62 childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout"));
63 childSetValue("rotate_mini_map_checkbox", gSavedSettings.getBOOL("MiniMapRotate"));
64 childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); 63 childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange"));
65 childSetValue("use_system_color_picker_checkbox", gSavedSettings.getBOOL("UseDefaultColorPicker")); 64 childSetValue("use_system_color_picker_checkbox", gSavedSettings.getBOOL("UseDefaultColorPicker"));
66 childSetValue("show_search_panel", gSavedSettings.getBOOL("ShowSearchBar")); 65 childSetValue("show_search_panel", gSavedSettings.getBOOL("ShowSearchBar"));
@@ -96,7 +95,6 @@ void LLPanelGeneral::apply()
96 gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); 95 gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox"));
97 gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); 96 gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox"));
98 gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); 97 gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal());
99 gSavedSettings.setBOOL("MiniMapRotate", childGetValue("rotate_mini_map_checkbox"));
100 gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); 98 gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox"));
101 gSavedSettings.setBOOL("UseDefaultColorPicker", childGetValue("use_system_color_picker_checkbox")); 99 gSavedSettings.setBOOL("UseDefaultColorPicker", childGetValue("use_system_color_picker_checkbox"));
102 gSavedSettings.setBOOL("ShowSearchBar", childGetValue("show_search_panel")); 100 gSavedSettings.setBOOL("ShowSearchBar", childGetValue("show_search_panel"));
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index dd71a0e..9dcf410 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -631,6 +631,10 @@ void LLPanelObject::getState( )
631 } 631 }
632 else 632 else
633 { 633 {
634 mCtrlScaleX->setMaxValue(LLManipScale::getMaxPrimSize());
635 mCtrlScaleY->setMaxValue(LLManipScale::getMaxPrimSize());
636 mCtrlScaleZ->setMaxValue(LLManipScale::getMaxPrimSize());
637
634 // Only allowed to change these parameters for objects 638 // Only allowed to change these parameters for objects
635 // that you have permissions on AND are not attachments. 639 // that you have permissions on AND are not attachments.
636 enabled = root_objectp->permModify(); 640 enabled = root_objectp->permModify();
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 82aeee6..af97e2e 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -4560,6 +4560,11 @@ extern LLGLdouble gGLModelView[16];
4560 4560
4561void LLSelectMgr::updateSilhouettes() 4561void LLSelectMgr::updateSilhouettes()
4562{ 4562{
4563 if (!mRenderSilhouettes || !LLSelectMgr::sRenderSelectionHighlights)
4564 {
4565 return;
4566 }
4567
4563 S32 num_sils_genned = 0; 4568 S32 num_sils_genned = 0;
4564 4569
4565 LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); 4570 LLVector3d cameraPos = gAgent.getCameraPositionGlobal();
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index 127fca2..cdca5d5 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -563,7 +563,7 @@ void LLSpatialGroup::rebuildGeom()
563 563
564void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group) 564void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)
565{ 565{
566 if (group->changeLOD()) 566 if (!LLPipeline::sSkipUpdate && group->changeLOD())
567 { 567 {
568 group->mLastUpdateDistance = group->mDistance; 568 group->mLastUpdateDistance = group->mDistance;
569 group->mLastUpdateViewAngle = group->mViewAngle; 569 group->mLastUpdateViewAngle = group->mViewAngle;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 8d5aa9e..ea08298 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -1025,6 +1025,7 @@ bool idle_startup()
1025 requested_options.push_back("event_categories"); 1025 requested_options.push_back("event_categories");
1026 requested_options.push_back("event_notifications"); 1026 requested_options.push_back("event_notifications");
1027 requested_options.push_back("classified_categories"); 1027 requested_options.push_back("classified_categories");
1028 requested_options.push_back("adult_compliant");
1028 //requested_options.push_back("inventory-targets"); 1029 //requested_options.push_back("inventory-targets");
1029 requested_options.push_back("buddy-list"); 1030 requested_options.push_back("buddy-list");
1030 requested_options.push_back("ui-config"); 1031 requested_options.push_back("ui-config");
diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp
index 6a3415f..e3bd3cd 100644
--- a/linden/indra/newview/llstylemap.cpp
+++ b/linden/indra/newview/llstylemap.cpp
@@ -47,13 +47,13 @@ LLStyleMap::~LLStyleMap()
47 47
48LLStyleMap &LLStyleMap::instance() 48LLStyleMap &LLStyleMap::instance()
49{ 49{
50 static LLStyleMap mStyleMap; 50 static LLStyleMap style_map;
51 return mStyleMap; 51 return style_map;
52} 52}
53 53
54// This is similar to the [] accessor except that if the entry doesn't already exist, 54// This is similar to the [] accessor except that if the entry doesn't already exist,
55// then this will create the entry. 55// then this will create the entry.
56const LLStyleSP &LLStyleMap::lookup(const LLUUID &source) 56const LLStyleSP &LLStyleMap::lookupAgent(const LLUUID &source)
57{ 57{
58 // Find this style in the map or add it if not. This map holds links to residents' profiles. 58 // Find this style in the map or add it if not. This map holds links to residents' profiles.
59 if (find(source) == end()) 59 if (find(source) == end())
@@ -77,6 +77,37 @@ const LLStyleSP &LLStyleMap::lookup(const LLUUID &source)
77 return (*this)[source]; 77 return (*this)[source];
78} 78}
79 79
80// This is similar to lookupAgent for any generic URL encoded style.
81const LLStyleSP &LLStyleMap::lookup(const LLUUID& id, const std::string& link)
82{
83 // Find this style in the map or add it if not.
84 iterator iter = find(id);
85 if (iter == end())
86 {
87 LLStyleSP style(new LLStyle);
88 style->setVisible(true);
89 style->setFontName(LLStringUtil::null);
90 if (id != LLUUID::null && !link.empty())
91 {
92 style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
93 style->setLinkHREF(link);
94 }
95 else
96 style->setColor(LLColor4::white);
97 (*this)[id] = style;
98 }
99 else
100 {
101 LLStyleSP style = (*iter).second;
102 if ( style->getLinkHREF() != link )
103 {
104 style->setLinkHREF(link);
105 }
106 }
107
108 return (*this)[id];
109}
110
80void LLStyleMap::update() 111void LLStyleMap::update()
81{ 112{
82 for (style_map_t::iterator iter = begin(); iter != end(); ++iter) 113 for (style_map_t::iterator iter = begin(); iter != end(); ++iter)
diff --git a/linden/indra/newview/llstylemap.h b/linden/indra/newview/llstylemap.h
index a38d253..f1eada9 100644
--- a/linden/indra/newview/llstylemap.h
+++ b/linden/indra/newview/llstylemap.h
@@ -47,7 +47,8 @@ public:
47 LLStyleMap(); 47 LLStyleMap();
48 ~LLStyleMap(); 48 ~LLStyleMap();
49 // Just like the [] accessor but it will add the entry in if it doesn't exist. 49 // Just like the [] accessor but it will add the entry in if it doesn't exist.
50 const LLStyleSP &lookup(const LLUUID &source); 50 const LLStyleSP &lookupAgent(const LLUUID &source);
51 const LLStyleSP &lookup(const LLUUID &source, const std::string& link);
51 static LLStyleMap &instance(); 52 static LLStyleMap &instance();
52 53
53 // Forces refresh of the entries, call when something changes (e.g. link color). 54 // Forces refresh of the entries, call when something changes (e.g. link color).
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index be0b8eb..71135d7 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -349,6 +349,13 @@ void LLFloaterTexturePicker::updateImageStats()
349 { 349 {
350 mResolutionLabel->setTextArg("[DIMENSIONS]", std::string("[? x ?]")); 350 mResolutionLabel->setTextArg("[DIMENSIONS]", std::string("[? x ?]"));
351 } 351 }
352 if (gAgent.isGodlike())
353 {
354 std::string tstring = "Pick: ";
355 std::string image_id_string = mTexturep->getID().asString();
356 tstring = tstring + image_id_string.replace(24, 35, 12, '*'); // hide last segment to discourage theft
357 setTitle(tstring);
358 }
352 } 359 }
353} 360}
354 361
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 5a21992..b32169d 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -191,7 +191,7 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show)
191 // nothing 191 // nothing
192 break; 192 break;
193 case CLICK_ACTION_SIT: 193 case CLICK_ACTION_SIT:
194 if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // agent not already sitting 194 if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting) && !gSavedSettings.getBOOL("BlockClickSit")) // agent not already sitting
195 { 195 {
196 handle_sit_or_stand(); 196 handle_sit_or_stand();
197 return TRUE; 197 return TRUE;
@@ -687,9 +687,10 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
687 else if (mPick.mObjectID.notNull() 687 else if (mPick.mObjectID.notNull()
688 && !mPick.mPosGlobal.isExactlyZero()) 688 && !mPick.mPosGlobal.isExactlyZero())
689 { 689 {
690 // Hit an object 690 //Zwagoth: No more teleport to HUD attachments. >:o
691 // HACK: Call the last hit position the point we hit on the object 691 if(mPick.getObject().notNull() && mPick.getObject()->isHUDAttachment())
692 //gLastHitPosGlobal += gLastHitObjectOffset; 692 return FALSE;
693
693 handle_go_to(); 694 handle_go_to();
694 return TRUE; 695 return TRUE;
695 } 696 }
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index e83bc2d..8a92963 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -4618,7 +4618,8 @@ class LLToolsEnableUnlink : public view_listener_t
4618 LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && 4618 LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() &&
4619 !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) 4619 !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment())
4620 { 4620 {
4621 if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 4621 if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() > 0 &&
4622 LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() !=
4622 LLSelectMgr::getInstance()->getSelection()->getObjectCount()) 4623 LLSelectMgr::getInstance()->getSelection()->getObjectCount())
4623 { 4624 {
4624 new_value = true; 4625 new_value = true;
@@ -6720,7 +6721,10 @@ void handle_selected_texture_info(void*)
6720 S32 height = img->getHeight(); 6721 S32 height = img->getHeight();
6721 S32 width = img->getWidth(); 6722 S32 width = img->getWidth();
6722 S32 components = img->getComponents(); 6723 S32 components = img->getComponents();
6723 msg = llformat("%dx%d %s on face ", 6724 std::string image_id_string = image_id.asString();
6725 image_id_string = image_id_string.replace(24, 35, 12, '*') + " "; // hide last segment to discourage theft
6726 msg = llformat("%s%dx%d %s on face ",
6727 image_id_string.c_str(),
6724 width, 6728 width,
6725 height, 6729 height,
6726 (components == 4 ? "alpha" : "opaque")); 6730 (components == 4 ? "alpha" : "opaque"));
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 1b2ba22..d5d9324 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -1266,7 +1266,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1266 if (gCacheName->getName(info->mFromID, first_name, last_name)) 1266 if (gCacheName->getName(info->mFromID, first_name, last_name))
1267 { 1267 {
1268// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) 1268// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e)
1269 if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (gRlvHandler.isAgentNearby(info->mFromID)) ) 1269 if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (gRlvHandler.isAgentNearby(info->mFromID)) )
1270 { 1270 {
1271 first_name = gRlvHandler.getAnonym(first_name.append(" ").append(last_name)); 1271 first_name = gRlvHandler.getAnonym(first_name.append(" ").append(last_name));
1272 last_name.clear(); 1272 last_name.clear();
@@ -1287,12 +1287,15 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1287 { 1287 {
1288 // *TODO:translate -> [FIRST] [LAST] 1288 // *TODO:translate -> [FIRST] [LAST]
1289// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e) 1289// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-08 (RLVa-1.0.0e)
1290 if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (gRlvHandler.isAgentNearby(info->mFromID)) ) 1290 if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (gRlvHandler.isAgentNearby(info->mFromID)) )
1291 { 1291 {
1292 args["[NAME]"] = gRlvHandler.getAnonym(info->mFromName); 1292 args["[NAME]"] = gRlvHandler.getAnonym(info->mFromName);
1293 } 1293 }
1294// [/RLVa:KB] 1294// [/RLVa:KB]
1295 //args["[NAME]"] = info->mFromName; 1295 else
1296 {
1297 args["[NAME]"] = info->mFromName;
1298 }
1296 LLNotifyBox::showXml("UserGiveItem", args, 1299 LLNotifyBox::showXml("UserGiveItem", args,
1297 &inventory_offer_callback, (void*)info); 1300 &inventory_offer_callback, (void*)info);
1298 } 1301 }
@@ -1921,15 +1924,51 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1921 break; 1924 break;
1922 1925
1923 case IM_FROM_TASK: 1926 case IM_FROM_TASK:
1924 if (is_busy && !is_owned_by_me)
1925 { 1927 {
1926 return; 1928 if (is_busy && !is_owned_by_me)
1929 {
1930 return;
1931 }
1932 chat.mText = name + separator_string + message.substr(message_offset);
1933 chat.mFromName = name;
1934
1935 // Build a link to open the object IM info window.
1936 std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size);
1937
1938 LLSD query_string;
1939 query_string["owner"] = from_id;
1940 query_string["slurl"] = location.c_str();
1941 query_string["name"] = name;
1942 if (from_group)
1943 {
1944 query_string["groupowned"] = "true";
1945 }
1946
1947 if (session_id.notNull())
1948 {
1949 chat.mFromID = session_id;
1950 }
1951 else
1952 {
1953 // This message originated on a region without the updated code for task id and slurl information.
1954 // We just need a unique ID for this object that isn't the owner ID.
1955 // If it is the owner ID it will overwrite the style that contains the link to that owner's profile.
1956 // This isn't ideal - it will make 1 style for all objects owned by the the same person/group.
1957 // This works because the only thing we can really do in this case is show the owner name and link to their profile.
1958 chat.mFromID = from_id ^ gAgent.getSessionID();
1959 }
1960
1961 std::ostringstream link;
1962 link << "secondlife:///app/objectim/" << session_id
1963 << LLURI::mapToQueryString(query_string);
1964
1965 chat.mURL = link.str();
1966
1967 // Note: lie to LLFloaterChat::addChat(), pretending that this is NOT an IM, because
1968 // IMs from objcts don't open IM sessions.
1969 chat.mSourceType = CHAT_SOURCE_OBJECT;
1970 LLFloaterChat::addChat(chat, FALSE, FALSE);
1927 } 1971 }
1928 chat.mText = name + separator_string + message.substr(message_offset);
1929 // Note: lie to LLFloaterChat::addChat(), pretending that this is NOT an IM, because
1930 // IMs from objcts don't open IM sessions.
1931 chat.mSourceType = CHAT_SOURCE_OBJECT;
1932 LLFloaterChat::addChat(chat, FALSE, FALSE);
1933 break; 1972 break;
1934 case IM_FROM_TASK_AS_ALERT: 1973 case IM_FROM_TASK_AS_ALERT:
1935 if (is_busy && !is_owned_by_me) 1974 if (is_busy && !is_owned_by_me)
@@ -3007,6 +3046,10 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3007 // appropriate. 3046 // appropriate.
3008 LLVector3 shift_vector = regionp->getPosRegionFromGlobal( 3047 LLVector3 shift_vector = regionp->getPosRegionFromGlobal(
3009 gAgent.getRegion()->getOriginGlobal()); 3048 gAgent.getRegion()->getOriginGlobal());
3049 // don't shift objects, if teleporting more than about 1000 sims, as
3050 // for long teleports shifting objects garbles the view at the target region
3051 if (shift_vector.lengthSquared() > 6.5e10f)
3052 shift_vector = LLVector3::zero;
3010 gAgent.setRegion(regionp); 3053 gAgent.setRegion(regionp);
3011 gObjectList.shiftObjects(shift_vector); 3054 gObjectList.shiftObjects(shift_vector);
3012 gAssetStorage->setUpstream(msg->getSender()); 3055 gAssetStorage->setUpstream(msg->getSender());
@@ -3112,6 +3155,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3112 3155
3113 // If the server version has changed, display an info box and offer 3156 // If the server version has changed, display an info box and offer
3114 // to display the release notes, unless this is the initial log in. 3157 // to display the release notes, unless this is the initial log in.
3158 // Also verify we're on an OpenSimulator here.
3115 if (gLastVersionChannel == version_channel) 3159 if (gLastVersionChannel == version_channel)
3116 { 3160 {
3117 return; 3161 return;
@@ -3123,6 +3167,15 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3123 "ServerVersionChanged", display_release_notes, NULL); 3167 "ServerVersionChanged", display_release_notes, NULL);
3124 } 3168 }
3125 3169
3170 if (version_channel.find("OpenSim") != std::string::npos)
3171 {
3172 gSavedSettings.setBOOL("LoggedIntoOpenSim", TRUE);
3173 }
3174 else
3175 {
3176 gSavedSettings.setBOOL("LoggedIntoOpenSim", FALSE);
3177 }
3178
3126 gLastVersionChannel = version_channel; 3179 gLastVersionChannel = version_channel;
3127} 3180}
3128 3181
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index 78c1730..cf37058 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -165,6 +165,8 @@ U64 LLViewerObjectList::getIndex(const U32 local_id,
165 165
166BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) 166BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object)
167{ 167{
168 if (object.mRegionp)
169 {
168 U32 local_id = object.mLocalID; 170 U32 local_id = object.mLocalID;
169 LLHost region_host = object.getRegion()->getHost(); 171 LLHost region_host = object.getRegion()->getHost();
170 U32 ip = region_host.getAddress(); 172 U32 ip = region_host.getAddress();
@@ -175,6 +177,8 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object)
175 U64 indexid = (((U64)index) << 32) | (U64)local_id; 177 U64 indexid = (((U64)index) << 32) | (U64)local_id;
176 return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE; 178 return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE;
177 } 179 }
180 return FALSE;
181}
178 182
179void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id, 183void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
180 const U32 local_id, 184 const U32 local_id,
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp
index 72a8a80..95c6ae2 100644
--- a/linden/indra/newview/llviewerthrottle.cpp
+++ b/linden/indra/newview/llviewerthrottle.cpp
@@ -49,7 +49,7 @@ const F32 MAX_FRACTIONAL = 1.5f;
49const F32 MIN_FRACTIONAL = 0.2f; 49const F32 MIN_FRACTIONAL = 0.2f;
50 50
51const F32 MIN_BANDWIDTH = 50.f; 51const F32 MIN_BANDWIDTH = 50.f;
52const F32 MAX_BANDWIDTH = 1500.f; 52const F32 MAX_BANDWIDTH = 5000.f;
53const F32 STEP_FRACTIONAL = 0.1f; 53const F32 STEP_FRACTIONAL = 0.1f;
54const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s 54const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s
55const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s 55const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index bc7a2f4..cd8d1c0 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -79,8 +79,13 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32
79 // Initialize the texture matrix to defaults. 79 // Initialize the texture matrix to defaults.
80 for (S32 i = 0; i < CORNER_COUNT; ++i) 80 for (S32 i = 0; i < CORNER_COUNT; ++i)
81 { 81 {
82 mStartHeight[i] = gSavedSettings.getF32("TerrainColorStartHeight"); 82 //Zwag: I'm making these static values because they are a LARGE performance problem
83 mHeightRange[i] = gSavedSettings.getF32("TerrainColorHeightRange"); 83 // right now, and I've never heard of anyone changing them, they are not referenced
84 // elsewhere, and have not changed in defaults since the original source code release.
85 // We can move these back to signal connected statics if they really become important
86 // variables in the future.
87 mStartHeight[i] = 20.f;//gSavedSettings.getF32("TerrainColorStartHeight");
88 mHeightRange[i] = 60.f;//gSavedSettings.getF32("TerrainColorHeightRange");
84 } 89 }
85 mTexScaleX = 16.f; 90 mTexScaleX = 16.f;
86 mTexScaleY = 16.f; 91 mTexScaleY = 16.f;
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 158977e..24272d8 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -3261,7 +3261,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
3261 if (title && title->getString() && title->getString()[0] != '\0') 3261 if (title && title->getString() && title->getString()[0] != '\0')
3262 { 3262 {
3263 line += title->getString(); 3263 line += title->getString();
3264 LLStringFn::replace_nonprintable(line,LL_UNKNOWN_CHAR); 3264 //LLStringFn::replace_nonprintable(line,LL_UNKNOWN_CHAR); IMP-136 -- MC
3265 line += "\n"; 3265 line += "\n";
3266 line += firstname->getString(); 3266 line += firstname->getString();
3267 } 3267 }
@@ -3321,7 +3321,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
3321 mNameMute = is_muted; 3321 mNameMute = is_muted;
3322 mNameAppearance = is_appearance; 3322 mNameAppearance = is_appearance;
3323 mTitle = title ? title->getString() : ""; 3323 mTitle = title ? title->getString() : "";
3324 LLStringFn::replace_nonprintable(mTitle,LL_UNKNOWN_CHAR); 3324 //LLStringFn::replace_nonprintable(mTitle,LL_UNKNOWN_CHAR); IMP-136 -- MC
3325 mNameString = utf8str_to_wstring(line); 3325 mNameString = utf8str_to_wstring(line);
3326 new_name = TRUE; 3326 new_name = TRUE;
3327 } 3327 }
diff --git a/linden/indra/newview/llwindlightremotectrl.cpp b/linden/indra/newview/llwindlightremotectrl.cpp
new file mode 100644
index 0000000..591b413
--- /dev/null
+++ b/linden/indra/newview/llwindlightremotectrl.cpp
@@ -0,0 +1,267 @@
1/**
2* @file llwindlightremotectrl.cpp
3* @brief toolbar remote for windlight options and presets
4*
5* $LicenseInfo:firstyear=2009&license=viewergpl$
6*
7* Copyright (c) 2009, McCabe Maxsted
8*
9* Imprudence Viewer Source Code
10* The source code in this file ("Source Code") is provided to you
11* under the terms of the GNU General Public License, version 2.0
12* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
13* this distribution, or online at
14* http://secondlifegrid.net/programs/open_source/licensing/gplv2
15*
16* There are special exceptions to the terms and conditions of the GPL as
17* it is applied to this Source Code. View the full text of the exception
18* in the file doc/FLOSS-exception.txt in this software distribution, or
19* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
20*
21* By copying, modifying or distributing this software, you acknowledge
22* that you have read and understood your obligations described above,
23* and agree to abide by those obligations.
24*
25* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
26* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
27* COMPLETENESS OR PERFORMANCE.
28* $/LicenseInfo$
29*/
30
31#include "llviewerprecompiledheaders.h"
32
33#include "llwindlightremotectrl.h"
34
35#include "llbutton.h"
36#include "llcombobox.h"
37#include "llfloaterenvsettings.h"
38#include "llfloaterwindlight.h"
39#include "lloverlaybar.h"
40#include "lluictrlfactory.h"
41#include "llwlparammanager.h"
42#include "llviewercontrol.h"
43
44
45class LLWindlightRemoteObserver : public LLWLPresetsObserver
46{
47public:
48 LLWindlightRemoteObserver(LLWindlightRemoteCtrl* wind_rem) : mWindlightRemote(wind_rem){}
49 virtual ~LLWindlightRemoteObserver() {}
50 virtual void changed() { mWindlightRemote->refreshPresets(); }
51private:
52 LLWindlightRemoteCtrl* mWindlightRemote;
53};
54
55
56LLWindlightRemoteCtrl::LLWindlightRemoteCtrl()
57{
58 mPresetsCombo = NULL;
59 mObserver = NULL;
60 setIsChrome(TRUE);
61
62 build();
63
64 setFocusRoot(TRUE);
65}
66
67LLWindlightRemoteCtrl::~LLWindlightRemoteCtrl()
68{
69 delete mObserver;
70 mObserver = NULL;
71}
72
73void LLWindlightRemoteCtrl::draw()
74{
75 LLButton* expand_button = getChild<LLButton>("Popup");
76 if (expand_button)
77 {
78 if (expand_button->getToggleState())
79 {
80 expand_button->setImageOverlay("arrow_down.tga");
81 }
82 else
83 {
84 expand_button->setImageOverlay("arrow_up.tga");
85 }
86 }
87
88 LLPanel::draw();
89}
90
91void LLWindlightRemoteCtrl::build()
92{
93 if (gSavedSettings.getBOOL("ShowWindlightSettingsPopup"))
94 {
95 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_windlight_remote_expanded.xml");
96 }
97 else
98 {
99 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_windlight_remote.xml");
100 }
101}
102
103BOOL LLWindlightRemoteCtrl::postBuild()
104{
105
106 childSetAction("Environment", onClickToggleEnvironment, this);
107 childSetAction("Popup", onClickPopupBtn, this);
108
109 mPresetsCombo = getChild<LLComboBox>("Presets");
110 if (mPresetsCombo)
111 {
112 mPresetsCombo->setCommitCallback(onCommitPreset);
113 mPresetsCombo->setCallbackUserData(this);
114
115 // set up observer to follow changes
116 mObserver = new LLWindlightRemoteObserver(this);
117 LLWLParamManager::addObserver(mObserver);
118
119 // refresh list from current presets
120 refreshPresets();
121 }
122
123 return TRUE;
124}
125
126void LLWindlightRemoteCtrl::refreshPresets()
127{
128 if (mPresetsCombo)
129 {
130 // snag current preset
131 LLWLParamManager * param_mgr = LLWLParamManager::instance();
132 LLWLParamSet& currentParams = param_mgr->mCurParams;
133
134 // clear in case presets names have changed
135 mPresetsCombo->clearRows();
136
137 std::map<std::string, LLWLParamSet>::iterator mIt =
138 param_mgr->mParamList.begin();
139 for(; mIt != param_mgr->mParamList.end(); mIt++)
140 {
141 mPresetsCombo->add(mIt->first);
142 }
143
144 // insert separator and add World menu options
145 mPresetsCombo->addSeparator(ADD_BOTTOM);
146 mPresetsCombo->addSimpleElement(getString("sunrise"), ADD_BOTTOM);
147 mPresetsCombo->addSimpleElement(getString("noon"), ADD_BOTTOM);
148 mPresetsCombo->addSimpleElement(getString("sunset"), ADD_BOTTOM);
149 mPresetsCombo->addSimpleElement(getString("midnight"), ADD_BOTTOM);
150 mPresetsCombo->addSimpleElement(getString("revert_region"), ADD_BOTTOM);
151
152 if (mPresetsCombo->getSelectedItemLabel() != currentParams.mName &&
153 !currentParams.mName.empty())
154 {
155 mPresetsCombo->selectByValue(LLSD(currentParams.mName));
156 }
157 else
158 {
159 mPresetsCombo->selectByValue(LLSD("Default"));
160 }
161 }
162}
163
164// static
165void LLWindlightRemoteCtrl::onCommitPreset(LLUICtrl* ctrl, void* data)
166{
167 LLWindlightRemoteCtrl* self = (LLWindlightRemoteCtrl*)data;
168
169 LLCtrlListInterface* presets = self->mPresetsCombo ? self->mPresetsCombo->getListInterface() : NULL;
170 if (presets)
171 {
172 S32 index = presets->getFirstSelectedIndex();
173 if (index <= 0)
174 {
175 // Open Advanced Sky
176 LLFloaterWindLight::show();
177 return;
178 }
179
180 // check for World menu options; if none, apply preset
181 std::string selected = self->mPresetsCombo->getSelectedValue().asString();
182
183 if (selected == self->getString("sunrise"))
184 {
185 // set the value, turn off animation
186 LLWLParamManager::instance()->mAnimator.setDayTime(0.25);
187 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
188 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
189
190 // then call update once
191 LLWLParamManager::instance()->mAnimator.update(
192 LLWLParamManager::instance()->mCurParams);
193 }
194 else if (selected == self->getString("noon"))
195 {
196 // set the value, turn off animation
197 LLWLParamManager::instance()->mAnimator.setDayTime(0.567);
198 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
199 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
200
201 // then call update once
202 LLWLParamManager::instance()->mAnimator.update(
203 LLWLParamManager::instance()->mCurParams);
204 }
205 else if (selected == self->getString("sunset"))
206 {
207 // set the value, turn off animation
208 LLWLParamManager::instance()->mAnimator.setDayTime(0.75);
209 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
210 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
211
212 // then call update once
213 LLWLParamManager::instance()->mAnimator.update(
214 LLWLParamManager::instance()->mCurParams);
215 }
216 else if (selected == self->getString("midnight"))
217 {
218 // set the value, turn off animation
219 LLWLParamManager::instance()->mAnimator.setDayTime(0.0);
220 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
221 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
222
223 // then call update once
224 LLWLParamManager::instance()->mAnimator.update(
225 LLWLParamManager::instance()->mCurParams);
226 }
227 else if (selected == self->getString("revert_region"))
228 {
229 LLWLParamManager::instance()->mAnimator.mIsRunning = true;
230 LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
231 }
232 else
233 {
234 // Apply preset
235 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
236 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
237 LLWLParamManager::instance()->loadPreset(selected, true);
238 }
239 }
240}
241
242// static
243void LLWindlightRemoteCtrl::onClickToggleEnvironment(void* data)
244{
245 // if evn settings not there or is hidden, show it
246 if( !LLFloaterEnvSettings::isOpen() ||
247 !LLFloaterEnvSettings::instance()->getVisible())
248 {
249 LLFloaterEnvSettings::show();
250
251 // otherwise, close it button acts like a toggle
252 }
253 else
254 {
255 LLFloaterEnvSettings::instance()->close();
256 }
257}
258
259//static
260void LLWindlightRemoteCtrl::onClickPopupBtn(void* data)
261{
262 LLWindlightRemoteCtrl* remotep = (LLWindlightRemoteCtrl*)data;
263
264 remotep->deleteAllChildren();
265 remotep->build();
266 gOverlayBar->layoutButtons();
267}
diff --git a/linden/indra/newview/llwindlightremotectrl.h b/linden/indra/newview/llwindlightremotectrl.h
new file mode 100644
index 0000000..e4ad2d5
--- /dev/null
+++ b/linden/indra/newview/llwindlightremotectrl.h
@@ -0,0 +1,60 @@
1/**
2* @file llwindlightremotectrl.h
3* @brief toolbar remote for windlight options and presets
4*
5* $LicenseInfo:firstyear=2009&license=viewergpl$
6*
7* Copyright (c) 2009, McCabe Maxsted
8*
9* Imprudence Viewer Source Code
10* The source code in this file ("Source Code") is provided to you
11* under the terms of the GNU General Public License, version 2.0
12* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
13* this distribution, or online at
14* http://secondlifegrid.net/programs/open_source/licensing/gplv2
15*
16* There are special exceptions to the terms and conditions of the GPL as
17* it is applied to this Source Code. View the full text of the exception
18* in the file doc/FLOSS-exception.txt in this software distribution, or
19* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
20*
21* By copying, modifying or distributing this software, you acknowledge
22* that you have read and understood your obligations described above,
23* and agree to abide by those obligations.
24*
25* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
26* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
27* COMPLETENESS OR PERFORMANCE.
28* $/LicenseInfo$
29*/
30
31#ifndef LL_LLWINDLIGHTREMOTECTRL_H
32#define LL_LLWINDLIGHTREMOTECTRL_H
33
34#include "llpanel.h"
35
36class LLComboBox;
37class LLWLPresetsObserver;
38
39class LLWindlightRemoteCtrl : public LLPanel
40{
41public:
42 LLWindlightRemoteCtrl();
43 virtual ~LLWindlightRemoteCtrl();
44 /*virtual*/ BOOL postBuild();
45 /*virtual*/ void draw();
46
47 void refreshPresets();
48
49private:
50 LLComboBox* mPresetsCombo;
51 LLWLPresetsObserver* mObserver;
52
53 void build();
54
55 static void onCommitPreset(LLUICtrl* ctrl, void* data);
56 static void onClickToggleEnvironment(void* data);
57 static void onClickPopupBtn(void* data);
58};
59
60#endif
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index c1723f7..ba3d070 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -62,6 +62,7 @@
62#include "curl/curl.h" 62#include "curl/curl.h"
63 63
64LLWLParamManager * LLWLParamManager::sInstance = NULL; 64LLWLParamManager * LLWLParamManager::sInstance = NULL;
65std::vector<LLWLPresetsObserver*> LLWLParamManager::sObservers;
65 66
66LLWLParamManager::LLWLParamManager() : 67LLWLParamManager::LLWLParamManager() :
67 68
@@ -238,6 +239,8 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
238 getParamSet(name, mCurParams); 239 getParamSet(name, mCurParams);
239 propagateParameters(); 240 propagateParameters();
240 } 241 }
242
243 notifyObservers();
241} 244}
242 245
243void LLWLParamManager::savePreset(const std::string & name) 246void LLWLParamManager::savePreset(const std::string & name)
@@ -264,6 +267,7 @@ void LLWLParamManager::savePreset(const std::string & name)
264 presetsXML.close(); 267 presetsXML.close();
265 268
266 propagateParameters(); 269 propagateParameters();
270 notifyObservers();
267} 271}
268 272
269void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader) 273void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
@@ -538,6 +542,8 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_
538 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); 542 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
539 } 543 }
540 544
545 notifyObservers();
546
541 return true; 547 return true;
542} 548}
543 549
@@ -566,3 +572,37 @@ LLWLParamManager * LLWLParamManager::instance()
566 572
567 return sInstance; 573 return sInstance;
568} 574}
575
576// static
577void LLWLParamManager::addObserver(LLWLPresetsObserver* observer)
578{
579 sObservers.push_back(observer);
580}
581
582// static
583void LLWLParamManager::removeObserver(LLWLPresetsObserver* observer)
584{
585 std::vector<LLWLPresetsObserver*>::iterator it;
586 it = std::find(sObservers.begin(), sObservers.end(), observer);
587 if (it != sObservers.end())
588 {
589 sObservers.erase(it);
590 }
591}
592
593// Call this method when it's time to update everyone on a new state.
594// Copy the list because an observer could respond by removing itself
595// from the list. Static
596void LLWLParamManager::notifyObservers()
597{
598 lldebugs << "LLWLPresetsObserver::notifyObservers" << llendl;
599
600 std::vector<LLWLPresetsObserver*> observers = sObservers;
601
602 std::vector<LLWLPresetsObserver*>::iterator it;
603 for (it = observers.begin(); it != observers.end(); ++it)
604 {
605 LLWLPresetsObserver* observer = *it;
606 observer->changed();
607 }
608}
diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h
index 1d9291c..355d3e3 100644
--- a/linden/indra/newview/llwlparammanager.h
+++ b/linden/indra/newview/llwlparammanager.h
@@ -40,6 +40,13 @@
40#include "llviewercamera.h" 40#include "llviewercamera.h"
41 41
42class LLGLSLShader; 42class LLGLSLShader;
43
44class LLWLPresetsObserver
45{
46public:
47 virtual ~LLWLPresetsObserver() { };
48 virtual void changed() = 0;
49};
43 50
44// color control 51// color control
45struct WLColorControl { 52struct WLColorControl {
@@ -195,6 +202,11 @@ public:
195 // singleton pattern implementation 202 // singleton pattern implementation
196 static LLWLParamManager * instance(); 203 static LLWLParamManager * instance();
197 204
205 // manage observers
206 static void addObserver(LLWLPresetsObserver* observer);
207 static void removeObserver(LLWLPresetsObserver* observer);
208 static void notifyObservers();
209
198public: 210public:
199 211
200 // helper variables 212 // helper variables
@@ -249,12 +261,13 @@ public:
249 F32 mDomeRadius; 261 F32 mDomeRadius;
250 262
251 // list of all the parameters, listed by name 263 // list of all the parameters, listed by name
252 std::map<std::string, LLWLParamSet> mParamList; 264 std::map<std::string, LLWLParamSet> mParamList;
253
254 265
255private: 266private:
256 // our parameter manager singleton instance 267 // our parameter manager singleton instance
257 static LLWLParamManager * sInstance; 268 static LLWLParamManager * sInstance;
269
270 static std::vector<LLWLPresetsObserver*> sObservers;
258 271
259}; 272};
260 273
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 5e51e6f..947bdfd 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -71,9 +71,10 @@ const S32 SCROLL_HINT_WIDTH = 65;
71const F32 BIG_DOT_RADIUS = 5.f; 71const F32 BIG_DOT_RADIUS = 5.f;
72BOOL LLWorldMapView::sHandledLastClick = FALSE; 72BOOL LLWorldMapView::sHandledLastClick = FALSE;
73 73
74LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL;
75LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL; 74LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL;
76LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL; 75LLUIImagePtr LLWorldMapView::sAvatarYouImage = NULL;
76LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL;
77LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL;
77LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL; 78LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;
78LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL; 79LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL;
79 80
@@ -113,11 +114,12 @@ std::map<std::string,std::string> LLWorldMapView::sStringsMap;
113 114
114void LLWorldMapView::initClass() 115void LLWorldMapView::initClass()
115{ 116{
116 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga");
117 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); 117 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga");
118 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); 118 sAvatarYouImage = LLUI::getUIImage("map_avatar_16.tga");
119 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); 119 sAvatarYouLargeImage = LLUI::getUIImage("map_avatar_you_32.tga");
120 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); 120 sAvatarLevelImage = LLUI::getUIImage("map_avatar_32.tga");
121 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_32.tga");
122 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_32.tga");
121 123
122 sHomeImage = LLUI::getUIImage("map_home.tga"); 124 sHomeImage = LLUI::getUIImage("map_home.tga");
123 sTelehubImage = LLUI::getUIImage("map_telehub.tga"); 125 sTelehubImage = LLUI::getUIImage("map_telehub.tga");
@@ -137,9 +139,10 @@ void LLWorldMapView::initClass()
137// static 139// static
138void LLWorldMapView::cleanupClass() 140void LLWorldMapView::cleanupClass()
139{ 141{
140 sAvatarYouSmallImage = NULL;
141 sAvatarSmallImage = NULL; 142 sAvatarSmallImage = NULL;
142 sAvatarLargeImage = NULL; 143 sAvatarYouImage = NULL;
144 sAvatarYouLargeImage = NULL;
145 sAvatarLevelImage = NULL;
143 sAvatarAboveImage = NULL; 146 sAvatarAboveImage = NULL;
144 sAvatarBelowImage = NULL; 147 sAvatarBelowImage = NULL;
145 148
@@ -606,7 +609,11 @@ void LLWorldMapView::draw()
606 gGL.end(); 609 gGL.end();
607 } 610 }
608 611
609 // If this is mature, and you are not, draw a line across it 612 // As part of the AO project, we no longer want to draw access indicators;
613 // it's too complicated to get all the rules straight and will only
614 // cause confusion.
615 /**********************
616 // If this is mature, and you are not, draw a line across it
610 if (info->mAccess != SIM_ACCESS_DOWN 617 if (info->mAccess != SIM_ACCESS_DOWN
611 && info->mAccess > SIM_ACCESS_PG 618 && info->mAccess > SIM_ACCESS_PG
612 && gAgent.isTeen()) 619 && gAgent.isTeen())
@@ -622,6 +629,7 @@ void LLWorldMapView::draw()
622 gGL.vertex2f(right, top); 629 gGL.vertex2f(right, top);
623 gGL.end(); 630 gGL.end();
624 } 631 }
632 **********************/
625 633
626 // Draw the region name in the lower left corner 634 // Draw the region name in the lower left corner
627 LLFontGL* font = LLFontGL::sSansSerifSmall; 635 LLFontGL* font = LLFontGL::sSansSerifSmall;
@@ -651,6 +659,33 @@ void LLWorldMapView::draw()
651 { 659 {
652 mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str()); 660 mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str());
653 } 661 }
662 else if (gSavedSettings.getBOOL("MapShowAgentCount") && gSavedSettings.getBOOL("MapShowPeople"))
663 {
664 // Display the agent count after the region name
665 S32 agent_count = LLWorldMap::getInstance()->mNumAgents[handle];
666 LLViewerRegion *region = gAgent.getRegion();
667
668 if (region && region->getHandle() == info->mHandle)
669 {
670 ++agent_count; // Bump by 1 if we're in this region
671 }
672
673 if (agent_count > 0)
674 {
675 //TODO: move this and the tooltip strings into XML
676 std::string count = llformat("%d %s", agent_count, agent_count > 1 ? "avatars" : "avatar");
677 font->renderUTF8(
678 count, 0,
679 llfloor(left + 3),
680 llfloor(bottom + 20),
681 LLColor4::white,
682 LLFontGL::LEFT,
683 LLFontGL::BASELINE,
684 LLFontGL::DROP_SHADOW);
685
686 mesg = info->mName;
687 }
688 }
654 else 689 else
655 { 690 {
656 mesg = info->mName; 691 mesg = info->mName;
@@ -732,7 +767,7 @@ void LLWorldMapView::draw()
732 767
733 // Now draw your avatar after all that other stuff. 768 // Now draw your avatar after all that other stuff.
734 LLVector3d pos_global = gAgent.getPositionGlobal(); 769 LLVector3d pos_global = gAgent.getPositionGlobal();
735 drawImage(pos_global, sAvatarLargeImage); 770 drawImage(pos_global, sAvatarYouImage);
736 771
737 LLVector3 pos_map = globalPosToView(pos_global); 772 LLVector3 pos_map = globalPosToView(pos_global);
738 if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) 773 if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY])))
@@ -1161,11 +1196,11 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* stic
1161 1196
1162 if (agent_count == 1) 1197 if (agent_count == 1)
1163 { 1198 {
1164 message += "person"; 1199 message += "avatar";
1165 } 1200 }
1166 else 1201 else
1167 { 1202 {
1168 message += "people"; 1203 message += "avatars";
1169 } 1204 }
1170 } 1205 }
1171 } 1206 }
@@ -1241,7 +1276,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
1241 F32 dot_radius) 1276 F32 dot_radius)
1242{ 1277{
1243 const F32 HEIGHT_THRESHOLD = 7.f; 1278 const F32 HEIGHT_THRESHOLD = 7.f;
1244 LLUIImagePtr dot_image = sAvatarSmallImage; 1279 LLUIImagePtr dot_image = sAvatarLevelImage;
1245 if(relative_z < -HEIGHT_THRESHOLD) 1280 if(relative_z < -HEIGHT_THRESHOLD)
1246 { 1281 {
1247 dot_image = sAvatarBelowImage; 1282 dot_image = sAvatarBelowImage;
@@ -1250,9 +1285,13 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
1250 { 1285 {
1251 dot_image = sAvatarAboveImage; 1286 dot_image = sAvatarAboveImage;
1252 } 1287 }
1288
1289 S32 dot_width = llround(dot_radius * 2.f);
1253 dot_image->draw( 1290 dot_image->draw(
1254 llround(x_pixels) - dot_image->getWidth()/2, 1291 llround(x_pixels - dot_radius),
1255 llround(y_pixels) - dot_image->getHeight()/2, 1292 llround(y_pixels - dot_radius),
1293 dot_width,
1294 dot_width,
1256 color); 1295 color);
1257} 1296}
1258 1297
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index b97dfb5..b6ab855 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -136,11 +136,13 @@ protected:
136public: 136public:
137 LLColor4 mBackgroundColor; 137 LLColor4 mBackgroundColor;
138 138
139 static LLUIImagePtr sAvatarYouSmallImage;
140 static LLUIImagePtr sAvatarSmallImage; 139 static LLUIImagePtr sAvatarSmallImage;
141 static LLUIImagePtr sAvatarLargeImage; 140 static LLUIImagePtr sAvatarYouImage;
141 static LLUIImagePtr sAvatarYouLargeImage;
142 static LLUIImagePtr sAvatarLevelImage;
142 static LLUIImagePtr sAvatarAboveImage; 143 static LLUIImagePtr sAvatarAboveImage;
143 static LLUIImagePtr sAvatarBelowImage; 144 static LLUIImagePtr sAvatarBelowImage;
145
144 static LLUIImagePtr sTelehubImage; 146 static LLUIImagePtr sTelehubImage;
145 static LLUIImagePtr sInfohubImage; 147 static LLUIImagePtr sInfohubImage;
146 static LLUIImagePtr sHomeImage; 148 static LLUIImagePtr sHomeImage;
diff --git a/linden/indra/newview/skins/default/colors_base.xml b/linden/indra/newview/skins/default/colors_base.xml
index 42cb0ac..9ad1787 100644
--- a/linden/indra/newview/skins/default/colors_base.xml
+++ b/linden/indra/newview/skins/default/colors_base.xml
@@ -69,7 +69,9 @@
69<TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> 69<TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards -->
70<TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> 70<TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor -->
71<ScriptBgReadOnlyColor value="100, 100, 100, 255" /> <!-- Not used --> 71<ScriptBgReadOnlyColor value="100, 100, 100, 255" /> <!-- Not used -->
72 72<TextLinkColor value="144, 165, 208, 255"/>
73<TextLinkHoverColor value="255, 255, 255, 255"/>
74
73<!-- LISTBOXES --> 75<!-- LISTBOXES -->
74<ScrollBgReadOnlyColor value="200, 209, 204, 255" /> <!-- Background of read only lists --> 76<ScrollBgReadOnlyColor value="200, 209, 204, 255" /> <!-- Background of read only lists -->
75<ScrollBgWriteableColor value="200, 209, 204, 255" /> <!-- Background of editable lists, e.g. groups--> 77<ScrollBgWriteableColor value="200, 209, 204, 255" /> <!-- Background of editable lists, e.g. groups-->
@@ -160,6 +162,7 @@
160<MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> 162<MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color -->
161<MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> 163<MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color -->
162<MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> 164<MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color -->
165<MapSelected value="255, 0, 0, 255" /> <!-- Selected avatars' glyph color -->
163 166
164 <!-- MINI-MAP --> 167 <!-- MINI-MAP -->
165<NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> 168<NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background -->
diff --git a/linden/indra/newview/skins/default/textures/arrow_left.tga b/linden/indra/newview/skins/default/textures/arrow_left.tga
new file mode 100644
index 0000000..68e6280
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/arrow_left.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/arrow_right.tga b/linden/indra/newview/skins/default/textures/arrow_right.tga
new file mode 100644
index 0000000..7a5a30e
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/arrow_right.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_32.tga
new file mode 100644
index 0000000..aebeab4
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/map_avatar_32.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga
new file mode 100644
index 0000000..65bd056
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/map_avatar_above_32.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga
new file mode 100644
index 0000000..496c44b
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/map_avatar_below_32.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga b/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga
new file mode 100644
index 0000000..782207e
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/map_avatar_you_32.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/textures.xml b/linden/indra/newview/skins/default/textures/textures.xml
index 9e1d9b5..9b0e4c7 100644
--- a/linden/indra/newview/skins/default/textures/textures.xml
+++ b/linden/indra/newview/skins/default/textures/textures.xml
@@ -150,7 +150,6 @@
150 150
151 <texture name="map_avatar_16.tga"/> 151 <texture name="map_avatar_16.tga"/>
152 <texture name="map_avatar_8.tga"/> 152 <texture name="map_avatar_8.tga"/>
153 <texture name="map_avatar_you_8.tga"/>
154 <texture name="map_event.tga"/> 153 <texture name="map_event.tga"/>
155 <texture name="map_event_mature.tga"/> 154 <texture name="map_event_mature.tga"/>
156 <texture name="map_home.tga"/> 155 <texture name="map_home.tga"/>
@@ -365,6 +364,9 @@
365 <texture name="icn_label_music.tga"/> 364 <texture name="icn_label_music.tga"/>
366 <texture name="icn_label_media.tga"/> 365 <texture name="icn_label_media.tga"/>
367 <texture name="arrow_down.tga"/> 366 <texture name="arrow_down.tga"/>
367 <texture name="arrow_up.tga"/>
368 <texture name="arrow_left.tga"/>
369 <texture name="arrow_right.tga"/>
368 <texture name="cloud-particle.j2c" use_mips="true"/> 370 <texture name="cloud-particle.j2c" use_mips="true"/>
369 371
370 <texture name="skin_thumbnail_default.png" preload="true" /> 372 <texture name="skin_thumbnail_default.png" preload="true" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
index 3d1c569..f0c97f2 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
@@ -205,5 +205,23 @@
205 <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" /> 205 <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" />
206 </menu_item_check> 206 </menu_item_check>
207 </menu> 207 </menu>
208 <menu bottom_delta="64" drop_shadow="true" height="49"
209 label="Search" left="0" mouse_opaque="false" name="Sort" opaque="true"
210 tear_off="true" width="118">
211 <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByName" height="18"
212 label="By Name" left="0" mouse_opaque="true" name="By Name" width="118">
213 <on_click filter="" function="Inventory.SetSearchBy" userdata="name" />
214 </menu_item_check>
215 <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByCreator" height="18"
216 label="By Creator" left="0" mouse_opaque="true" name="By Creator" width="118">
217 <on_click filter="" function="Inventory.SetSearchBy" userdata="creator" />
218 </menu_item_check>
219 <menu_item_separator bottom_delta="-8" height="8" left="0" mouse_opaque="true" name="separator"
220 width="118" />
221 <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByAll" height="18"
222 label="By All" left="0" mouse_opaque="true" name="By All" width="118">
223 <on_click filter="" function="Inventory.SetSearchBy" userdata="all" />
224 </menu_item_check>
225 </menu>
208 </menu_bar> 226 </menu_bar>
209</floater> 227</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
index 318f46a..7beb7e4 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
3 height="440" min_height="140" min_width="467" name="floater_about" 3 height="440" min_height="140" min_width="467" name="floater_about"
4 rect_control="FloaterMediaRect" title="Media Browser" width="560"> 4 rect_control="FloaterMediaRect" title="Web Browser" width="560">
5 <layout_stack name="stack1" bottom="0" follows="left|right|top|bottom" left="10" top="-20" width="540"> 5 <layout_stack name="stack1" bottom="0" follows="left|right|top|bottom" left="10" top="-20" width="540">
6 <layout_panel auto_resize="false" bottom="0" height="20" left="0" name="nav_controls" user_resize="false" 6 <layout_panel auto_resize="false" bottom="0" height="20" left="0" name="nav_controls" user_resize="false"
7 width="540"> 7 width="540">
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
index 9f1e164..3485812 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
@@ -1,7 +1,98 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="true"
3 can_tear_off="false" follows="top|right" height="220" min_height="64" min_width="64" 3 can_tear_off="false" follows="top|right" height="455" min_height="400" min_width="240"
4 name="minimap" rect_control="FloaterMiniMapRect" width="200"> 4 name="minimap" rect_control="FloaterMiniMapRect" width="200">
5 <panel bottom="2" follows="left|top|right|bottom" height="216" label="Mini Map" 5
6 left="2" mouse_opaque="false" name="mini_mapview" width="196" /> 6 <panel label="Mini Map" name="mini_mapview"
7 top="-2" left="2" bottom="196" right="196"
8 follows="left|top|right|bottom" mouse_opaque="false" />
9
10 <panel name="RadarPanel" label="Radar"
11 background_visible="true" bg_alpha_color="NetMapBackgroundColor"
12 left="2" top="196" right="196" height="120"
13 follows="left|right|bottom" border="false" mouse_opaque="true">
14
15 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom="-20" drop_shadow_visible="true" follows="left|top"
17 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
18 mouse_opaque="true" name="lblAvatarCount" v_pad="0"
19 width="220">
20 0
21 </text>
22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
23 bottom="-20" drop_shadow_visible="true" follows="left|top"
24 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="27"
25 mouse_opaque="true" name="avatars_in" v_pad="0"
26 width="220">
27 Avatars in
28 </text>
29 <slider bottom_delta="0" left_delta="55" follows="left|top" width="110" height="15"
30 name="near_me_range" label="" control_name="NearMeRange"
31 min_val="5" max_val="512" increment="1" initial_val="96" decimal_digits="0" />
32 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
33 bottom_delta="0" left="190" drop_shadow_visible="true" follows="left|top"
34 font="SansSerifSmall" h_pad="0" halign="left" height="15"
35 mouse_opaque="true" name="meters" v_pad="0"
36 width="40">
37 Meters
38 </text>
39 <tab_container border="false" bottom_delta="-176" height="172" left="0" mouse_opaque="false"
40 name="button_container" tab_position="top" follows="left|right|bottom" width="198">
41 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160"
42 label="Avatars" left="1" mouse_opaque="true" name="avatar_tab" width="198">
43 <button bottom="-25" follows="top|right" height="22" label="IM/Call"
44 left="-85" name="im_btn" tool_tip="Open Instant Message session"
45 width="80" />
46 <button bottom_delta="-25" follows="top|right" height="22" label="Profile"
47 left_delta="0" name="profile_btn"
48 tool_tip="Show picture, groups, and other information" width="80" />
49 <button bottom_delta="-25" follows="top|right" height="22" label="Teleport..."
50 left_delta="0" name="offer_teleport_btn"
51 tool_tip="Offer this friend a teleport to your current location" width="80" />
52 <button bottom_delta="-25" follows="top|right" height="22" label="Track"
53 left_delta="0" name="track_btn"
54 tool_tip="Create a beacon to track this avatar" width="80" />
55 <button bottom_delta="-25" follows="top|right" height="22" label="Invite..."
56 left_delta="0" name="invite_btn"
57 tool_tip="Remove this person from your friends list" width="80" />
58 <button bottom_delta="-25" follows="top|right" height="22" label="Add..."
59 left_delta="0" name="add_btn" tool_tip="Offer friendship to a resident"
60 width="80" />
61 </panel>
62 <panel border="true" bottom="-160" follows="left|top|right|bottom" height="160"
63 label="Estate" left="1" mouse_opaque="true" name="estate_tab" width="198">
64 <button bottom="-25" follows="top|right" height="22" label="Freeze..."
65 left="-85" name="freeze_btn" tool_tip=""
66 width="80" />
67 <button bottom_delta="-25" follows="top|right" height="22" label="Eject..."
68 left_delta="0" name="eject_btn"
69 tool_tip="" width="80" />
70 <button bottom_delta="-25" follows="top|right" height="22" label="Mute..."
71 left_delta="0" name="mute_btn"
72 tool_tip="" width="80" />
73 <button bottom_delta="-25" follows="top|right" height="22" label="Unmute..."
74 left_delta="0" name="unmute_btn"
75 tool_tip="" width="80" />
76 <button bottom_delta="-25" follows="top|right" height="22" label="Report..."
77 left_delta="0" name="ar_btn"
78 tool_tip="" width="80" />
79 <button bottom_delta="-25" follows="top|right" height="22" label="Kick..."
80 left_delta="0" name="estate_eject_btn" tool_tip=""
81 width="80" />
82 </panel>
83 </tab_container>
84 <scroll_list bottom="-190" width="104" height="143" left="4"
85 follows="left|bottom|right" draw_border="false" draw_heading="true"
86 draw_stripes="true" column_padding="5" sort_column="1" mouse_opaque="true"
87 background_visible="true" multi_select="false" name="RadarList">
88 <column name="avatar_name" label="Name" dynamicwidth="true" />
89 <column name="avatar_distance" label="Dist." width="48" />
90 </scroll_list>
91 </panel>
92 <string name="no_one_near">
93 No avatars within range
94 </string>
95 <string name="muted">
96 (muted)
97 </string>
7</floater> 98</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml b/linden/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml
new file mode 100644
index 0000000..615b7d1
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml
@@ -0,0 +1,54 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="0" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" can_tear_off="true" enabled="true" height="140" left="0"
4 mouse_opaque="true" name="object im info" width="300"
5 rect_control="FloaterObjectIMInfo" short_title="Object Info" title="Object Information" >
6
7 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
8 bottom="-35" drop_shadow_visible="true" follows="left|top"
9 font="SansSerif" h_pad="0" halign="left" height="10" left="10"
10 mouse_opaque="true" name="LabelItemNameTitle" v_pad="0" width="78">
11 Object:
12 </text>
13 <text bevel_style="none" border_style="line" border_visible="false"
14 border_thickness="0" bottom_delta="-10" enabled="true" follows="left|top"
15 font="SansSerif" height="20" is_unicode="false" left="70"
16 max_length="254" mouse_opaque="false" name="ObjectName"
17 width="200" />
18
19 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
20 bottom="-60" drop_shadow_visible="true" follows="left|top"
21 font="SansSerif" h_pad="0" halign="left" height="10" left="10"
22 mouse_opaque="true" name="LabelSlurlTitle" v_pad="0" width="78">
23 Location:
24 </text>
25 <text bevel_style="none" border_style="line" border_visible="false"
26 border_thickness="0" bottom_delta="-10" enabled="true" follows="left|top"
27 font="SansSerif" height="20" is_unicode="false" left="70" hover="true"
28 max_length="254" mouse_opaque="true" name="Slurl" font-style="UNDERLINE"
29 width="200" hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/>
30
31 <!-- A new viewer talking to an old sim will not have a slurl available and will show this. -->
32 <text bevel_style="none" border_style="line" border_visible="false"
33 border_thickness="0" bottom_delta="0" enabled="true" follows="left|top"
34 font="SansSerif" height="20" is_unicode="false" left_delta="0" hover="false"
35 max_length="254" mouse_opaque="false" name="Unknown_Slurl" width="200">
36 (Location Info Not Available)
37 </text>
38
39 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
40 bottom="-85" drop_shadow_visible="true" follows="left|top"
41 font="SansSerif" h_pad="0" halign="left" height="10" left="10"
42 mouse_opaque="true" name="LabelOwnerNameTitle" v_pad="0" width="78">
43 Owner:
44 </text>
45 <text bevel_style="none" border_style="line" border_visible="false"
46 border_thickness="0" bottom_delta="-10" enabled="true" follows="left|top"
47 font="SansSerif" height="20" is_unicode="false" left="70" hover="true"
48 max_length="254" mouse_opaque="true" name="OwnerName" font-style="UNDERLINE"
49 width="200" hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/>
50
51 <button bottom_delta="-30" font="SansSerif" halign="center" height="20" label="Mute Owner"
52 label_selected="Mute Owner" left="70" mouse_opaque="true" name="Mute"
53 width="160" />
54</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml b/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml
index daf45cf..c67443f 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_profile.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="520" min_height="0" min_width="0" 3 can_resize="false" height="545" min_height="0" min_width="0"
4 name="avatarinfo" title="Profile" width="420"> 4 name="avatarinfo" title="Profile" width="420">
5 <panel bottom="-520" height="486" left="0" name="Panel Avatar" width="430" /> 5 <panel bottom="-545" height="511" left="0" name="Panel Avatar" width="430" />
6</floater> 6</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml b/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml
index a9ac7fa..9333153 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_snapshot.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="false" 2<floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" follows="left|top" height="526" name="Snapshot" 3 can_resize="false" follows="left|top" height="526" name="Snapshot"
4 rect_control="FloaterSnapshotRect" title="Snapshot Preview" width="215"> 4 rect_control="FloaterSnapshotRect" title="Snapshot Preview" width="215">
5 <text bottom_delta="-40" follows="top|left" height="15" left="10" name="type_label" 5 <text bottom_delta="-40" follows="top|left" height="15" left="10" name="type_label"
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 bc18f44..a57c568 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
@@ -660,15 +660,15 @@
660 </text> 660 </text>
661 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" 661 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16"
662 increment="0.01" initial_val="0" label="X" label_width="10" left="10" 662 increment="0.01" initial_val="0" label="X" label_width="10" left="10"
663 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X" 663 min_val="0.01" mouse_opaque="true" name="Scale X"
664 text_enabled_color="1, 1, 1, 1" width="96" /> 664 text_enabled_color="1, 1, 1, 1" width="96" />
665 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 665 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
666 increment="0.01" initial_val="0" label="Y" label_width="10" left="10" 666 increment="0.01" initial_val="0" label="Y" label_width="10" left="10"
667 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y" 667 min_val="0.01" mouse_opaque="true" name="Scale Y"
668 text_enabled_color="1, 1, 1, 1" width="96" /> 668 text_enabled_color="1, 1, 1, 1" width="96" />
669 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 669 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
670 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 670 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
671 max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z" 671 min_val="0.01" mouse_opaque="true" name="Scale Z"
672 text_enabled_color="1, 1, 1, 1" width="96" /> 672 text_enabled_color="1, 1, 1, 1" width="96" />
673 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 673 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
674 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 674 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml b/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml
index 906e7de..471b3e5 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_windlight_options.xml
@@ -4,29 +4,35 @@
4 min_width="400" mouse_opaque="true" name="WindLight floater" 4 min_width="400" mouse_opaque="true" name="WindLight floater"
5 rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" 5 rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor"
6 width="700"> 6 width="700">
7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
8 bottom="-50" drop_shadow_visible="true" follows="left|top|right" 8 bottom="-50" drop_shadow_visible="true" follows="left|top|right"
9 font="SansSerif" h_pad="0" halign="left" height="16" 9 font="SansSerif" h_pad="0" halign="left" height="16"
10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" 10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0"
11 width="110"> 11 width="110">
12 Sky Presets: 12 Sky Presets:
13 </text> 13 </text>
14 <combo_box allow_text_entry="false" bottom="-50" follows="left|top" height="18" 14 <combo_box allow_text_entry="false" bottom="-52" follows="left|top" height="18"
15 left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" 15 left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo"
16 width="150" /> 16 width="150" />
17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20"
18 label="" label_selected="" left_delta="-25" image_overlay="arrow_left.tga"
19 mouse_opaque="true" name="prev" scale_image="true" width="20" />
20 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20"
21 label="" label_selected="" left_delta="180" image_overlay="arrow_right.tga"
22 mouse_opaque="true" name="next" scale_image="true" width="20" />
17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" 23 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20"
18 label="New" label_selected="New" left_delta="170" 24 label="New" label_selected="New" left_delta="40"
19 mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> 25 mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" />
20 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 26 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
21 label="Save" label_selected="Save" left_delta="80" 27 label="Save" label_selected="Save" left_delta="70"
22 mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> 28 mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" />
23 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 29 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
24 label="Delete" label_selected="Delete" left_delta="80" 30 label="Delete" label_selected="Delete" left_delta="70"
25 mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> 31 mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" />
26 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 32 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
27 label="Day Cycle Editor" label_selected="Day Cycle Editor" 33 label="Day Cycle Editor" label_selected="Day Cycle Editor"
28 left_delta="120" mouse_opaque="true" name="WLDayCycleMenuButton" 34 left_delta="100" mouse_opaque="true" name="WLDayCycleMenuButton"
29 scale_image="true" width="120" /> 35 scale_image="true" width="125" />
30 <tab_container bottom="-220" follows="left|top" height="160" left="0" 36 <tab_container bottom="-220" follows="left|top" height="160" left="0"
31 mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> 37 mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700">
32 <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" 38 <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160"
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
index 485ae9f..0172b41 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
@@ -19,6 +19,11 @@
19 <on_click function="MiniMap.Center" userdata="1" /> 19 <on_click function="MiniMap.Center" userdata="1" />
20 <on_check function="MiniMap.CheckCenter" userdata="1" /> 20 <on_check function="MiniMap.CheckCenter" userdata="1" />
21 </menu_item_check> 21 </menu_item_check>
22 <menu_item_check bottom_delta="-18" enabled="true" height="18" label="Rotate Mini-Map"
23 left="0" mouse_opaque="true" name="Rotate Mini-Map" width="128">
24 <on_click function="MiniMap.Rotate" userdata="" />
25 <on_check function="MiniMap.CheckRotate" userdata="" />
26 </menu_item_check>
22 <menu_item_separator /> 27 <menu_item_separator />
23 <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show Map" 28 <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show Map"
24 left="0" mouse_opaque="true" name="Show Map" width="128"> 29 left="0" mouse_opaque="true" name="Show Map" width="128">
diff --git a/linden/indra/newview/skins/default/xui/en-us/notify.xml b/linden/indra/newview/skins/default/xui/en-us/notify.xml
index 99fe75a..01e2546 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notify.xml
@@ -835,6 +835,11 @@ Use the controls on the right to find things
835and display different backgrounds. 835and display different backgrounds.
836 </message> 836 </message>
837 </notify> 837 </notify>
838 <notify name="FirstMiniMap" tip="false">
839 <message name="message">
840 Right-click the Mini-Map for more options.
841 </message>
842 </notify>
838 <notify name="FirstBuild" tip="false"> 843 <notify name="FirstBuild" tip="false">
839 <message name="message"> 844 <message name="message">
840 You can build new objects in some areas of [SECOND_LIFE]. 845 You can build new objects in some areas of [SECOND_LIFE].
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
index a3a4b1a..2ea8890 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
@@ -1,430 +1,414 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430"> 2<panel bottom="-575" height="511" left="350" name="Panel Avatar" width="430">
3 <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab" 3 <tab_container bottom="-511" height="511" left="0" mouse_opaque="false" name="tab"
4 tab_min_width="50" tab_position="top" width="419"> 4 tab_min_width="50" tab_position="top" width="419">
5 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 5 <panel border="true" bottom="-507" follows="left|top|right|bottom" height="491"
6 label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418"> 6 label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418">
7 <string name="CaptionTextAcctInfo"> 7 <string name="CaptionTextAcctInfo">
8 [ACCTTYPE] 8[ACCTTYPE]
9[PAYMENTINFO] 9[PAYMENTINFO]
10[AGEVERIFICATION] 10[AGEVERIFICATION]
11 </string> 11 </string>
12 <string name="AcctTypeResident"> 12 <string name="AcctTypeResident">
13 Resident 13 Resident
14 </string> 14 </string>
15 <string name="AcctTypeTrial"> 15 <string name="AcctTypeTrial">
16 Trial 16 Trial
17 </string> 17 </string>
18 <string name="AcctTypeCharterMember"> 18 <string name="AcctTypeCharterMember">
19 Charter Member 19 Charter Member
20 </string> 20 </string>
21 <string name="AcctTypeEmployee"> 21 <string name="AcctTypeEmployee">
22 Linden Lab Employee 22 Linden Lab Employee
23 </string> 23 </string>
24 <string name="PaymentInfoUsed"> 24 <string name="PaymentInfoUsed">
25 Payment Info Used 25 Payment Info Used
26 </string> 26 </string>
27 <string name="PaymentInfoOnFile"> 27 <string name="PaymentInfoOnFile">
28 Payment Info On File 28 Payment Info On File
29 </string> 29 </string>
30 <string name="NoPaymentInfoOnFile"> 30 <string name="NoPaymentInfoOnFile">
31 No Payment Info On File 31 No Payment Info On File
32 </string> 32 </string>
33 <string name="AgeVerified"> 33 <string name="AgeVerified">
34 Age-verified 34 Age-verified
35 </string> 35 </string>
36 <string name="NotAgeVerified"> 36 <string name="NotAgeVerified">
37 Not Age-verified 37 Not Age-verified
38 </string> 38 </string>
39 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 39 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
40 bottom="-24" drop_shadow_visible="true" follows="left|top" 40 bottom="-23" drop_shadow_visible="true" follows="left|top"
41 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 41 font="SansSerifsmall" h_pad="0" halign="left" height="16" right="-15"
42 mouse_opaque="true" name="Name:" v_pad="0" width="70"> 42 mouse_opaque="true" name="online_yes" v_pad="0" width="130">
43 Name: 43 Currently: Online
44 </text> 44 </text>
45 <name_editor bevel_style="in" border_style="line" 45 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
46 border_thickness="1" bottom="-24" enabled="false" follows="left|top" 46 bottom_delta="0" drop_shadow_visible="true" follows="left|top"
47 font="SansSerifSmall" height="16" is_unicode="false" left_delta="75" 47 font="SansSerifsmall" h_pad="0" halign="left" height="16" left_delta="0"
48 max_length="254" mouse_opaque="false" name="name" 48 mouse_opaque="true" name="online_no" v_pad="0" width="130">
49 width="180" /> 49 Currently: Offline
50 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 50 </text>
51 bottom="-24" drop_shadow_visible="true" follows="left|top" 51 <button bottom_delta="-19" font="SansSerif" halign="center" height="20"
52 font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279" 52 label="Instant Message..." label_selected="Instant Message..."
53 mouse_opaque="true" name="online_yes" v_pad="0" width="121"> 53 right="-15" mouse_opaque="true" name="Instant Message..."
54 Currently Online 54 tool_tip="Instant Message (IM)" width="130" />
55 </text> 55 <button bottom_delta="-23" font="SansSerif" halign="center" height="20"
56 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 56 label="Offer Teleport..." label_selected="Offer Teleport..."
57 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 57 left_delta="0" mouse_opaque="true" name="Offer Teleport..." width="130" />
58 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" 58 <button bottom_delta="-34" font="SansSerif" halign="center" height="20"
59 mouse_opaque="true" name="label" v_pad="0" width="121"> 59 label="Add to Friends..." label_selected="Add to Friends..." left_delta="0"
60 Born: 60 mouse_opaque="true" name="Add Friend..." width="130" />
61 </text> 61 <button bottom_delta="-23" font="SansSerif" halign="center" height="20"
62 <line_editor bevel_style="in" border_style="line" 62 label="Invite to Group..." label_selected="Invite to Group..." left_delta="0"
63 mouse_opaque="true" name="Invite to Group..." width="130" />
64 <button bottom_delta="-23" font="SansSerif" halign="center" height="20" label="Find on Map"
65 label_selected="Find on Map" left_delta="0" mouse_opaque="true"
66 name="Find on Map" width="130" />
67 <button bottom_delta="-34" font="SansSerif" halign="center" height="20" label="Pay..."
68 label_selected="Pay..." left_delta="0" mouse_opaque="true" name="Pay..."
69 width="130" />
70 <button bottom_delta="-23" font="SansSerif" halign="center" height="20" label="Mute"
71 label_selected="Mute" left_delta="0" mouse_opaque="true" name="Mute"
72 width="130" />
73 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
74 bottom_delta="-29" drop_shadow_visible="true" follows="left|top"
75 font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-15"
76 mouse_opaque="true" name="label" v_pad="0" width="130">
77 Born:
78 </text>
79 <line_editor bevel_style="in" border_style="line"
63 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" 80 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top"
64 font="SansSerifSmall" height="16" is_unicode="false" left="279" 81 font="SansSerifSmall" height="18" is_unicode="false" right="-15"
65 max_length="254" mouse_opaque="false" name="born" 82 max_length="254" mouse_opaque="false" name="born"
66 width="121" /> 83 width="130" />
67 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 84 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
68 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 85 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
69 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" 86 font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-15"
70 mouse_opaque="true" name="label2" v_pad="0" width="121"> 87 mouse_opaque="true" name="label2" v_pad="0" width="130">
71 Account: 88 Account:
72 </text> 89 </text>
73 <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279" 90 <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="50" right="-15"
74 mouse_opaque="false" name="acct_border" width="121" /> 91 mouse_opaque="false" name="acct_border" width="130" />
75 <text bg_visible="false" border_drop_shadow_visible="false" 92 <text bg_visible="false" border_drop_shadow_visible="false"
76 border_visible="true" bottom_delta="0" drop_shadow_visible="true" 93 border_visible="true" bottom_delta="0" drop_shadow_visible="true"
77 follows="left|top" font="SansSerifSmall" height="48" left="279" 94 follows="left|top" font="SansSerifSmall" height="48" left="279"
78 mouse_opaque="false" name="acct" width="121" /> 95 mouse_opaque="false" name="acct" width="121" />
79 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 96 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
80 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 97 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
81 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" 98 font="SansSerifSmall" h_pad="0" halign="left" height="16" right="-15"
82 mouse_opaque="true" name="partner_label" 99 mouse_opaque="true" name="partner_label"
83 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" 100 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner"
84 v_pad="0" width="130"> 101 v_pad="0" width="130">
85 Partner: 102 Partner:
86 </text> 103 </text>
87 <button bottom_delta="2" follows="left|top" font="SansSerif" halign="center" 104 <button bottom_delta="1" follows="left|top" font="SansSerif" halign="center"
88 height="18" label="i" label_selected="i" left_delta="44" 105 height="18" label="i" label_selected="i" left_delta="44"
89 mouse_opaque="true" name="partner_info" 106 mouse_opaque="true" name="partner_info"
90 tool_tip="Click to open partner&apos;s profile" width="18" /> 107 tool_tip="Click to open partner&apos;s profile" width="20" />
91 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 108 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
92 height="18" label="?" label_selected="?" left_delta="24" 109 height="18" label="?" label_selected="?" left_delta="24"
93 mouse_opaque="true" name="partner_help" width="18" /> 110 mouse_opaque="true" name="partner_help" width="20" />
94 <line_editor bevel_style="in" border_style="line" 111 <line_editor bevel_style="in" border_style="line"
95 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" 112 border_thickness="1" bottom_delta="-19" enabled="true" follows="left|top"
96 font="SansSerifSmall" height="16" is_unicode="false" left="279" 113 font="SansSerifSmall" height="18" is_unicode="false" right="-15"
97 max_length="254" mouse_opaque="false" name="partner_edit" 114 max_length="254" mouse_opaque="false" name="partner_edit"
98 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" 115 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner"
99 width="121"> 116 width="130">
100 [FIRST] [LAST] 117 [FIRST] [LAST]
101 </line_editor> 118 </line_editor>
102 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 119 <texture_picker allow_no_texture="true" bottom="289" can_apply_immediately="false"
103 bottom="-44" drop_shadow_visible="true" follows="left|top" 120 default_image_name="None" follows="left|top" height="192" label=""
104 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 121 left="20" mouse_opaque="true" name="img" scale_image="false" auto-resize="false"
105 mouse_opaque="true" name="Photo:" v_pad="0" width="70"> 122 tool_tip="Click to choose a picture" width="235" />
106 Photo: 123 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
107 </text> 124 bottom_delta="-6" drop_shadow_visible="true" follows="left|top"
108 <texture_picker allow_no_texture="true" bottom="-179" can_apply_immediately="false" 125 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
109 default_image_name="None" follows="left|top" height="151" label="" 126 mouse_opaque="true" name="About:" v_pad="0" width="170">
110 left="79" mouse_opaque="true" name="img" 127 About (500 chars):
111 tool_tip="Click to choose a picture" width="180" /> 128 </text>
112 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 129 <text_editor bottom_delta="-155" embedded_items="false"
113 bottom="-183" drop_shadow_visible="true" follows="left|top" 130 enabled="true" follows="left|top" font="SansSerifSmall" height="155"
114 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 131 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true"
115 mouse_opaque="true" name="Groups:" v_pad="0" width="70"> 132 name="about" width="235" word_wrap="true" />
116 Groups: 133
117 </text> 134 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
118 <scroll_list background_visible="true" bottom="-258" column_padding="5" draw_border="true" 135 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
119 follows="left|top" height="90" left="79" mouse_opaque="false" 136 font="SansSerifSmall" halign="left" height="16" left="20"
120 multi_select="false" name="groups" width="321" /> 137 mouse_opaque="true" name="Groups:" width="70">
121 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 138 Groups:
122 bottom="-280" drop_shadow_visible="true" follows="left|top" 139 </text>
123 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 140 <scroll_list background_visible="true" bottom_delta="-80" column_padding="5" draw_border="true"
124 mouse_opaque="true" name="About:" v_pad="0" width="70"> 141 follows="left|top" height="80" left_delta="0" mouse_opaque="false"
125 About: 142 multi_select="false" name="groups" width="235" />
126 </text> 143 <view_border blevel_style="in" bottom_delta="0" follows="left|top" height="80" right="-15"
127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 144 mouse_opaque="false" name="drop_target_rect_vis" width="130" />
128 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 145 <view_border blevel_style="in" border_thickness="0" bottom_delta="0" follows="left|top"
129 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" 146 height="80" left_delta="0" mouse_opaque="false" name="drop_target_rect"
130 mouse_opaque="true" name="(500 chars)" v_pad="0" width="70"> 147 width="130" />
131 (500 chars) 148 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
132 </text> 149 bottom_delta="40" drop_shadow_visible="true" follows="left|top"
133 <text_editor bottom="-375" embedded_items="false" 150 font="SansSerifSmall" h_pad="0" halign="center" height="16" right="-22"
134 enabled="true" follows="left|top" font="SansSerifSmall" height="110"
135 is_unicode="false" left="79" max_length="511" mouse_opaque="true"
136 name="about" width="321" word_wrap="true" />
137 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
138 bottom="-403" drop_shadow_visible="true" follows="left|top"
139 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
140 mouse_opaque="true" name="Give item:" v_pad="0" width="75">
141 Give item:
142 </text>
143 <view_border blevel_style="in" border_thickness="0" bottom="-466" follows="left|top"
144 height="466" left_delta="4" mouse_opaque="false" name="drop_target_rect"
145 width="409" />
146 <view_border blevel_style="in" bottom="-403" follows="left|top" height="16" left_delta="75"
147 mouse_opaque="false" name="drop_target_rect_vis" width="321" />
148 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
149 bottom_delta="0" drop_shadow_visible="true" follows="left|top"
150 font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0"
151 mouse_opaque="true" name="Give inventory" 151 mouse_opaque="true" name="Give inventory"
152 tool_tip="Drop inventory items here to give them to this person." v_pad="2" 152 tool_tip="Drop inventory items here to give them to this resident." v_pad="2"
153 width="321"> 153 width="115">
154 Drop inventory item here. 154 Drop inventory here
155 </text> 155 </text>
156 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 156 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
157 initial_value="false" label="Show in search" left="75" mouse_opaque="true" 157 bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
158 font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0"
159 mouse_opaque="true" name="Give inventory 2" width="115"
160 tool_tip="Drop inventory items here to give them to this resident.">
161 to give to resident
162 </text>
163 <name_editor bevel_style="in" border_style="line"
164 border_thickness="0" bottom="0" enabled="false" follows="left|top"
165 font="SansSerifSmall" height="0" is_unicode="false" left="1"
166 max_length="254" mouse_opaque="false" name="name"
167 width="0" />
168 <check_box bottom="1" follows="left|top" font="SansSerifSmall" height="16"
169 initial_value="false" label="Show profile in search" left="18" mouse_opaque="true"
158 name="allow_publish" 170 name="allow_publish"
159 tool_tip="Publish extra profile information such as description and image in Search." 171 tool_tip="Publish extra profile information such as description and image in Search."
160 width="130" /> 172 width="130" />
161 <button bottom="-425" follows="left|top" font="SansSerif" halign="center" height="20" 173 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" height="18"
162 label="?" label_selected="?" left_delta="145" mouse_opaque="true" name="?" 174 label="?" label_selected="?" left_delta="150" mouse_opaque="true" name="?"
163 width="20" /> 175 width="20" />
164 <button bottom="-428" font="SansSerif" halign="center" height="20" label="Find on Map" 176 </panel>
165 label_selected="Find on Map" left="24" mouse_opaque="true" 177 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
166 name="Find on Map" width="100" /> 178 label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418">
167 <button bottom="-428" font="SansSerif" halign="center" height="20" 179 <line_editor bevel_style="in" border_style="line"
168 label="Offer Teleport..." label_selected="Offer Teleport..."
169 left_delta="102" mouse_opaque="true" name="Offer Teleport..." width="140" />
170 <button bottom="-428" font="SansSerif" halign="center" height="20"
171 label="Add Friend..." label_selected="Add Friend..." left_delta="142"
172 mouse_opaque="true" name="Add Friend..." width="130" />
173 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Pay..."
174 label_selected="Pay..." left="24" mouse_opaque="true" name="Pay..."
175 width="100" />
176 <button bottom_delta="0" font="SansSerif" halign="center" height="20"
177 label="Instant Message..." label_selected="Instant Message..."
178 left_delta="102" mouse_opaque="true" name="Instant Message..."
179 tool_tip="Instant Message (IM)" width="140" />
180 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Mute"
181 label_selected="Mute" left_delta="142" mouse_opaque="true" name="Mute"
182 width="130" />
183 </panel>
184 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
185 label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418">
186 <line_editor bevel_style="in" border_style="line"
187 border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top" 180 border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top"
188 font="SansSerifSmall" height="16" is_unicode="false" left="10" 181 font="SansSerifSmall" height="16" is_unicode="false" left="10"
189 max_length="254" mouse_opaque="true" name="url_edit" 182 max_length="254" mouse_opaque="true" name="url_edit"
190 width="400" /> 183 width="400" />
191 <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center" 184 <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center"
192 height="18" label="Load" label_selected="Load" left="10" 185 height="18" label="Load" label_selected="Load" left="10"
193 mouse_opaque="true" name="load" enabled="false" 186 mouse_opaque="true" name="load" enabled="false"
194 tool_tip="Load this profile page with embedded web browser." width="80" > 187 tool_tip="Load this profile page with embedded web browser." width="80" >
195 <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item> 188 <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item>
196 <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item> 189 <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item>
197 </flyout_button> 190 </flyout_button>
198 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 191 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
199 height="18" label="?" label_selected="?" left_delta="85" 192 height="18" label="?" label_selected="?" left_delta="85"
200 mouse_opaque="true" name="web_profile_help" width="18" /> 193 mouse_opaque="true" name="web_profile_help" width="18" />
201 <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16" 194 <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16"
202 initial_value="false" label="Automatically load web profiles" 195 initial_value="false" label="Automatically load web profiles"
203 left_delta="30" mouse_opaque="true" name="auto_load" 196 left_delta="30" mouse_opaque="true" name="auto_load"
204 tool_tip="Automatically load ALL profile webpages without asking first." 197 tool_tip="Automatically load ALL profile webpages without asking first."
205 width="127" /> 198 width="127" />
206 <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400" 199 <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400"
207 ignore_ui_scale="false" left="10" name="profile_html" start_url="" 200 ignore_ui_scale="false" left="10" name="profile_html" start_url=""
208 width="400" /> 201 width="400" />
209 <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70" 202 <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70"
210 top="25" /> 203 top="25" />
211 </panel> 204 </panel>
212 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 205 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
213 label="Interests" left="1" mouse_opaque="true" name="Interests" width="418"> 206 label="Interests" left="1" mouse_opaque="true" name="Interests" width="418">
214 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 207 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
215 bottom="-36" drop_shadow_visible="true" follows="left|top" 208 bottom="-36" drop_shadow_visible="true" follows="left|top"
216 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 209 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
217 mouse_opaque="true" name="I Want To:" v_pad="0" width="70"> 210 mouse_opaque="true" name="I Want To:" v_pad="0" width="70">
218 I Want To: 211 I Want To:
219 </text> 212 </text>
220 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 213 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
221 initial_value="false" label="Build" left_delta="70" mouse_opaque="true" 214 initial_value="false" label="Build" left_delta="70" mouse_opaque="true"
222 name="chk0" width="90" /> 215 name="chk0" width="90" />
223 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 216 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
224 initial_value="false" label="Explore" left_delta="170" mouse_opaque="true" 217 initial_value="false" label="Explore" left_delta="170" mouse_opaque="true"
225 name="chk1" width="90" /> 218 name="chk1" width="90" />
226 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 219 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
227 initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true" 220 initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true"
228 name="chk2" width="57" /> 221 name="chk2" width="57" />
229 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 222 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
230 initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true" 223 initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true"
231 name="chk6" width="92" /> 224 name="chk6" width="92" />
232 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 225 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
233 initial_value="false" label="Group" left_delta="-170" mouse_opaque="true" 226 initial_value="false" label="Group" left_delta="-170" mouse_opaque="true"
234 name="chk3" width="90" /> 227 name="chk3" width="90" />
235 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 228 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
236 initial_value="false" label="Buy" left_delta="170" mouse_opaque="true" 229 initial_value="false" label="Buy" left_delta="170" mouse_opaque="true"
237 name="chk4" width="90" /> 230 name="chk4" width="90" />
238 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 231 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
239 initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true" 232 initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true"
240 name="chk5" width="50" /> 233 name="chk5" width="50" />
241 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 234 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
242 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" 235 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true"
243 name="chk7" width="92" /> 236 name="chk7" width="92" />
244 <line_editor bevel_style="in" border_style="line" 237 <line_editor bevel_style="in" border_style="line"
245 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 238 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
246 font="SansSerifSmall" height="16" is_unicode="false" left="74" 239 font="SansSerifSmall" height="16" is_unicode="false" left="74"
247 max_length="254" mouse_opaque="true" name="want_to_edit" 240 max_length="254" mouse_opaque="true" name="want_to_edit"
248 width="330" /> 241 width="330" />
249 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 242 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
250 bottom_delta="-26" drop_shadow_visible="true" follows="left|top" 243 bottom_delta="-26" drop_shadow_visible="true" follows="left|top"
251 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 244 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
252 mouse_opaque="true" name="Skills:" v_pad="0" width="70"> 245 mouse_opaque="true" name="Skills:" v_pad="0" width="70">
253 Skills: 246 Skills:
254 </text> 247 </text>
255 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 248 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
256 initial_value="false" label="Textures" left_delta="70" mouse_opaque="true" 249 initial_value="false" label="Textures" left_delta="70" mouse_opaque="true"
257 name="schk0" width="90" /> 250 name="schk0" width="90" />
258 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 251 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
259 initial_value="false" label="Architecture" left_delta="170" 252 initial_value="false" label="Architecture" left_delta="170"
260 mouse_opaque="true" name="schk1" width="93" /> 253 mouse_opaque="true" name="schk1" width="93" />
261 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 254 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
262 initial_value="false" label="Event Planning" left_delta="0" 255 initial_value="false" label="Event Planning" left_delta="0"
263 mouse_opaque="true" name="schk2" width="105" /> 256 mouse_opaque="true" name="schk2" width="105" />
264 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 257 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
265 initial_value="false" label="Modeling" left_delta="-170" 258 initial_value="false" label="Modeling" left_delta="-170"
266 mouse_opaque="true" name="schk3" width="90" /> 259 mouse_opaque="true" name="schk3" width="90" />
267 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 260 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
268 initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true" 261 initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true"
269 name="schk4" width="90" /> 262 name="schk4" width="90" />
270 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 263 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
271 initial_value="false" label="Custom Characters" left_delta="170" 264 initial_value="false" label="Custom Characters" left_delta="170"
272 mouse_opaque="true" name="schk5" width="127" /> 265 mouse_opaque="true" name="schk5" width="127" />
273 <line_editor bevel_style="in" border_style="line" 266 <line_editor bevel_style="in" border_style="line"
274 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 267 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
275 font="SansSerifSmall" height="16" is_unicode="false" left="74" 268 font="SansSerifSmall" height="16" is_unicode="false" left="74"
276 max_length="254" mouse_opaque="true" name="skills_edit" 269 max_length="254" mouse_opaque="true" name="skills_edit"
277 width="330" /> 270 width="330" />
278 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 271 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
279 bottom_delta="-30" drop_shadow_visible="true" follows="left|top" 272 bottom_delta="-30" drop_shadow_visible="true" follows="left|top"
280 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 273 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
281 mouse_opaque="true" name="Languages:" v_pad="0" width="70"> 274 mouse_opaque="true" name="Languages:" v_pad="0" width="70">
282 Languages: 275 Languages:
283 </text> 276 </text>
284 <line_editor bevel_style="in" border_style="line" 277 <line_editor bevel_style="in" border_style="line"
285 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" 278 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top"
286 font="SansSerifSmall" height="16" is_unicode="false" left="74" 279 font="SansSerifSmall" height="16" is_unicode="false" left="74"
287 max_length="254" mouse_opaque="true" name="languages_edit" 280 max_length="254" mouse_opaque="true" name="languages_edit"
288 width="330" /> 281 width="330" />
289 </panel> 282 </panel>
290 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 283 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
291 label="Picks" left="1" mouse_opaque="true" name="Picks" width="418"> 284 label="Picks" left="1" mouse_opaque="true" name="Picks" width="418">
292 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 285 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
293 bottom="-20" drop_shadow_visible="true" follows="left|top" 286 bottom="-20" drop_shadow_visible="true" follows="left|top"
294 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" 287 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114"
295 mouse_opaque="true" 288 mouse_opaque="true"
296 name="Tell everyone about your favorite places in Second Life." v_pad="0" 289 name="Tell everyone about your favorite places in Second Life." v_pad="0"
297 width="302"> 290 width="302">
298 Tell everyone about your favorite places in Second Life. 291 Tell everyone about your favorite places in Second Life.
299 </text> 292 </text>
300 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" 293 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
301 height="20" label="New..." label_selected="New..." left="114" 294 height="20" label="New..." label_selected="New..." left="114"
302 mouse_opaque="true" name="New..." width="75" /> 295 mouse_opaque="true" name="New..." width="75" />
303 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" 296 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
304 label="Delete..." label_selected="Delete..." left_delta="79" 297 label="Delete..." label_selected="Delete..." left_delta="79"
305 mouse_opaque="true" name="Delete..." width="75" /> 298 mouse_opaque="true" name="Delete..." width="75" />
306 <tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false" 299 <tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false"
307 name="picks tab" tab_position="left" width="412" /> 300 name="picks tab" tab_position="left" width="412" />
308 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 301 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
309 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" 302 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif"
310 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" 303 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false"
311 name="loading_text" v_pad="0" width="302"> 304 name="loading_text" v_pad="0" width="302">
312 Loading... 305 Loading...
313 </text> 306 </text>
314 </panel> 307 </panel>
315 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 308 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
316 label="Classified" left="1" mouse_opaque="true" name="Classified" 309 label="Classified" left="1" mouse_opaque="true" name="Classified"
317 width="418"> 310 width="418">
318 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 311 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
319 bottom="-20" drop_shadow_visible="true" follows="left|top" 312 bottom="-20" drop_shadow_visible="true" follows="left|top"
320 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114" 313 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114"
321 mouse_opaque="true" 314 mouse_opaque="true"
322 name="Place an ad in Second Life&apos;s classified listings." v_pad="0" 315 name="Place an ad in Second Life&apos;s classified listings." v_pad="0"
323 width="302"> 316 width="302">
324 Place an ad in Second Life&apos;s classified listings. 317 Place an ad in Second Life&apos;s classified listings.
325 </text> 318 </text>
326 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center" 319 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
327 height="20" label="New..." label_selected="New..." left="114" 320 height="20" label="New..." label_selected="New..." left="114"
328 mouse_opaque="true" name="New..." width="75" /> 321 mouse_opaque="true" name="New..." width="75" />
329 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20" 322 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
330 label="Delete..." label_selected="Delete..." left_delta="79" 323 label="Delete..." label_selected="Delete..." left_delta="79"
331 mouse_opaque="true" name="Delete..." width="75" /> 324 mouse_opaque="true" name="Delete..." width="75" />
332 <tab_container bottom="-443" follows="left|top" height="395" left="4" mouse_opaque="false" 325 <tab_container bottom="-443" follows="left|top" height="395" left="4" mouse_opaque="false"
333 name="classified tab" tab_position="left" width="412" /> 326 name="classified tab" tab_position="left" width="412" />
334 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 327 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
335 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif" 328 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif"
336 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false" 329 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false"
337 name="loading_text" v_pad="0" width="302"> 330 name="loading_text" v_pad="0" width="302">
338 Loading... 331 Loading...
339 </text> 332 </text>
340 </panel> 333 </panel>
341 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 334 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
342 label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418"> 335 label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418">
343 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 336 <texture_picker allow_no_texture="true" bottom="220" can_apply_immediately="false"
344 bottom="-36" drop_shadow_visible="true" follows="left|top" 337 default_image_name="None" follows="left|top" height="235" label=""
345 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 338 left="20" mouse_opaque="true" name="img"
346 mouse_opaque="true" name="Photo:" v_pad="0" width="61"> 339 tool_tip="Click to choose a picture" width="235" />
347 Photo: 340 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
348 </text> 341 bottom_delta="-8" drop_shadow_visible="true" follows="left|top"
349 <texture_picker allow_no_texture="true" bottom="-171" can_apply_immediately="false" 342 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="20"
350 default_image_name="None" follows="left|top" height="151" label="" 343 mouse_opaque="true" name="Info:" v_pad="0" width="161">
351 left="70" mouse_opaque="true" name="img" 344 Info (250 chars):
352 tool_tip="Click to choose a picture" width="135" /> 345 </text>
353 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 346 <text_editor bottom_delta="-179" embedded_items="false"
354 bottom="-203" drop_shadow_visible="true" follows="left|top" 347 enabled="true" follows="left|top" font="SansSerifSmall" height="178"
355 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 348 is_unicode="false" left="20" max_length="254" mouse_opaque="false"
356 mouse_opaque="true" name="Info:" v_pad="0" width="61"> 349 name="about" width="378" word_wrap="true" />
357 Info: 350 </panel>
358 </text> 351 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
359 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
360 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
361 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
362 mouse_opaque="true" name="(250 chars)" v_pad="0" width="65">
363 (250 chars)
364 </text>
365 <text_editor bottom="-347" embedded_items="false"
366 enabled="true" follows="left|top" font="SansSerifSmall" height="160"
367 is_unicode="false" left="70" max_length="254" mouse_opaque="false"
368 name="about" width="330" word_wrap="true" />
369 </panel>
370 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
371 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> 352 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418">
372 <string name="Loading"> 353 <string name="Loading">
373 Loading... 354 Loading...
374 </string> 355 </string>
375 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 356 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
376 bottom="-52" drop_shadow_visible="true" follows="left|top" 357 bottom="-52" drop_shadow_visible="true" follows="left|top"
377 font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10" 358 font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10"
378 mouse_opaque="true" name="label" v_pad="0" width="412"> 359 mouse_opaque="true" name="label" v_pad="0" width="412">
379 Use this space to record your notes about this person. Keep track 360 Use this space to record your notes about this person. Keep track
380of trades in progress, joint projects, etc. Only you can see these 361 of trades in progress, joint projects, etc. Only you can see these
381notes. This person cannot see them, nor can other people. 362 notes. This person cannot see them, nor can other people.
382 </text> 363 </text>
383 <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top" 364 <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top"
384 font="SansSerif" height="256" is_unicode="false" left="10" 365 font="SansSerif" height="256" is_unicode="false" left="10"
385 max_length="1023" mouse_opaque="true" name="notes edit" width="400" 366 max_length="1023" mouse_opaque="true" name="notes edit" width="400"
386 word_wrap="false" /> 367 word_wrap="false" />
387 </panel> 368 </panel>
388 </tab_container> 369 </tab_container>
389 <button bottom="-483" font="SansSerif" halign="center" height="20" label="OK" 370 <button bottom="-508" font="SansSerif" halign="center" height="20" label="OK"
390 label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" /> 371 label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" />
391 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel" 372 <button bottom="-508" font="SansSerif" halign="center" height="20" label="Cancel"
392 label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel" 373 label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel"
393 width="100" /> 374 width="100" />
394 <button bottom_delta="132" font="SansSerif" halign="center" height="20" label="Kick" 375 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Kick"
395 label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" /> 376 label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" />
396 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze" 377 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Freeze"
397 label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze" 378 label_selected="Freeze" left_delta="76" mouse_opaque="true" name="Freeze"
398 tool_tip="Stop this resident&apos;s movement and chat." width="72" /> 379 tool_tip="Stop this resident&apos;s movement and chat." width="72" />
399 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" 380 <button bottom_delta="0" font="SansSerif" halign="center" height="20"
400 label="Unfreeze" label_selected="Unfreeze" left="4" mouse_opaque="true" 381 label="Unfreeze" label_selected="Unfreeze" left_delta="76" mouse_opaque="true"
401 name="Unfreeze" tool_tip="Thaw resident" width="72" /> 382 name="Unfreeze" tool_tip="Thaw resident" width="72" />
402 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="CSR" 383 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="CSR"
403 label_selected="CSR" left="4" mouse_opaque="true" name="csr_btn" 384 label_selected="CSR" left_delta="76" mouse_opaque="true" name="csr_btn"
404 tool_tip="Open customer service tool for this resident" width="72" /> 385 tool_tip="Open customer service tool for this resident" width="72" />
405 <string name="ShowOnMapNonFriend"> 386 <string name="ShowOnMapNonFriend">
406 Show location on the map. 387 Show location on the map.
407Disabled because you have not 388 Disabled because you have not
408formed a friendship with them. 389 formed a friendship with them.
409 </string> 390 </string>
410 <string name="ShowOnMapFriendOffline"> 391 <string name="ShowOnMapFriendOffline">
411 Show location on the map. 392 Show location on the map.
412 Disabled because they are not online. 393 Disabled because they are not online.
413 </string> 394 </string>
414 <string name="ShowOnMapFriendOnline"> 395 <string name="ShowOnMapFriendOnline">
415 Show location on the map. 396 Show location on the map.
416 </string> 397 </string>
417 <string name="TeleportGod"> 398 <string name="TeleportGod">
418 Force a teleport to your location. 399 Force a teleport to your location.
419 </string> 400 </string>
420 <string name="TeleportPrelude"> 401 <string name="TeleportPrelude">
421 Offer a teleport to your location. 402 Offer a teleport to your location.
422Disabled until you leave Orientation Island. 403 Disabled until you leave Orientation Island.
423 </string> 404 </string>
424 <string name="TeleportNormal"> 405 <string name="TeleportNormal">
425 Offer a teleport to your location. 406 Offer a teleport to your location.
426 </string> 407 </string>
427 <string name="Loading"> 408 <string name="Loading">
428 Loading... 409 Loading...
429 </string> 410 </string>
411 <string name="HiddenLabel">
412 (hidden)
413 </string>
430</panel> 414</panel>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
index 1a93341..19faa62 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor" 2<panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor"
3 border="false" follows="left|top|right|bottom" height="216" label="Mini Map" 3 border="false" follows="left|top|right|bottom" height="716" label="Mini Map"
4 mouse_opaque="false" name="mini_mapview" width="196"> 4 mouse_opaque="false" name="mini_mapview" width="196">
5 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 5 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
6 bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0" 6 bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
index e785909..8ad4fff 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
@@ -45,16 +45,21 @@
45 use_bounding_rect="true" width="395" /> 45 use_bounding_rect="true" width="395" />
46 </layout_stack> 46 </layout_stack>
47 </layout_panel> 47 </layout_panel>
48 <layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false" 48 <layout_panel auto_resize="false" bottom="0" left="0" min_width="184" mouse_opaque="false"
49 name="windlight_remote_container" use_bounding_rect="true" user_resize="false"
50 width="186">
51 <panel background_visible="false" border="false" bottom="0" name="windlight_remote" />
52 </layout_panel>
53 <layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false"
49 name="media_remote_container" use_bounding_rect="true" user_resize="false" 54 name="media_remote_container" use_bounding_rect="true" user_resize="false"
50 width="220"> 55 width="220">
51 <panel background_visible="false" border="false" bottom="0" name="media_remote" /> 56 <panel background_visible="false" border="false" bottom="0" name="media_remote" />
52 </layout_panel> 57 </layout_panel>
53 <layout_panel auto_resize="false" bottom="0" left="0" min_width="130" mouse_opaque="false" 58 <layout_panel auto_resize="false" bottom="0" left="0" min_width="130" mouse_opaque="false"
54 name="voice_remote_container" use_bounding_rect="true" user_resize="false" 59 name="voice_remote_container" use_bounding_rect="true" user_resize="false"
55 width="128"> 60 width="128">
56 <panel background_visible="false" border="false" bottom="0" name="voice_remote" /> 61 <panel background_visible="false" border="false" bottom="0" name="voice_remote" />
57 </layout_panel> 62 </layout_panel>
58 </layout_stack> 63 </layout_stack>
59 <string name="unread_count_string_plural"> 64 <string name="unread_count_string_plural">
60 New IMs 65 New IMs
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
index 92978ab..c960d36 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
@@ -15,7 +15,7 @@
15 Streaming Preferences: 15 Streaming Preferences:
16 </text> 16 </text>
17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-280" drop_shadow_visible="true" enabled="true" follows="left|top" 18 bottom="-300" drop_shadow_visible="true" enabled="true" follows="left|top"
19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> 20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128">
21 Audio Preferences: 21 Audio Preferences:
@@ -28,6 +28,10 @@
28 label="Play Streaming Music When Available (uses more bandwidth)" 28 label="Play Streaming Music When Available (uses more bandwidth)"
29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false" 29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false"
30 width="339" /> 30 width="339" />
31 <check_box bottom_delta="-20" control_name="ShowStreamTitle" enabled="true"
32 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
33 label="Show stream info in chat" left="162" mouse_opaque="true"
34 name="show_stream_title" radio_style="false" width="338" />
31 <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true" 35 <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true"
32 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 36 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
33 label="Play Streaming Media When Available (uses more bandwidth)" 37 label="Play Streaming Media When Available (uses more bandwidth)"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index ea04dfc..e8a2625 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
@@ -73,10 +73,6 @@
73 follows="left|top" height="16" increment="1" initial_val="300" 73 follows="left|top" height="16" increment="1" initial_val="300"
74 label="Away Timeout:" label_width="141" left="10" max_val="600" 74 label="Away Timeout:" label_width="141" left="10" max_val="600"
75 min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" /> 75 min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" />
76 <check_box bottom="-286" enabled="true" follows="left|top"
77 font="SansSerifSmall" height="16" initial_value="false"
78 label="Rotate Mini-Map" left="151" mouse_opaque="true"
79 name="rotate_mini_map_checkbox" radio_style="false" width="256" />
80 <check_box bottom="-304" enabled="true" 76 <check_box bottom="-304" enabled="true"
81 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 77 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
82 label="Notify when Linden dollars (L$) spent or received" left="151" 78 label="Notify when Linden dollars (L$) spent or received" left="151"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml
index 527309e..d5d43b1 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml
@@ -8,6 +8,10 @@
8 height="16" initial_value="false" 8 height="16" initial_value="false"
9 label="Run Second Life in a window" left="10" mouse_opaque="true" 9 label="Run Second Life in a window" left="10" mouse_opaque="true"
10 name="windowed mode" radio_style="false" width="100" /> 10 name="windowed mode" radio_style="false" width="100" />
11 <check_box bottom_delta="0" enabled="true" follows="left|top"
12 font="SansSerifSmall" height="16" initial_value="false"
13 label="Show environment control in toolbar" left="248" mouse_opaque="true"
14 name="toggle_windlight_control" radio_style="false" width="237" />
11 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43" 15 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43"
12 embedded_items="false" enabled="false" follows="left|top" 16 embedded_items="false" enabled="false" follows="left|top"
13 font="SansSerifSmall" height="20" hide_border="true" 17 font="SansSerifSmall" height="20" hide_border="true"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
index 48da432..d4ec307 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
@@ -10,8 +10,8 @@
10 </text> 10 </text>
11 <slider bottom_delta="-25" can_edit_text="true" 11 <slider bottom_delta="-25" can_edit_text="true"
12 decimal_digits="0" enabled="true" follows="left|top" height="15" 12 decimal_digits="0" enabled="true" follows="left|top" height="15"
13 increment="10" initial_val="50" left_delta="0" max_val="1500" min_val="50" 13 increment="10" initial_val="1000" left_delta="0" max_val="5000" min_val="50"
14 mouse_opaque="true" name="max_bandwidth" show_text="true" value="500" 14 mouse_opaque="true" name="max_bandwidth" show_text="true" value="1000"
15 width="180" /> 15 width="180" />
16 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 16 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
17 bottom_delta="4" drop_shadow_visible="true" enabled="true" 17 bottom_delta="4" drop_shadow_visible="true" enabled="true"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml
new file mode 100644
index 0000000..b9c6fc3
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_controls.xml
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="1"
3 enabled="true" follows="right|bottom" height="20" left="0"
4 name="windlight_controls" width="182">
5 <button bottom="-21" follows="left|bottom" font="SansSerif" halign="center" height="20"
6 label="Editor" left="4" name="Environment"
7 tool_tip="Click here to adjust world environment" width="80" />
8 <flyout_button bottom="-21" follows="left|bottom" height="20" label="Sky" left_delta="82" width="71"
9 list_position="above" mouse_opaque="true" name="Presets" tool_tip="Windlight presets">
10 </flyout_button>
11 <button bottom="-22" follows="left|bottom" font="SansSerif" halign="center" height="22" toggle="true"
12 label="" left_delta="72" name="Popup" scale_image="true" control_name="ShowWindlightSettingsPopup"
13 tool_tip="Click here to adjust draw distance" width="22" />
14</panel>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml
new file mode 100644
index 0000000..ead9ad7
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote.xml
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="0"
3 enabled="true" follows="right|bottom" height="20" left="0" mouse_opaque="true"
4 name="windlight_remote" use_bounding_rect="true" width="182">
5 <panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="22" left="0" width="182" />
6 <panel bottom="3" filename="panel_windlight_controls.xml" name="panel_windlight_controls" height="20" left="0" width="182" />
7 <string name="sunrise">
8 Sunrise
9 </string>
10 <string name="sunset">
11 Midday
12 </string>
13 <string name="noon">
14 Noon
15 </string>
16 <string name="midnight">
17 Midnight
18 </string>
19 <string name="revert_region">
20 Revert to Region Default
21 </string>
22</panel>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml
new file mode 100644
index 0000000..2fd9be5
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_windlight_remote_expanded.xml
@@ -0,0 +1,34 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="0"
3 follows="right|bottom" height="47" left="0" mouse_opaque="true"
4 name="windlight_remote" use_bounding_rect="true" width="182">
5 <panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="47" left="0" width="182" />
6 <slider bottom="-20" can_edit_text="false" control_name="RenderFarClip"
7 decimal_digits="0" enabled="true" height="18"
8 increment="8" initial_val="160" label="Draw Distance:"
9 label_width="78" left="6" max_val="512" min_val="64" mouse_opaque="true"
10 name="DrawDistance" show_text="true" width="170" />
11 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
12 bottom="-14" drop_shadow_visible="true" enabled="true" follows="left|top"
13 font="SansSerifSmall" h_pad="0" halign="left" height="12"
14 left="170" mouse_opaque="true" name="DrawDistanceMeterText2" v_pad="0"
15 width="8">
16 m
17 </text>
18 <panel bottom="13" filename="panel_windlight_controls.xml" left="0" width="182" />
19 <string name="sunrise">
20 Sunrise
21 </string>
22 <string name="sunset">
23 Midday
24 </string>
25 <string name="noon">
26 Noon
27 </string>
28 <string name="midnight">
29 Midnight
30 </string>
31 <string name="revert_region">
32 Revert to Region Default
33 </string>
34</panel>
diff --git a/linden/indra/newview/skins/silver/colors_base.xml b/linden/indra/newview/skins/silver/colors_base.xml
index a69f43f..abe61bf 100644
--- a/linden/indra/newview/skins/silver/colors_base.xml
+++ b/linden/indra/newview/skins/silver/colors_base.xml
@@ -69,6 +69,8 @@
69<TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards --> 69<TextEmbeddedItemColor value="0, 0, 128, 255" /> <!-- Text of items embedded in notecards -->
70<TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor --> 70<TextDefaultColor value="0, 20, 0, 255"/> <!-- Non-keyword text in the script editor -->
71<ScriptBgReadOnlyColor value="180, 180, 180, 255" /> <!-- Not used --> 71<ScriptBgReadOnlyColor value="180, 180, 180, 255" /> <!-- Not used -->
72<TextLinkColor value="0, 20, 255, 255"/>
73<TextLinkHoverColor value="0, 50, 255, 255"/>
72 74
73<!-- LISTBOXES --> 75<!-- LISTBOXES -->
74<ScrollBgReadOnlyColor value="255, 255, 255, 140" /> <!-- Background of read only lists --> 76<ScrollBgReadOnlyColor value="255, 255, 255, 140" /> <!-- Background of read only lists -->
diff --git a/linden/indra/newview/skins/silver/textures/arrow_left.tga b/linden/indra/newview/skins/silver/textures/arrow_left.tga
new file mode 100644
index 0000000..43fbf12
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_left.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/arrow_right.tga b/linden/indra/newview/skins/silver/textures/arrow_right.tga
new file mode 100644
index 0000000..a92ac9c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_right.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml
deleted file mode 100644
index 62738dc..0000000
--- a/linden/indra/newview/skins/silver/xui/en-us/panel_avatar.xml
+++ /dev/null
@@ -1,430 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430">
3 <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab"
4 tab_min_width="50" tab_position="top" width="419">
5 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
6 label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418">
7 <string name="CaptionTextAcctInfo">
8 [ACCTTYPE]
9[PAYMENTINFO]
10[AGEVERIFICATION]
11 </string>
12 <string name="AcctTypeResident">
13 Resident
14 </string>
15 <string name="AcctTypeTrial">
16 Trial
17 </string>
18 <string name="AcctTypeCharterMember">
19 Charter Member
20 </string>
21 <string name="AcctTypeEmployee">
22 Linden Lab Employee
23 </string>
24 <string name="PaymentInfoUsed">
25 Payment Info Used
26 </string>
27 <string name="PaymentInfoOnFile">
28 Payment Info On File
29 </string>
30 <string name="NoPaymentInfoOnFile">
31 No Payment Info On File
32 </string>
33 <string name="AgeVerified">
34 Age-verified
35 </string>
36 <string name="NotAgeVerified">
37 Not Age-verified
38 </string>
39 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
40 bottom="-24" drop_shadow_visible="true" follows="left|top"
41 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
42 mouse_opaque="true" name="Name:" v_pad="0" width="70">
43 Name:
44 </text>
45 <name_editor bevel_style="in" border_style="line"
46 border_thickness="1" bottom="-24" enabled="false" follows="left|top"
47 font="SansSerifSmall" height="16" is_unicode="false" left_delta="75"
48 max_length="254" mouse_opaque="false" name="name"
49 width="180" />
50 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
51 bottom="-24" drop_shadow_visible="true" follows="left|top"
52 font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279"
53 mouse_opaque="true" name="online_yes" v_pad="0" width="121">
54 Currently Online
55 </text>
56 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
57 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
58 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279"
59 mouse_opaque="true" name="label" v_pad="0" width="121">
60 Born:
61 </text>
62 <line_editor bevel_style="in" border_style="line"
63 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top"
64 font="SansSerifSmall" height="16" is_unicode="false" left="279"
65 max_length="254" mouse_opaque="false" name="born"
66 width="121" />
67 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
68 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
69 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279"
70 mouse_opaque="true" name="label2" v_pad="0" width="121">
71 Account:
72 </text>
73 <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279"
74 mouse_opaque="false" name="acct_border" width="121" />
75 <text bg_visible="false" border_drop_shadow_visible="false"
76 border_visible="true" bottom_delta="0" drop_shadow_visible="true"
77 follows="left|top" font="SansSerifSmall" height="48" left="279"
78 mouse_opaque="false" name="acct" width="121" />
79 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
80 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
81 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279"
82 mouse_opaque="true" name="partner_label"
83 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner"
84 v_pad="0" width="130">
85 Partner:
86 </text>
87 <button bottom_delta="2" follows="left|top" font="SansSerif" halign="center"
88 height="16" label="i" label_selected="i" left_delta="44"
89 mouse_opaque="true" name="partner_info"
90 tool_tip="Click to open partner&apos;s profile" width="18" />
91 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
92 height="16" label="?" label_selected="?" left_delta="24"
93 mouse_opaque="true" name="partner_help" width="18" />
94 <line_editor bevel_style="in" border_style="line"
95 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top"
96 font="SansSerifSmall" height="16" is_unicode="false" left="279"
97 max_length="254" mouse_opaque="false" name="partner_edit"
98 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner"
99 width="121">
100 [FIRST] [LAST]
101 </line_editor>
102 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
103 bottom="-44" drop_shadow_visible="true" follows="left|top"
104 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
105 mouse_opaque="true" name="Photo:" v_pad="0" width="70">
106 Photo:
107 </text>
108 <texture_picker allow_no_texture="true" bottom="-179" can_apply_immediately="false"
109 default_image_name="None" follows="left|top" height="151" label=""
110 left="79" mouse_opaque="true" name="img"
111 tool_tip="Click to choose a picture" width="180" />
112 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
113 bottom="-183" drop_shadow_visible="true" follows="left|top"
114 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
115 mouse_opaque="true" name="Groups:" v_pad="0" width="70">
116 Groups:
117 </text>
118 <scroll_list background_visible="true" bottom="-258" column_padding="5" draw_border="true"
119 follows="left|top" height="90" left="79" mouse_opaque="false"
120 multi_select="false" name="groups" width="321" />
121 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
122 bottom="-280" drop_shadow_visible="true" follows="left|top"
123 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
124 mouse_opaque="true" name="About:" v_pad="0" width="70">
125 About:
126 </text>
127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
128 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
129 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
130 mouse_opaque="true" name="(500 chars)" v_pad="0" width="70">
131 (500 chars)
132 </text>
133 <text_editor bottom="-375" embedded_items="false"
134 enabled="true" follows="left|top" font="SansSerifSmall" height="110"
135 is_unicode="false" left="79" max_length="511" mouse_opaque="true"
136 name="about" width="321" word_wrap="true" />
137 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
138 bottom="-403" drop_shadow_visible="true" follows="left|top"
139 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
140 mouse_opaque="true" name="Give item:" v_pad="0" width="75">
141 Give item:
142 </text>
143 <view_border blevel_style="in" border_thickness="0" bottom="-466" follows="left|top"
144 height="466" left_delta="4" mouse_opaque="false" name="drop_target_rect"
145 width="409" />
146 <view_border blevel_style="in" bottom="-403" follows="left|top" height="16" left_delta="75"
147 mouse_opaque="false" name="drop_target_rect_vis" width="321" />
148 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
149 bottom_delta="0" drop_shadow_visible="true" follows="left|top"
150 font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0"
151 mouse_opaque="true" name="Give inventory"
152 tool_tip="Drop inventory items here to give them to this person." v_pad="2"
153 width="321">
154 Drop inventory item here.
155 </text>
156 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
157 initial_value="false" label="Show in search" left="75" mouse_opaque="true"
158 name="allow_publish"
159 tool_tip="Publish extra profile information such as description and image in Search."
160 width="130" />
161 <button bottom="-423" follows="left|top" font="SansSerif" halign="center" height="16"
162 label="?" label_selected="?" left_delta="145" mouse_opaque="true" name="?"
163 width="20" />
164 <button bottom="-428" font="SansSerif" halign="center" height="20" label="Find on Map"
165 label_selected="Find on Map" left="24" mouse_opaque="true"
166 name="Find on Map" width="100" />
167 <button bottom="-428" font="SansSerif" halign="center" height="20"
168 label="Offer Teleport..." label_selected="Offer Teleport..."
169 left_delta="102" mouse_opaque="true" name="Offer Teleport..." width="140" />
170 <button bottom="-428" font="SansSerif" halign="center" height="20"
171 label="Add Friend..." label_selected="Add Friend..." left_delta="142"
172 mouse_opaque="true" name="Add Friend..." width="130" />
173 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Pay..."
174 label_selected="Pay..." left="24" mouse_opaque="true" name="Pay..."
175 width="100" />
176 <button bottom_delta="0" font="SansSerif" halign="center" height="20"
177 label="Instant Message..." label_selected="Instant Message..."
178 left_delta="102" mouse_opaque="true" name="Instant Message..."
179 tool_tip="Instant Message (IM)" width="140" />
180 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Mute"
181 label_selected="Mute" left_delta="142" mouse_opaque="true" name="Mute"
182 width="130" />
183 </panel>
184 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
185 label="Web" left="1" mouse_opaque="true" name="WebProfile" width="418">
186 <line_editor bevel_style="in" border_style="line"
187 border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top"
188 font="SansSerifSmall" height="16" is_unicode="false" left="10"
189 max_length="254" mouse_opaque="true" name="url_edit"
190 width="400" />
191 <flyout_button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center"
192 height="18" label="Load" label_selected="Load" left="10"
193 mouse_opaque="true" name="load" enabled="false"
194 tool_tip="Load this profile page with embedded web browser." width="80" >
195 <flyout_button_item value="open" name="open_item">In external browser</flyout_button_item>
196 <flyout_button_item value="home" name="home_item">Home URL</flyout_button_item>
197 </flyout_button>
198 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
199 height="18" label="?" label_selected="?" left_delta="85"
200 mouse_opaque="true" name="web_profile_help" width="18" />
201 <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16"
202 initial_value="false" label="Automatically load web profiles"
203 left_delta="30" mouse_opaque="true" name="auto_load"
204 tool_tip="Automatically load ALL profile webpages without asking first."
205 width="127" />
206 <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400"
207 ignore_ui_scale="false" left="10" name="profile_html" start_url=""
208 width="400" />
209 <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70"
210 top="25" />
211 </panel>
212 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
213 label="Interests" left="1" mouse_opaque="true" name="Interests" width="418">
214 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
215 bottom="-36" drop_shadow_visible="true" follows="left|top"
216 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
217 mouse_opaque="true" name="I Want To:" v_pad="0" width="70">
218 I Want To:
219 </text>
220 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
221 initial_value="false" label="Build" left_delta="70" mouse_opaque="true"
222 name="chk0" width="90" />
223 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
224 initial_value="false" label="Explore" left_delta="170" mouse_opaque="true"
225 name="chk1" width="90" />
226 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
227 initial_value="false" label="Meet" left_delta="-170" mouse_opaque="true"
228 name="chk2" width="57" />
229 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
230 initial_value="false" label="Be Hired" left_delta="170" mouse_opaque="true"
231 name="chk6" width="92" />
232 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
233 initial_value="false" label="Group" left_delta="-170" mouse_opaque="true"
234 name="chk3" width="90" />
235 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
236 initial_value="false" label="Buy" left_delta="170" mouse_opaque="true"
237 name="chk4" width="90" />
238 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
239 initial_value="false" label="Sell" left_delta="-170" mouse_opaque="true"
240 name="chk5" width="50" />
241 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
242 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true"
243 name="chk7" width="92" />
244 <line_editor bevel_style="in" border_style="line"
245 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
246 font="SansSerifSmall" height="16" is_unicode="false" left="74"
247 max_length="254" mouse_opaque="true" name="want_to_edit"
248 width="330" />
249 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
250 bottom_delta="-26" drop_shadow_visible="true" follows="left|top"
251 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
252 mouse_opaque="true" name="Skills:" v_pad="0" width="70">
253 Skills:
254 </text>
255 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
256 initial_value="false" label="Textures" left_delta="70" mouse_opaque="true"
257 name="schk0" width="90" />
258 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
259 initial_value="false" label="Architecture" left_delta="170"
260 mouse_opaque="true" name="schk1" width="93" />
261 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
262 initial_value="false" label="Event Planning" left_delta="0"
263 mouse_opaque="true" name="schk2" width="105" />
264 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
265 initial_value="false" label="Modeling" left_delta="-170"
266 mouse_opaque="true" name="schk3" width="90" />
267 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
268 initial_value="false" label="Scripting" left_delta="0" mouse_opaque="true"
269 name="schk4" width="90" />
270 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
271 initial_value="false" label="Custom Characters" left_delta="170"
272 mouse_opaque="true" name="schk5" width="127" />
273 <line_editor bevel_style="in" border_style="line"
274 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
275 font="SansSerifSmall" height="16" is_unicode="false" left="74"
276 max_length="254" mouse_opaque="true" name="skills_edit"
277 width="330" />
278 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
279 bottom_delta="-30" drop_shadow_visible="true" follows="left|top"
280 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
281 mouse_opaque="true" name="Languages:" v_pad="0" width="70">
282 Languages:
283 </text>
284 <line_editor bevel_style="in" border_style="line"
285 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top"
286 font="SansSerifSmall" height="16" is_unicode="false" left="74"
287 max_length="254" mouse_opaque="true" name="languages_edit"
288 width="330" />
289 </panel>
290 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
291 label="Picks" left="1" mouse_opaque="true" name="Picks" width="418">
292 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
293 bottom="-20" drop_shadow_visible="true" follows="left|top"
294 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114"
295 mouse_opaque="true"
296 name="Tell everyone about your favorite places in Second Life." v_pad="0"
297 width="302">
298 Tell everyone about your favorite places in Second Life.
299 </text>
300 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
301 height="20" label="New..." label_selected="New..." left="114"
302 mouse_opaque="true" name="New..." width="75" />
303 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
304 label="Delete..." label_selected="Delete..." left_delta="79"
305 mouse_opaque="true" name="Delete..." width="75" />
306 <tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false"
307 name="picks tab" tab_position="left" width="412" />
308 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
309 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif"
310 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false"
311 name="loading_text" v_pad="0" width="302">
312 Loading...
313 </text>
314 </panel>
315 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
316 label="Classified" left="1" mouse_opaque="true" name="Classified"
317 width="418">
318 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
319 bottom="-20" drop_shadow_visible="true" follows="left|top"
320 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="114"
321 mouse_opaque="true"
322 name="Place an ad in Second Life&apos;s classified listings." v_pad="0"
323 width="302">
324 Place an ad in Second Life&apos;s classified listings.
325 </text>
326 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
327 height="20" label="New..." label_selected="New..." left="114"
328 mouse_opaque="true" name="New..." width="75" />
329 <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
330 label="Delete..." label_selected="Delete..." left_delta="79"
331 mouse_opaque="true" name="Delete..." width="75" />
332 <tab_container bottom="-443" follows="left|top" height="395" left="4" mouse_opaque="false"
333 name="classified tab" tab_position="left" width="412" />
334 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
335 bottom="-70" drop_shadow_visible="true" follows="left|top" font="SansSerif"
336 h_pad="0" halign="left" height="20" left="114" mouse_opaque="false"
337 name="loading_text" v_pad="0" width="302">
338 Loading...
339 </text>
340 </panel>
341 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
342 label="1st Life" left="1" mouse_opaque="true" name="1st Life" width="418">
343 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
344 bottom="-36" drop_shadow_visible="true" follows="left|top"
345 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
346 mouse_opaque="true" name="Photo:" v_pad="0" width="61">
347 Photo:
348 </text>
349 <texture_picker allow_no_texture="true" bottom="-171" can_apply_immediately="false"
350 default_image_name="None" follows="left|top" height="151" label=""
351 left="70" mouse_opaque="true" name="img"
352 tool_tip="Click to choose a picture" width="135" />
353 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
354 bottom="-203" drop_shadow_visible="true" follows="left|top"
355 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
356 mouse_opaque="true" name="Info:" v_pad="0" width="61">
357 Info:
358 </text>
359 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
360 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
361 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
362 mouse_opaque="true" name="(250 chars)" v_pad="0" width="65">
363 (250 chars)
364 </text>
365 <text_editor bottom="-347" embedded_items="false"
366 enabled="true" follows="left|top" font="SansSerifSmall" height="160"
367 is_unicode="false" left="70" max_length="254" mouse_opaque="false"
368 name="about" width="330" word_wrap="true" />
369 </panel>
370 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
371 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418">
372 <string name="Loading">
373 Loading...
374 </string>
375 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
376 bottom="-52" drop_shadow_visible="true" follows="left|top"
377 font="SansSerifSmall" h_pad="0" halign="left" height="48" left="10"
378 mouse_opaque="true" name="label" v_pad="0" width="412">
379 Use this space to record your notes about this person. Keep track
380of trades in progress, joint projects, etc. Only you can see these
381notes. This person cannot see them, nor can other people.
382 </text>
383 <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top"
384 font="SansSerif" height="256" is_unicode="false" left="10"
385 max_length="1023" mouse_opaque="true" name="notes edit" width="400"
386 word_wrap="false" />
387 </panel>
388 </tab_container>
389 <button bottom="-483" font="SansSerif" halign="center" height="20" label="OK"
390 label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" />
391 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel"
392 label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel"
393 width="100" />
394 <button bottom_delta="132" font="SansSerif" halign="center" height="20" label="Kick"
395 label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" />
396 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze"
397 label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze"
398 tool_tip="Stop this resident&apos;s movement and chat." width="72" />
399 <button bottom_delta="-24" font="SansSerif" halign="center" height="20"
400 label="Unfreeze" label_selected="Unfreeze" left="4" mouse_opaque="true"
401 name="Unfreeze" tool_tip="Thaw resident" width="72" />
402 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="CSR"
403 label_selected="CSR" left="4" mouse_opaque="true" name="csr_btn"
404 tool_tip="Open customer service tool for this resident" width="72" />
405 <string name="ShowOnMapNonFriend">
406 Show location on the map.
407Disabled because you have not
408formed a friendship with them.
409 </string>
410 <string name="ShowOnMapFriendOffline">
411 Show location on the map.
412 Disabled because they are not online.
413 </string>
414 <string name="ShowOnMapFriendOnline">
415 Show location on the map.
416 </string>
417 <string name="TeleportGod">
418 Force a teleport to your location.
419 </string>
420 <string name="TeleportPrelude">
421 Offer a teleport to your location.
422Disabled until you leave Orientation Island.
423 </string>
424 <string name="TeleportNormal">
425 Offer a teleport to your location.
426 </string>
427 <string name="Loading">
428 Loading...
429 </string>
430</panel>