aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
authorJacek Antonelli2009-09-09 11:38:26 -0500
committerJacek Antonelli2009-09-09 11:59:42 -0500
commitced5a5f6a0e7d294f9e477409387674fcecc532c (patch)
treee7500de0806009c2955bef6af7103ac60ae1e8e0 /linden/indra/newview
parentMerge branch 'objectbackup' into next (diff)
parentCommented out permissions button (todo: backport this if there's time) (diff)
downloadmeta-impy-ced5a5f6a0e7d294f9e477409387674fcecc532c.zip
meta-impy-ced5a5f6a0e7d294f9e477409387674fcecc532c.tar.gz
meta-impy-ced5a5f6a0e7d294f9e477409387674fcecc532c.tar.bz2
meta-impy-ced5a5f6a0e7d294f9e477409387674fcecc532c.tar.xz
Merge remote branch 'mccabe/1.2.0-next' into next
Moved "Backup" pie menu item to fit "Go Here" in top-left slot. Conflicts: linden/indra/newview/llviewermenu.cpp linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml
Diffstat (limited to 'linden/indra/newview')
-rw-r--r--linden/indra/newview/CMakeLists.txt8
-rw-r--r--linden/indra/newview/app_settings/settings.xml24
-rw-r--r--linden/indra/newview/jcfloater_animation_list.cpp462
-rw-r--r--linden/indra/newview/jcfloater_animation_list.h88
-rw-r--r--linden/indra/newview/llagent.cpp30
-rw-r--r--linden/indra/newview/llagent.h7
-rw-r--r--linden/indra/newview/llappviewer.cpp7
-rw-r--r--linden/indra/newview/llchatbar.cpp43
-rw-r--r--linden/indra/newview/llchatbar.h5
-rw-r--r--linden/indra/newview/llfloaterassetbrowser.cpp466
-rw-r--r--linden/indra/newview/llfloaterassetbrowser.h84
-rw-r--r--linden/indra/newview/llfloaterchat.cpp31
-rw-r--r--linden/indra/newview/llfloaterchat.h2
-rw-r--r--linden/indra/newview/llfloatertelehub.cpp1
-rw-r--r--linden/indra/newview/llfloatertools.cpp90
-rw-r--r--linden/indra/newview/llfloatertools.h4
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp65
-rw-r--r--linden/indra/newview/llpanelpermissions.h1
-rw-r--r--linden/indra/newview/llprefschat.cpp20
-rw-r--r--linden/indra/newview/llprefsim.cpp2
-rw-r--r--linden/indra/newview/llstartup.cpp4
-rw-r--r--linden/indra/newview/lltool.cpp15
-rw-r--r--linden/indra/newview/lltool.h3
-rw-r--r--linden/indra/newview/lltoolbrush.cpp45
-rw-r--r--linden/indra/newview/lltoolbrush.h5
-rw-r--r--linden/indra/newview/lltoolpie.cpp2
-rw-r--r--linden/indra/newview/llviewermenu.cpp169
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp79
-rw-r--r--linden/indra/newview/llviewertexteditor.h2
-rw-r--r--linden/indra/newview/llviewerwindow.cpp479
-rw-r--r--linden/indra/newview/llviewerwindow.h9
-rw-r--r--linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.pngbin0 -> 10714 bytes
-rw-r--r--linden/indra/newview/skins/default/html/en-us/loading/loading.html2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml74
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml29
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml197
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml19
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml10
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml16
41 files changed, 1949 insertions, 670 deletions
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt
index bd38476..f224652 100644
--- a/linden/indra/newview/CMakeLists.txt
+++ b/linden/indra/newview/CMakeLists.txt
@@ -61,6 +61,7 @@ include_directories(
61 ) 61 )
62 62
63set(viewer_SOURCE_FILES 63set(viewer_SOURCE_FILES
64 jcfloater_animation_list.cpp
64 llagent.cpp 65 llagent.cpp
65 llagentdata.cpp 66 llagentdata.cpp
66 llagentlanguage.cpp 67 llagentlanguage.cpp
@@ -121,6 +122,7 @@ set(viewer_SOURCE_FILES
121 llfloaterabout.cpp 122 llfloaterabout.cpp
122 llfloateractivespeakers.cpp 123 llfloateractivespeakers.cpp
123 llfloateranimpreview.cpp 124 llfloateranimpreview.cpp
125 llfloaterassetbrowser.cpp
124 llfloaterauction.cpp 126 llfloaterauction.cpp
125 llfloateravatarinfo.cpp 127 llfloateravatarinfo.cpp
126 llfloateravatarpicker.cpp 128 llfloateravatarpicker.cpp
@@ -460,6 +462,7 @@ set(viewer_HEADER_FILES
460 CMakeLists.txt 462 CMakeLists.txt
461 ViewerInstall.cmake 463 ViewerInstall.cmake
462 464
465 jcfloater_animation_list.h
463 llagent.h 466 llagent.h
464 llagentdata.h 467 llagentdata.h
465 llagentlanguage.h 468 llagentlanguage.h
@@ -522,6 +525,7 @@ set(viewer_HEADER_FILES
522 llfloaterabout.h 525 llfloaterabout.h
523 llfloateractivespeakers.h 526 llfloateractivespeakers.h
524 llfloateranimpreview.h 527 llfloateranimpreview.h
528 llfloaterassetbrowser.h
525 llfloaterauction.h 529 llfloaterauction.h
526 llfloateravatarinfo.h 530 llfloateravatarinfo.h
527 llfloateravatarpicker.h 531 llfloateravatarpicker.h
@@ -1036,7 +1040,9 @@ set(viewer_XUI_FILES
1036 skins/default/xui/en-us/floater_about_land.xml 1040 skins/default/xui/en-us/floater_about_land.xml
1037 skins/default/xui/en-us/floater_about.xml 1041 skins/default/xui/en-us/floater_about.xml
1038 skins/default/xui/en-us/floater_active_speakers.xml 1042 skins/default/xui/en-us/floater_active_speakers.xml
1043 skins/default/xui/en-us/floater_animation_list.xml
1039 skins/default/xui/en-us/floater_animation_preview.xml 1044 skins/default/xui/en-us/floater_animation_preview.xml
1045 skins/default/xui/en-us/floater_asset_browser.xml
1040 skins/default/xui/en-us/floater_auction.xml 1046 skins/default/xui/en-us/floater_auction.xml
1041 skins/default/xui/en-us/floater_audio_volume.xml 1047 skins/default/xui/en-us/floater_audio_volume.xml
1042 skins/default/xui/en-us/floater_avatar_picker.xml 1048 skins/default/xui/en-us/floater_avatar_picker.xml
@@ -1398,6 +1404,7 @@ if (WINDOWS)
1398endif (WINDOWS) 1404endif (WINDOWS)
1399 1405
1400target_link_libraries(${VIEWER_BINARY_NAME} 1406target_link_libraries(${VIEWER_BINARY_NAME}
1407 ${NDOF_LIBRARY}
1401 ${LLAUDIO_LIBRARIES} 1408 ${LLAUDIO_LIBRARIES}
1402 ${LLCHARACTER_LIBRARIES} 1409 ${LLCHARACTER_LIBRARIES}
1403 ${LLIMAGE_LIBRARIES} 1410 ${LLIMAGE_LIBRARIES}
@@ -1427,7 +1434,6 @@ target_link_libraries(${VIEWER_BINARY_NAME}
1427 ${SDL_LIBRARY} 1434 ${SDL_LIBRARY}
1428 ${SMARTHEAP_LIBRARY} 1435 ${SMARTHEAP_LIBRARY}
1429 ${UI_LIBRARIES} 1436 ${UI_LIBRARIES}
1430 ${NDOF_LIBRARY}
1431 ${WINDOWS_LIBRARIES} 1437 ${WINDOWS_LIBRARIES}
1432 ${XMLRPCEPI_LIBRARIES} 1438 ${XMLRPCEPI_LIBRARIES}
1433 ${ELFIO_LIBRARIES} 1439 ${ELFIO_LIBRARIES}
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index ca9d53d..154fd5f 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -1204,6 +1204,17 @@
1204 <key>Value</key> 1204 <key>Value</key>
1205 <real>0.5</real> 1205 <real>0.5</real>
1206 </map> 1206 </map>
1207 <key>ChatChannelSelect</key>
1208 <map>
1209 <key>Comment</key>
1210 <string>Toggle custom channel controls in the chat bar</string>
1211 <key>Persist</key>
1212 <integer>1</integer>
1213 <key>Type</key>
1214 <string>Boolean</string>
1215 <key>Value</key>
1216 <integer>0</integer>
1217 </map>
1207 <key>ChatFontSize</key> 1218 <key>ChatFontSize</key>
1208 <map> 1219 <map>
1209 <key>Comment</key> 1220 <key>Comment</key>
@@ -2344,6 +2355,17 @@
2344 <key>Value</key> 2355 <key>Value</key>
2345 <integer>0</integer> 2356 <integer>0</integer>
2346 </map> 2357 </map>
2358 <key>DoubleClickTeleport</key>
2359 <map>
2360 <key>Comment</key>
2361 <string>Enable double-click teleport</string>
2362 <key>Persist</key>
2363 <integer>1</integer>
2364 <key>Type</key>
2365 <string>Boolean</string>
2366 <key>Value</key>
2367 <integer>1</integer>
2368 </map>
2347 <key>DragAndDropToolTipDelay</key> 2369 <key>DragAndDropToolTipDelay</key>
2348 <map> 2370 <map>
2349 <key>Comment</key> 2371 <key>Comment</key>
@@ -5895,7 +5917,7 @@
5895 <key>Persist</key> 5917 <key>Persist</key>
5896 <integer>1</integer> 5918 <integer>1</integer>
5897 <key>Type</key> 5919 <key>Type</key>
5898 <string>S32</string> 5920 <string>F32</string>
5899 <key>Value</key> 5921 <key>Value</key>
5900 <integer>0</integer> 5922 <integer>0</integer>
5901 </map> 5923 </map>
diff --git a/linden/indra/newview/jcfloater_animation_list.cpp b/linden/indra/newview/jcfloater_animation_list.cpp
new file mode 100644
index 0000000..9f5c9bb
--- /dev/null
+++ b/linden/indra/newview/jcfloater_animation_list.cpp
@@ -0,0 +1,462 @@
1/* Copyright (c) 2009
2 *
3 * Modular Systems Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or
6 * without modification, are permitted provided that the following
7 * conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following
13 * disclaimer in the documentation and/or other materials provided
14 * with the distribution.
15 * 3. Neither the name Modular Systems Ltd nor the names of its contributors
16 * may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS “AS IS”
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29 * THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include "llviewerprecompiledheaders.h"
33
34#include "lluuid.h"
35#include "lluictrlfactory.h"
36#include "llvoavatar.h"
37
38#include "llagent.h"
39
40#include "llscrolllistctrl.h"
41
42#include "llviewerobjectlist.h"
43
44#include "jcfloater_animation_list.h"
45
46#include "llviewercontrol.h"
47
48#include "llinventorymodel.h"
49
50#include "llcategory.h"
51
52#include "llfloaterchat.h"
53
54#include "llfloateravatarinfo.h"
55
56
57
58
59
60//std::map<LLUUID, AObjectData> JCFloaterAnimList::mObjectOwners;
61
62JCFloaterAnimList::JCFloaterAnimList(const LLSD& seed) :
63 LLFloater(std::string("animation list")),
64 mAnimList(0)
65{
66 BOOL no_open = FALSE;
67 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_animation_list.xml",&getFactoryMap(),no_open);
68}
69
70JCFloaterAnimList::~JCFloaterAnimList()
71{
72}
73
74//static
75bool JCFloaterAnimList::visible(LLFloater* instance, const LLSD& key)
76{
77 return VisibilityPolicy<LLFloater>::visible(instance, key);
78}
79
80//static
81void JCFloaterAnimList::show(LLFloater* instance, const LLSD& key)
82{
83 VisibilityPolicy<LLFloater>::show(instance, key);
84}
85
86//static
87void JCFloaterAnimList::hide(LLFloater* instance, const LLSD& key)
88{
89 VisibilityPolicy<LLFloater>::hide(instance, key);
90}
91
92void JCFloaterAnimList::onVisibilityChange(BOOL new_visibility)
93{
94 if(!new_visibility) {
95 // *HACK: clean up memory on hiding
96 mObjectOwners.clear();
97 }
98}
99
100BOOL JCFloaterAnimList::postBuild()
101{
102 mAnimList = getChild<LLScrollListCtrl>("animation_list");
103 mAnimList->setCallbackUserData(this);
104 mAnimList->setDoubleClickCallback(onDoubleClick);
105 mAnimList->sortByColumn("animation_uuid", TRUE);
106
107 childSetAction("Stop Selected",StopSelected,this);
108 childSetAction("Revoke Selected",RevokeSelected,this);
109 childSetAction("Stop+Revoke Selected",StopRevokeSelected,this);
110 childSetAction("Open Owner Profile",OpenProfile,this);
111
112 return 1;
113}
114
115void JCFloaterAnimList::StopSelected(void *userdata )
116{
117 JCFloaterAnimList *self = (JCFloaterAnimList*)userdata;
118 LLDynamicArray<LLUUID> ids;
119 std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected();
120 for( std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); itr++ )
121 {
122 LLScrollListItem *item = *itr;
123 const LLUUID &id = item->getColumn(LIST_ANIMATION_UUID)->getValue().asUUID();
124 if( ids.find(id) == LLDynamicArray<LLUUID>::FAIL )
125 {
126 ids.put(id);
127 }
128 }
129 gAgent.sendAnimationRequests(ids,ANIM_REQUEST_STOP);
130}
131
132void JCFloaterAnimList::RevokeSelected(void *userdata )
133{
134 JCFloaterAnimList *self = (JCFloaterAnimList*)userdata;
135 LLDynamicArray<LLUUID> ids;
136 std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected();
137 for( std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); itr++ )
138 {
139 LLScrollListItem *item = *itr;
140 const LLUUID &id = item->getColumn(LIST_OBJECT_UUID)->getValue().asUUID();
141 if( ids.find(id) == LLDynamicArray<LLUUID>::FAIL )
142 {
143 ids.put(id);
144 }
145 }
146 if( !ids.empty() )
147 {
148 for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
149 {
150 LLUUID id = *itr;
151 LLMessageSystem* msg = gMessageSystem;
152 msg->newMessageFast(_PREHASH_RevokePermissions);
153 msg->nextBlockFast(_PREHASH_AgentData);
154 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
155 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
156 msg->nextBlockFast(_PREHASH_Data);
157 msg->addUUIDFast(_PREHASH_ObjectID, id);
158 msg->addU32Fast(_PREHASH_ObjectPermissions, U32_MAX);
159 gAgent.sendReliableMessage();
160 }
161 }
162}
163
164void JCFloaterAnimList::StopRevokeSelected(void *userdata )
165{
166 StopSelected(userdata);
167 RevokeSelected(userdata);
168}
169
170void JCFloaterAnimList::OpenProfile(void *userdata )
171{
172 JCFloaterAnimList *self = (JCFloaterAnimList*)userdata;
173 std::vector< LLScrollListItem * > items = self->mAnimList->getAllSelected();
174 if(!items.empty())
175 {
176 //LLVOAvatar* avatarp = gAgent.getAvatarObject();
177 for(std::vector< LLScrollListItem * >::iterator itr = items.begin(); itr != items.end(); ++itr)
178 {
179 LLScrollListItem *item = *itr;
180 const LLUUID &object_id = item->getColumn(LIST_OBJECT_UUID)->getValue().asUUID();
181 LLFloaterAvatarInfo::showFromDirectory(self->mObjectOwners[object_id].owner_id);
182 }
183 }
184}
185
186/*void JCFloaterAnimList::ReturnSelected(void *userdata )
187{
188 JCFloaterAnimList *self = (JCFloaterAnimList*)userdata;
189 LLDynamicArray<LLUUID> ids = self->mAnimList->getSelectedIDs();
190 if(ids.size() > 0)
191 {
192 LLVOAvatar* avatarp = gAgent.getAvatarObject();
193 for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
194 {
195 LLUUID id = *itr;
196
197 }
198 }
199}*/
200
201void JCFloaterAnimList::draw()
202{
203 refresh();
204 LLFloater::draw();
205}
206//LLScrollListCtrl::getSelectedIDs();
207void JCFloaterAnimList::refresh()
208{
209 LLDynamicArray<LLUUID> selected = mAnimList->getSelectedIDs();
210 S32 scrollpos = mAnimList->getScrollPos();
211 mAnimList->deleteAllItems();
212 LLVOAvatar* avatarp = gAgent.getAvatarObject();
213 if (avatarp)
214 {
215 LLVOAvatar::AnimSourceIterator ai;
216
217 for(ai = avatarp->mAnimationSources.begin(); ai != avatarp->mAnimationSources.end(); ++ai)
218 {
219 LLSD element;
220 const LLUUID &aifirst = ai->first;
221 LLViewerInventoryItem* item = gInventory.getItem(findItemID(ai->second,0));
222
223 // *NOTE: conceal id to prevent bugs, use
224 // item->getColumn(LIST_ANIMATION_UUID)->getValue().asUUID()
225 // instead
226 element["id"] = LLUUID::null.combine(ai->second);
227 element["columns"][LIST_ANIMATION_NAME]["column"] = "Anim Name";
228 element["columns"][LIST_ANIMATION_NAME]["type"] = "text";
229 element["columns"][LIST_ANIMATION_NAME]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
230 if(item)
231 {
232 element["columns"][LIST_ANIMATION_NAME]["value"] = item->getName();//ai->second//"avatar_icon";
233 }else
234 {
235 element["columns"][LIST_ANIMATION_NAME]["value"] = "Not in Inventory";
236 }
237 element["columns"][LIST_ANIMATION_UUID]["column"] = "Animation UUID";
238 element["columns"][LIST_ANIMATION_UUID]["type"] = "text";
239 element["columns"][LIST_ANIMATION_UUID]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
240 element["columns"][LIST_ANIMATION_UUID]["value"] = ai->second;
241 element["columns"][LIST_OBJECT_UUID]["column"] = "Source Object UUID";
242 element["columns"][LIST_OBJECT_UUID]["type"] = "text";
243 element["columns"][LIST_OBJECT_UUID]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
244 element["columns"][LIST_OBJECT_UUID]["value"] = aifirst;
245 element["columns"][LIST_OBJECT_OWNER]["column"] = "Source Owner";
246 element["columns"][LIST_OBJECT_OWNER]["type"] = "text";
247 element["columns"][LIST_OBJECT_OWNER]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
248 std::string name("?");
249 LLViewerObject *object = gObjectList.findObject(aifirst);
250 bool is_first = ( mObjectOwners.count( aifirst ) == 0 );
251 bool just_shown = false;
252 LLUUID owner_id(LLUUID::null);
253
254 if( !is_first )
255 {
256 name = mObjectOwners[aifirst].owner_name;
257 owner_id = mObjectOwners[aifirst].owner_id;
258 }
259
260 if( object )
261 {
262 if( object->permYouOwner() )
263 {
264 owner_id = gAgent.getID();
265 gAgent.getName(name);
266 }
267 else
268 {
269 object = (LLViewerObject *) object->getRoot();
270 if( object->isAvatar() )
271 {
272 owner_id = object->getID();
273 name = ((LLVOAvatar *)object)->getFullname();
274 }
275 }
276 }
277
278 {
279 AObjectData &data = mObjectOwners[aifirst];
280 if( object )
281 {
282 if( !data.in_object_list )
283 {
284 just_shown = true;
285 data.in_object_list = true;
286 }
287 data.root_id = ( (LLViewerObject*)object->getRoot() )->getID();
288 }
289 data.owner_name = name;
290 data.owner_id = owner_id;
291 }
292
293 if( is_first || just_shown ) {
294 if( name == "?" && !aifirst.isNull()) {
295 LLMessageSystem* msg = gMessageSystem;
296 msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
297 msg->nextBlockFast(_PREHASH_AgentData);
298 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
299 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
300 msg->nextBlockFast(_PREHASH_ObjectData);
301 msg->addU32Fast(_PREHASH_RequestFlags, 0 );
302 if( object )
303 {
304 LL_INFOS("Avatar List") << "Sending RequestObjectPropertiesFamily packet for id( " << aifirst.asString() << " ) on object( " << object->getID().asString() << " )" << LL_ENDL;
305 msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
306 }
307 else
308 {
309 LL_INFOS("Avatar List") << "Sending RequestObjectPropertiesFamily packet for id( " << aifirst.asString() << " )" << LL_ENDL;
310 msg->addUUIDFast(_PREHASH_ObjectID, aifirst);
311 }
312 gAgent.sendReliableMessage();
313 }
314 }
315 element["columns"][LIST_OBJECT_OWNER]["value"] = name;
316 mAnimList->addElement(element, ADD_BOTTOM);
317 //LLViewerObject* objectp = gObjectList.findObject(ai->first);
318 //if(objectp)
319 //{
320 // //objectp->
321 //}
322
323 //object_ids.insert(ai->first);
324 //animation_ids.insert(ai->second);
325 }
326 }
327
328 mAnimList->sortItems();
329 mAnimList->selectMultiple(selected);
330 mAnimList->setScrollPos(scrollpos);
331}
332
333void JCFloaterAnimList::callbackLoadOwnerName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data)
334{
335 LLUUID *oid = (LLUUID*)data;
336 JCFloaterAnimList *self = JCFloaterAnimList::getInstance(LLSD());
337 if(self->mObjectOwners.count( *oid ) > 0)
338 {
339 self->mObjectOwners[*oid].owner_name = first + " " + last;
340 }
341 delete oid;
342}
343
344void JCFloaterAnimList::processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data)
345{
346 if(!JCFloaterAnimList::instanceVisible(LLSD())) return;
347 JCFloaterAnimList *self = JCFloaterAnimList::getInstance(LLSD());
348 LLUUID object_id;
349 U32 request_flags;
350 LLUUID creator_id;
351 LLUUID owner_id;
352 LLUUID group_id;
353 LLUUID extra_id;
354 U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask;
355 LLSaleInfo sale_info;
356 LLCategory category;
357 msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_RequestFlags, request_flags );
358 msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, object_id );
359 msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id );
360 msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id );
361 msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask );
362 msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask );
363 msg->getU32Fast(_PREHASH_ObjectData,_PREHASH_GroupMask, group_mask );
364 msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask );
365 msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask);
366 sale_info.unpackMessage(msg, _PREHASH_ObjectData);
367 category.unpackMessage(msg, _PREHASH_ObjectData);
368 LLUUID last_owner_id;
369 msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id );
370 std::string name;
371 msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name);
372 std::string desc;
373 msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc);
374
375 for( std::map<LLUUID, AObjectData>::iterator di = self->mObjectOwners.begin(); di != self->mObjectOwners.end(); di++ )
376 {
377 const LLUUID &id = di->first;
378 const AObjectData &data = di->second;
379
380 if(data.root_id == object_id || data.owner_id == object_id)
381 {
382 LLUUID* ref = new LLUUID(id);
383 self->mObjectOwners[id].owner_id = owner_id;
384 gCacheName->get(owner_id, FALSE, callbackLoadOwnerName, (void*)ref);
385 }
386 }
387}
388
389const LLUUID& JCFloaterAnimList::findItemID(const LLUUID& asset_id, BOOL copyable_only)
390{
391 LLViewerInventoryCategory::cat_array_t cats;
392 LLViewerInventoryItem::item_array_t items;
393 LLAssetIDMatches asset_id_matches(asset_id);
394 gInventory.collectDescendentsIf(LLUUID::null,
395 cats,
396 items,
397 LLInventoryModel::INCLUDE_TRASH,
398 asset_id_matches);
399
400 if (items.count())
401 {
402 // search for copyable version first
403 for (S32 i = 0; i < items.count(); i++)
404 {
405 LLInventoryItem* itemp = items[i];
406 LLPermissions item_permissions = itemp->getPermissions();
407 if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
408 {
409 return itemp->getUUID();
410 }
411 }
412 // otherwise just return first instance, unless copyable requested
413 if (copyable_only)
414 {
415 return LLUUID::null;
416 }
417 else
418 {
419 return items[0]->getUUID();
420 }
421 }
422
423 return LLUUID::null;
424}
425
426/*void JCFloaterAnimList::onClickCopyAnimationUUID(void *userdata)
427{
428 LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
429 LLScrollListItem *item = self->mAvatarList->getFirstSelected();
430
431 if ( NULL == item ) return;
432
433 LLUUID agent_id = item->getUUID();
434
435 char buffer[UUID_STR_LENGTH];
436 agent_id.toString(buffer);
437
438 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
439}*/
440
441void JCFloaterAnimList::onDoubleClick(void *userdata)
442{
443 //JCFloaterAnimList *self = (JCFloaterAnimList*)userdata;
444 //LLScrollListItem *item = self->mAnimList->getFirstSelected();
445 //if(!item)return;
446 //LLUUID agent_id = item->getUUID();
447
448 //gAgent.setFocusObject(gObjectList.findObject(agent_id));
449 //gAgent.setFocusOnAvatar(FALSE, TRUE);
450}
451
452void JCFloaterAnimList::close(bool app)
453{
454 //sInstance->setVisible(0);
455//#ifdef RECONSTRUCT_ON_TOGGLE
456// sInstance = NULL;
457 LLFloater::close(app);
458//#else
459// sInstance->setVisible(!(sInstance->getVisible()));
460//#endif
461}
462
diff --git a/linden/indra/newview/jcfloater_animation_list.h b/linden/indra/newview/jcfloater_animation_list.h
new file mode 100644
index 0000000..d8262f0
--- /dev/null
+++ b/linden/indra/newview/jcfloater_animation_list.h
@@ -0,0 +1,88 @@
1/* Copyright (c) 2009
2 *
3 * Modular Systems Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or
6 * without modification, are permitted provided that the following
7 * conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following
13 * disclaimer in the documentation and/or other materials provided
14 * with the distribution.
15 * 3. Neither the name Modular Systems Ltd nor the names of its contributors
16 * may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS “AS IS”
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29 * THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include "llfloater.h"
33#include "lluuid.h"
34#include "llstring.h"
35
36struct AObjectData
37{
38 std::string owner_name;
39 LLUUID owner_id;
40 LLUUID root_id;
41 bool in_object_list;
42};
43
44class JCFloaterAnimList : public LLFloater, public LLUISingleton<JCFloaterAnimList, JCFloaterAnimList>
45{
46public:
47 JCFloaterAnimList(const LLSD& seed);
48 virtual ~JCFloaterAnimList();
49
50 /*virtual*/ BOOL postBuild();
51 /*virtual*/ void draw();
52 /*virtual*/ void onVisibilityChange(BOOL new_visibility);
53
54 /*virtual*/ void close(bool app = 0);
55 void refresh();
56
57 const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only);
58
59 static void callbackLoadOwnerName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data);
60
61 static void processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data);
62
63 static bool visible(LLFloater* instance, const LLSD& key);
64 static void show(LLFloater* instance, const LLSD& key);
65 static void hide(LLFloater* instance, const LLSD& key);
66
67private:
68
69 enum ANIMATION_COLUMN_ORDER
70 {
71 LIST_ANIMATION_NAME,
72 LIST_ANIMATION_UUID,
73 LIST_OBJECT_UUID,
74 LIST_OBJECT_OWNER
75 };
76
77 LLScrollListCtrl* mAnimList;
78
79 std::map<LLUUID, AObjectData> mObjectOwners;
80
81 static void StopSelected(void *userdata );
82 static void RevokeSelected(void *userdata );
83 static void StopRevokeSelected(void *userdata );
84 static void OpenProfile(void *userdata );
85 static void onDoubleClick(void *userdata);
86
87};
88
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index e71f1b7..d73ddb6 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -232,6 +232,7 @@ LLAgent gAgent;
232// Statics 232// Statics
233// 233//
234BOOL LLAgent::sDebugDisplayTarget = FALSE; 234BOOL LLAgent::sDebugDisplayTarget = FALSE;
235BOOL LLAgent::sPhantom = FALSE;
235 236
236const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; 237const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f;
237 238
@@ -845,6 +846,35 @@ void LLAgent::toggleFlying()
845 846
846 847
847//----------------------------------------------------------------------------- 848//-----------------------------------------------------------------------------
849// togglePhantom()
850//-----------------------------------------------------------------------------
851void LLAgent::togglePhantom()
852{
853 BOOL phan = !(sPhantom);
854
855 setPhantom( phan );
856}
857
858
859//-----------------------------------------------------------------------------
860// setPhantom() lgg
861//-----------------------------------------------------------------------------
862void LLAgent::setPhantom(BOOL phantom)
863{
864 sPhantom = phantom;
865}
866
867
868//-----------------------------------------------------------------------------
869// getPhantom() lgg
870//-----------------------------------------------------------------------------
871BOOL LLAgent::getPhantom()
872{
873 return sPhantom;
874}
875
876
877//-----------------------------------------------------------------------------
848// setRegion() 878// setRegion()
849//----------------------------------------------------------------------------- 879//-----------------------------------------------------------------------------
850void LLAgent::setRegion(LLViewerRegion *regionp) 880void LLAgent::setRegion(LLViewerRegion *regionp)
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index f64bf95..d6854e4 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -375,6 +375,11 @@ public:
375 // Does this parcel allow you to fly? 375 // Does this parcel allow you to fly?
376 BOOL canFly(); 376 BOOL canFly();
377 377
378 //lgg crap
379 static BOOL getPhantom();// const { return emeraldPhantom; }
380 static void setPhantom(BOOL phantom);
381 static void togglePhantom();
382
378 // Animation functions 383 // Animation functions
379 void stopCurrentAnimations(); 384 void stopCurrentAnimations();
380 void requestStopMotion( LLMotion* motion ); 385 void requestStopMotion( LLMotion* motion );
@@ -805,6 +810,8 @@ private:
805 LLVector3d mCameraSmoothingLastPositionGlobal; 810 LLVector3d mCameraSmoothingLastPositionGlobal;
806 LLVector3d mCameraSmoothingLastPositionAgent; 811 LLVector3d mCameraSmoothingLastPositionAgent;
807 BOOL mCameraSmoothingStop; 812 BOOL mCameraSmoothingStop;
813
814 static BOOL sPhantom;
808 815
809 816
810 //Ventrella 817 //Ventrella
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 81c3f92..ab4d8a9 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -3126,7 +3126,12 @@ void LLAppViewer::idle()
3126 { 3126 {
3127 // Send avatar and camera info 3127 // Send avatar and camera info
3128 last_control_flags = gAgent.getControlFlags(); 3128 last_control_flags = gAgent.getControlFlags();
3129 send_agent_update(TRUE); 3129
3130 if(!gAgent.getPhantom())
3131 {
3132 send_agent_update(TRUE);
3133 }
3134
3130 agent_update_timer.reset(); 3135 agent_update_timer.reset();
3131 } 3136 }
3132 } 3137 }
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index eb1da05..1b1284d 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -53,6 +53,7 @@
53#include "llkeyboard.h" 53#include "llkeyboard.h"
54#include "lllineeditor.h" 54#include "lllineeditor.h"
55#include "llstatusbar.h" 55#include "llstatusbar.h"
56#include "llspinctrl.h"
56#include "lltextbox.h" 57#include "lltextbox.h"
57#include "lluiconstants.h" 58#include "lluiconstants.h"
58#include "llviewergesture.h" // for triggering gestures 59#include "llviewergesture.h" // for triggering gestures
@@ -101,6 +102,7 @@ private:
101 102
102LLChatBar::LLChatBar() 103LLChatBar::LLChatBar()
103: LLPanel(LLStringUtil::null, LLRect(), BORDER_NO), 104: LLPanel(LLStringUtil::null, LLRect(), BORDER_NO),
105 mChannelControl(FALSE),
104 mInputEditor(NULL), 106 mInputEditor(NULL),
105 mGestureLabelTimer(), 107 mGestureLabelTimer(),
106 mLastSpecialChatChannel(0), 108 mLastSpecialChatChannel(0),
@@ -154,6 +156,8 @@ BOOL LLChatBar::postBuild()
154 mInputEditor->setEnableLineHistory(TRUE); 156 mInputEditor->setEnableLineHistory(TRUE);
155 } 157 }
156 158
159 toggleChannelControl();
160
157 mIsBuilt = TRUE; 161 mIsBuilt = TRUE;
158 162
159 return TRUE; 163 return TRUE;
@@ -213,6 +217,7 @@ void LLChatBar::refresh()
213 217
214 childSetValue("History", LLFloaterChat::instanceVisible(LLSD())); 218 childSetValue("History", LLFloaterChat::instanceVisible(LLSD()));
215 219
220 childSetValue("channel_control",( 1.f * ((S32)(getChild<LLSpinCtrl>("channel_control")->get()))) );
216 childSetEnabled("Say", mInputEditor->getText().size() > 0); 221 childSetEnabled("Say", mInputEditor->getText().size() > 0);
217 childSetEnabled("Shout", mInputEditor->getText().size() > 0); 222 childSetEnabled("Shout", mInputEditor->getText().size() > 0);
218 223
@@ -373,8 +378,11 @@ LLWString LLChatBar::stripChannelNumber(const LLWString &mesg, S32* channel)
373 } 378 }
374 else 379 else
375 { 380 {
376 // This is normal chat. 381 if (!mChannelControl)
377 *channel = 0; 382 {
383 // This is normal chat.
384 *channel = 0;
385 }
378 return mesg; 386 return mesg;
379 } 387 }
380} 388}
@@ -390,7 +398,8 @@ void LLChatBar::sendChat( EChatType type )
390 // store sent line in history, duplicates will get filtered 398 // store sent line in history, duplicates will get filtered
391 if (mInputEditor) mInputEditor->updateHistory(); 399 if (mInputEditor) mInputEditor->updateHistory();
392 // Check if this is destined for another channel 400 // Check if this is destined for another channel
393 S32 channel = 0; 401 S32 channel = mChannelControl ? (S32)(getChild<LLSpinCtrl>("channel_control")->get()) : 0;
402
394 stripChannelNumber(text, &channel); 403 stripChannelNumber(text, &channel);
395 404
396 std::string utf8text = wstring_to_utf8str(text); 405 std::string utf8text = wstring_to_utf8str(text);
@@ -428,6 +437,31 @@ void LLChatBar::sendChat( EChatType type )
428 } 437 }
429} 438}
430 439
440void LLChatBar::toggleChannelControl()
441{
442 LLRect input_rect = mInputEditor->getRect();
443 S32 chan_width = getChild<LLSpinCtrl>("channel_control")->getRect().getWidth();
444 BOOL visible = gSavedSettings.getBOOL("ChatChannelSelect");
445 BOOL control = getChild<LLSpinCtrl>("channel_control")->getVisible();
446
447 if (visible && !control)
448 {
449 input_rect.setLeftTopAndSize(input_rect.mLeft+chan_width, input_rect.mTop,
450 input_rect.getWidth()-chan_width, input_rect.getHeight());
451 }
452 else if (!visible && control)
453 {
454 input_rect.setLeftTopAndSize(input_rect.mLeft-chan_width, input_rect.mTop,
455 input_rect.getWidth()+chan_width, input_rect.getHeight());
456
457 }
458 mInputEditor->setRect(input_rect);
459
460 childSetVisible("channel_control", visible);
461 childSetEnabled("channel_control", visible);
462 mChannelControl = visible;
463}
464
431 465
432//----------------------------------------------------------------------- 466//-----------------------------------------------------------------------
433// Static functions 467// Static functions
@@ -581,7 +615,8 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type,
581void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate) 615void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate)
582{ 616{
583 // Look for "/20 foo" channel chats. 617 // Look for "/20 foo" channel chats.
584 S32 channel = 0; 618 S32 channel = mChannelControl ? (S32)(getChild<LLSpinCtrl>("channel_control")->get()) : 0;
619 //S32 channel = (S32)(getChild<LLSpinCtrl>("ChatChannel")->get());
585 LLWString out_text = stripChannelNumber(wtext, &channel); 620 LLWString out_text = stripChannelNumber(wtext, &channel);
586 std::string utf8_out_text = wstring_to_utf8str(out_text); 621 std::string utf8_out_text = wstring_to_utf8str(out_text);
587 std::string utf8_text = wstring_to_utf8str(wtext); 622 std::string utf8_text = wstring_to_utf8str(wtext);
diff --git a/linden/indra/newview/llchatbar.h b/linden/indra/newview/llchatbar.h
index 72c797a..53ac233 100644
--- a/linden/indra/newview/llchatbar.h
+++ b/linden/indra/newview/llchatbar.h
@@ -93,6 +93,8 @@ public:
93 static void startChat(const char* line); 93 static void startChat(const char* line);
94 static void stopChat(); 94 static void stopChat();
95 95
96 void toggleChannelControl();
97
96protected: 98protected:
97 void sendChat(EChatType type); 99 void sendChat(EChatType type);
98 void updateChat(); 100 void updateChat();
@@ -109,6 +111,9 @@ protected:
109 LLComboBox* mGestureCombo; 111 LLComboBox* mGestureCombo;
110 112
111 LLChatBarGestureObserver* mObserver; 113 LLChatBarGestureObserver* mObserver;
114
115private:
116 BOOL mChannelControl;
112}; 117};
113 118
114extern LLChatBar *gChatBar; 119extern LLChatBar *gChatBar;
diff --git a/linden/indra/newview/llfloaterassetbrowser.cpp b/linden/indra/newview/llfloaterassetbrowser.cpp
new file mode 100644
index 0000000..615d21a
--- /dev/null
+++ b/linden/indra/newview/llfloaterassetbrowser.cpp
@@ -0,0 +1,466 @@
1/**
2 * @file llfloaterassetbrowser.cpp
3 * @brief LLFloaterAssetBrowser class implementation
4 * Phox wuz hurr
5 */
6
7#include "llviewerprecompiledheaders.h"
8#include "llfloaterassetbrowser.h"
9#include "llinventoryview.h"
10#include "llinventorymodel.h"
11#include "llviewerimagelist.h"
12#include "llbutton.h"
13#include "lltextbox.h"
14#include "llpreview.h"
15#include "llinventorybridge.h"
16#include "llagent.h"
17#include "lltooldraganddrop.h"
18#include "llfocusmgr.h"
19#include "llview.h"
20
21// Externs
22extern LLInventoryModel gInventory;
23
24// Statics
25LLFloaterAssetBrowser* LLFloaterAssetBrowser::sInstance = NULL;
26
27LLFloaterAssetBrowser::LLFloaterAssetBrowser()
28: LLFloater("floater_asset_browser")
29{
30 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_asset_browser.xml");
31
32 mInventoryPanel = getChild<LLInventoryPanel>("inventory panel");
33
34 //Open all folders and close them in order to make item list up-to-date
35 //if(gInventory.getItemCount()==0)
36 mInventoryPanel->openAllFolders();
37
38 //gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE));
39
40
41 childSetAction("button next", onClickNext, this);
42 childSetAction("button previous", onClickPrevious, this);
43 childSetAction("button refresh", onClickRefresh, this);
44
45 initialize();
46 createThumbnails();
47 mInventoryPanel->closeAllFolders();
48}
49
50// static
51void LLFloaterAssetBrowser::show(void*)
52{
53 if (!sInstance)
54 sInstance = new LLFloaterAssetBrowser();
55
56 sInstance->open();
57}
58
59// virtual
60LLFloaterAssetBrowser::~LLFloaterAssetBrowser()
61{
62 clearAssetInfoTexts();
63 mTextureAssets.clear();
64 mMaxIndex = 0;
65 mFirstIndex = 0;
66 mMouseOverIndex = 0;
67 mMouseOverUUID = LLUUID::null;
68 mMouseOverAssetUUID = LLUUID::null;
69 mFloaterTitle = "";
70 clearNoAssetsText();
71 sInstance=NULL;
72}
73
74void LLFloaterAssetBrowser::initialize()
75{
76 mMaxIndex = ITEMS_PER_PAGE;
77 mFirstIndex = 0;
78 mAssetInfoLabelList.clear();
79 mAssetInfoIndex = 0;
80 mFloaterHeight = getRect().getHeight();
81 mFloaterWidth = getRect().getWidth();
82 mMouseOverIndex = 0;
83 mMouseOverUUID = LLUUID::null;
84 mMouseOverAssetUUID = LLUUID::null;
85 mFloaterTitle = "";
86
87 S32 image_top = getRect().getHeight();
88 S32 image_bottom = BTN_HEIGHT_SMALL;
89 S32 image_middle = (image_top + image_bottom) / 2;
90 S32 line_height = llround(LLFontGL::sSansSerifSmall->getLineHeight());
91
92 mNoAssetsLabel = new LLTextBox("mNoAssetsLabel.",
93 LLRect(getRect().getWidth()/2,
94 image_middle + line_height / 2,
95 getRect().getWidth(),
96 image_middle - line_height / 2 ),
97 "No assets found.",
98 LLFontGL::sSansSerifSmall );
99 mNoAssetsLabel->setFollowsAll();
100 addChild(mNoAssetsLabel);
101 mNoAssetsLabel->setVisible(FALSE);
102}
103
104void LLFloaterAssetBrowser::createThumbnails()
105{
106 LLViewerInventoryCategory::cat_array_t cats;
107 LLViewerInventoryItem::item_array_t items;
108 LLIsType isType(LLAssetType::AT_TEXTURE);
109
110 gInventory.collectDescendentsIf(LLUUID::null,
111 cats,
112 items,
113 LLInventoryModel::INCLUDE_TRASH,
114 isType);
115
116 //Get UUID, asset UUID and name
117 for(S32 i = 0; i < items.count(); i++)
118 {
119 LLInventoryItem* itemp = items[i];
120 LLAssetSelection temp;
121 temp.mAssetUUID = itemp->getAssetUUID();
122 temp.mUUID = itemp->getUUID();
123 temp.mName = itemp->getName();
124 temp.mTexturep = NULL;
125 temp.mAssetRect = LLRect::null;
126 mTextureAssets.push_back(temp);
127 }
128
129 //Get Texturep
130 for(S32 i = 0; i < items.count(); i++)
131 {
132 mTextureAssets[i].mTexturep = gImageList.getImage(mTextureAssets[i].mAssetUUID, MIPMAP_YES, IMMEDIATE_NO);
133 mTextureAssets[i].mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW);
134 //mTextureAssets[i].mTexturep->processTextureStats();
135 }
136
137 //Generate the asset info text
138 /*for(S32 i = 0; i < items.count(); i++)
139 {
140 LLString asset_info;
141 LLString dimensions;
142
143 asset_info.append(mTextureAssets[i].mName);
144
145 //if(mTextureAssets[i].mTexturep->mFullWidth == 0
146 //|| mTextureAssets[i].mTexturep->mFullHeight == 0)
147
148 dimensions = llformat("\n%d x %d",
149 mTextureAssets[i].mTexturep->mFullWidth,
150 mTextureAssets[i].mTexturep->mFullHeight);
151 asset_info.append(dimensions);
152
153 mTextureAssets[i].mAssetInfo = asset_info;
154 }*/
155
156 mFloaterTitle = llformat("Asset Browser (%d assets fetched)", mTextureAssets.size());
157 setTitle(mFloaterTitle);
158}
159
160// virtual
161BOOL LLFloaterAssetBrowser::handleHover(S32 x, S32 y, MASK mask)
162{
163 if(mTextureAssets.size() > 0)
164 {
165 for(U32 i = mFirstIndex; i < mMaxIndex; i++)
166 {
167 if(i < mTextureAssets.size())
168 {
169 if(mTextureAssets[i].mAssetRect.pointInRect(x,y))
170 {
171 mMouseOverUUID = mTextureAssets[i].mUUID;
172 mMouseOverIndex = i;
173
174 if(hasMouseCapture())
175 {
176 S32 screen_x;
177 S32 screen_y;
178 LLUUID mObjectUUID= LLUUID::null;
179 const LLViewerInventoryItem *item = gInventory.getItem(mMouseOverUUID);
180
181 localPointToScreen(x, y, &screen_x, &screen_y );
182
183 if(item && item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID())
184 && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y))
185 {
186 EDragAndDropType type;
187 type = LLAssetType::lookupDragAndDropType(item->getType());
188 LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY;
189
190 if(!mObjectUUID.isNull())
191 {
192 src = LLToolDragAndDrop::SOURCE_WORLD;
193 }
194 else if(item->getPermissions().getOwner() == gAgent.getID())
195 {
196 src = LLToolDragAndDrop::SOURCE_AGENT;
197 }
198 LLToolDragAndDrop::getInstance()->beginDrag(type,
199 item->getUUID(),
200 src,
201 mObjectUUID);
202 return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask);
203 }
204 return TRUE;
205 }
206 return LLFloater::handleHover(x, y, mask);
207 }
208 }
209 }
210 return LLFloater::handleHover(x, y, mask);
211 }
212 else
213 {
214 mMouseOverUUID = LLUUID::null;
215 return LLFloater::handleHover(x, y, mask);
216 }
217}
218
219// virtual
220BOOL LLFloaterAssetBrowser::handleMouseDown(S32 x, S32 y, MASK mask)
221{
222 if(mTextureAssets.size() > 0)
223 {
224 if(mTextureAssets[mMouseOverIndex].mAssetRect.pointInRect(x,y))
225 {
226 if(mMouseOverUUID.notNull())
227 {
228 gFocusMgr.setMouseCapture(this);
229 S32 screen_x;
230 S32 screen_y;
231 localPointToScreen(x, y, &screen_x, &screen_y);
232 LLToolDragAndDrop::getInstance()->setDragStart(screen_x, screen_y);
233 return TRUE;
234 }
235 }
236 }
237 return LLFloater::handleMouseDown(x, y, mask);
238}
239
240// virtual
241BOOL LLFloaterAssetBrowser::handleMouseUp(S32 x, S32 y, MASK mask)
242{
243 if(hasMouseCapture())
244 {
245 gFocusMgr.setMouseCapture(NULL);
246 return TRUE;
247 }
248 return LLFloater::handleMouseUp(x, y, mask);
249}
250
251// virtual
252BOOL LLFloaterAssetBrowser::handleDoubleClick(S32 x, S32 y, MASK mask)
253{
254 if(mTextureAssets.size() > 0)
255 {
256 if(mTextureAssets[mMouseOverIndex].mAssetRect.pointInRect(x,y))
257 {
258 if(mMouseOverUUID.notNull())
259 {
260 open_texture(mMouseOverUUID, mTextureAssets[mMouseOverIndex].mName, FALSE);
261 return TRUE;
262 }
263 }
264 }
265 return LLFloater::handleDoubleClick(x, y, mask);
266}
267
268// virtual
269void LLFloaterAssetBrowser::draw()
270{
271 LLFloater::draw();
272
273 if(mTextureAssets.size() > 0)
274 {
275 S32 hor_pos = 0;
276 S32 ver_pos = 0;
277 U32 items_per_row = 0;
278 S32 height = getRect().getHeight()/8;
279 S32 width = height;
280
281 for(U32 i = mFirstIndex; i < mMaxIndex; i++)
282 {
283 if(i < mTextureAssets.size())
284 {
285 mTexturep = NULL;
286 mImageAssetID = mTextureAssets[i].mAssetUUID;
287
288 if(mImageAssetID.notNull())
289 {
290 mTexturep = gImageList.getImage(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
291 //mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW);
292 mTexturep->processTextureStats();
293 mTextureAssets[i].mWidth = mTexturep->mFullWidth;
294 mTextureAssets[i].mHeight = mTexturep->mFullHeight;
295 }
296
297 if(isMinimized())
298 {
299 return;
300 }
301
302 //Border
303 LLRect border;
304 border.mLeft = START_POS + ver_pos;
305 border.mTop = getRect().getHeight() - LLFLOATER_HEADER_SIZE - BORDER_PAD - hor_pos;
306 border.mRight = border.mLeft + width;
307 border.mBottom = border.mTop - height;
308
309 //Save the rect for each thumbnail
310 mTextureAssets[i].mAssetRect = border;
311
312 //Asset info rect
313 LLRect info_rect;
314 info_rect.mLeft = border.mLeft;
315 info_rect.mTop = border.mBottom - 3;
316 info_rect.mRight = border.mLeft + 130;
317 info_rect.mBottom = border.mBottom - 2*llround(LLFontGL::sSansSerifSmall->getLineHeight());
318
319 gl_rect_2d(border, LLColor4::black, FALSE);
320
321 // Interior
322 LLRect interior = border;
323 interior.stretch(1);
324
325 //Draw the image
326 if(mTexturep)
327 {
328 if(mTexturep->getComponents() == 4)
329 {
330 gl_rect_2d_checkerboard(interior);
331 }
332
333 gl_draw_scaled_image(interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);
334 // Pump the priority
335 mTexturep->addTextureStats((F32)(interior.getWidth() * interior.getHeight()));
336
337 //Generate the asset info text
338 std::string asset_info;
339 asset_info.append(mTextureAssets[i].mName);
340 std::string dimensions = llformat("\n%d x %d",
341 mTexturep->mFullWidth /*mTextureAssets[i].mWidth*/,
342 mTexturep->mFullHeight /* mTextureAssets[i].mHeight*/);
343 asset_info.append(dimensions);
344
345 // Draw material info below the asset
346 // LLTextBox object has to be drawn only once, not non-stop like image
347 if(mAssetInfoIndex < ITEMS_PER_PAGE &&
348 mAssetInfoIndex < mTextureAssets.size() - mFirstIndex)
349 {
350 mAssetInfoLabel = new LLTextBox("Asset Info"/*mTextureAssets[i].mAssetInfo*/,
351 info_rect,
352 asset_info,
353 LLFontGL::sSansSerifSmall);
354 mAssetInfoLabel->setFollowsAll();
355 mAssetInfoLabelList.push_back(mAssetInfoLabel);
356 addChild(mAssetInfoLabelList[mAssetInfoIndex]);
357 mAssetInfoLabelList[mAssetInfoIndex]->setVisible(TRUE);
358 mAssetInfoIndex++;
359 }
360
361 }
362 else
363 {
364 // Draw X
365 gl_rect_2d(interior, LLColor4::grey, TRUE);
366 gl_draw_x(interior, LLColor4::black);
367 }
368 //Move to the right
369 ver_pos += getRect().getWidth()/6;
370 items_per_row++;
371
372 //Change the row
373 if(items_per_row % 4 == 0)
374 {
375 ver_pos = 0;
376 hor_pos += getRect().getHeight()/4;
377 }
378 }
379 }//for
380
381 //If the size of the floater has changed, clear the asset info texts
382 //in order to draw them again into the new position
383 if(getRect().getWidth() != mFloaterWidth || getRect().getHeight() != mFloaterHeight)
384 {
385 clearAssetInfoTexts();
386 //Save the size of the current floater
387 mFloaterWidth = getRect().getWidth();
388 mFloaterHeight = getRect().getHeight();
389 }
390 if(mMaxIndex >= mTextureAssets.size())
391 {
392 childDisable("button next");
393 childEnable("button previous");
394 }
395 else if(mFirstIndex <= 0)
396 {
397 childEnable("button next");
398 childDisable("button previous");
399 }
400 else
401 {
402 childEnable("button next");
403 childEnable("button previous");
404 }
405 }
406 else
407 {
408 //No assets found
409 mNoAssetsLabel->setVisible(TRUE);
410 childDisable("button next");
411 childDisable("button previous");
412 }
413}
414
415void LLFloaterAssetBrowser::clearAssetInfoTexts()
416{
417 for(U32 i = 0; i < mAssetInfoLabelList.size(); i++)
418 {
419 delete mAssetInfoLabelList[i];
420 mAssetInfoLabelList[i] = NULL;
421 }
422 mAssetInfoLabelList.clear();
423 mAssetInfoIndex = 0;
424}
425
426void LLFloaterAssetBrowser::clearNoAssetsText()
427{
428 if(mTextureAssets.size() > 0)
429 {
430 delete mNoAssetsLabel;
431 mNoAssetsLabel = NULL;
432 }
433}
434
435// static
436void LLFloaterAssetBrowser::onClickNext(void *userdata)
437{
438 LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata;
439 self->mFirstIndex = self->mMaxIndex;
440 self->mMaxIndex = self->mFirstIndex + ITEMS_PER_PAGE;
441 self->clearAssetInfoTexts();
442}
443
444// static
445void LLFloaterAssetBrowser::onClickPrevious(void *userdata)
446{
447 LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata;
448 self->mFirstIndex = self->mMaxIndex - (2 * ITEMS_PER_PAGE);
449 self->mMaxIndex = self->mMaxIndex - ITEMS_PER_PAGE;
450 self->clearAssetInfoTexts();
451}
452
453// static
454void LLFloaterAssetBrowser::onClickRefresh(void *userdata)
455{
456 LLFloaterAssetBrowser* self = (LLFloaterAssetBrowser*)userdata;
457 for(U32 i = 0; i < self->mTextureAssets.size(); i++)
458 {
459 self->mTextureAssets[i].mTexturep = NULL;
460 }
461
462 self->mTextureAssets.clear();
463 self->createThumbnails();
464 self->clearNoAssetsText();
465 self->clearAssetInfoTexts();
466}
diff --git a/linden/indra/newview/llfloaterassetbrowser.h b/linden/indra/newview/llfloaterassetbrowser.h
new file mode 100644
index 0000000..76eb3ba
--- /dev/null
+++ b/linden/indra/newview/llfloaterassetbrowser.h
@@ -0,0 +1,84 @@
1/**
2 * @file llfloaterassetbrowser.h
3 * @brief LLFloaterAssetBrowser class implementation
4 * Phox wuz hurr
5 */
6
7#ifndef LL_LLFLOATERASSETBROWSERVIEW_H
8#define LL_LLFLOATERASSETBROWSERVIEW_H
9
10#include "llfloater.h"
11#include "llinventorymodel.h"
12#include "llview.h"
13#include "llviewerimage.h"
14
15class LLInventoryPanel;
16
17struct LLAssetSelection
18{
19 LLUUID mUUID;
20 LLUUID mAssetUUID;
21 std::string mName;
22 std::string mAssetInfo;
23 S32 mWidth;
24 S32 mHeight;
25 LLTextBox* mAssetInfoTextBox;
26 LLPointer<LLViewerImage> mTexturep;
27 LLRect mAssetRect;
28};
29
30class LLFloaterAssetBrowser : public LLFloater
31{
32public:
33 LLFloaterAssetBrowser();
34
35 virtual ~LLFloaterAssetBrowser();
36
37 static void show(void*);
38
39 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
40 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
41 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
42 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
43 virtual void draw();
44
45 static LLFloaterAssetBrowser* getInstance(){ return sInstance; }
46
47private:
48 void initialize();
49 void createThumbnails();
50 void clearAssetInfoTexts();
51 void clearNoAssetsText();
52
53 static void onClickNext(void *userdata);
54 static void onClickPrevious(void *userdata);
55 static void onClickRefresh(void *userdata);
56
57 static LLFloaterAssetBrowser* sInstance;
58
59protected:
60 LLInventoryPanel* mInventoryPanel;
61 LLUUID mImageAssetID;
62 LLUUID mMouseOverUUID;
63 LLUUID mMouseOverAssetUUID;
64 LLPointer<LLViewerImage> mTexturep;
65 std::vector<LLAssetSelection> mTextureAssets;
66 std::vector<LLTextBox*> mAssetInfoLabelList;
67 U32 mLastIndex;
68 U32 mMaxIndex;
69 U32 mFirstIndex;
70 U32 mAssetInfoIndex;
71 S32 mFloaterHeight;
72 S32 mFloaterWidth;
73 S32 mMouseOverIndex;
74 LLTextBox* mNoAssetsLabel;
75 LLTextBox* mAssetInfoLabel;
76 std::string mFloaterTitle;
77};
78
79static const S32 HPAD = 4;
80static const S32 BORDER_PAD = HPAD;
81static const U32 ITEMS_PER_PAGE = 16;
82static const S32 START_POS = 250;
83
84#endif
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 4cc721e..68aaceb 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -56,10 +56,11 @@
56#include "llfloaterchatterbox.h" 56#include "llfloaterchatterbox.h"
57#include "llfloatermute.h" 57#include "llfloatermute.h"
58#include "llkeyboard.h" 58#include "llkeyboard.h"
59//#include "lllineeditor.h" 59#include "lllineeditor.h"
60#include "llmutelist.h" 60#include "llmutelist.h"
61//#include "llresizehandle.h" 61//#include "llresizehandle.h"
62#include "llchatbar.h" 62#include "llchatbar.h"
63#include "llspinctrl.h"
63#include "llstatusbar.h" 64#include "llstatusbar.h"
64#include "llviewertexteditor.h" 65#include "llviewertexteditor.h"
65#include "llviewergesture.h" // for triggering gestures 66#include "llviewergesture.h" // for triggering gestures
@@ -227,6 +228,34 @@ void log_chat_text(const LLChat& chat)
227 228
228 LLLogChat::saveHistory(std::string("chat"),histstr); 229 LLLogChat::saveHistory(std::string("chat"),histstr);
229} 230}
231
232// static
233void LLFloaterChat::toggleHistoryChannelControl()
234{
235 LLFloaterChat* chat_floater = LLFloaterChat::getInstance(LLSD());
236 BOOL visible = gSavedSettings.getBOOL("ChatChannelSelect");
237 BOOL control = chat_floater->getChild<LLSpinCtrl>("channel_control")->getVisible();
238
239 LLLineEditor* input = chat_floater->getChild<LLLineEditor>("Chat Editor");
240 LLRect input_rect = input->getRect();
241 S32 chan_width = chat_floater->getChild<LLSpinCtrl>("channel_control")->getRect().getWidth();
242
243 if (visible && !control)
244 {
245 input_rect.setLeftTopAndSize(input_rect.mLeft+chan_width+4, input_rect.mTop,
246 input_rect.getWidth()-chan_width, input_rect.getHeight());
247 }
248 else if (!visible && control)
249 {
250 input_rect.setLeftTopAndSize(input_rect.mLeft-chan_width-4, input_rect.mTop,
251 input_rect.getWidth()+chan_width, input_rect.getHeight());
252 }
253 input->setRect(input_rect);
254
255 chat_floater->childSetVisible("channel_control", visible);
256 chat_floater->childSetEnabled("channel_control", visible);
257}
258
230// static 259// static
231void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file) 260void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
232{ 261{
diff --git a/linden/indra/newview/llfloaterchat.h b/linden/indra/newview/llfloaterchat.h
index 923fd9a..203a158 100644
--- a/linden/indra/newview/llfloaterchat.h
+++ b/linden/indra/newview/llfloaterchat.h
@@ -82,6 +82,8 @@ public:
82 static void* createSpeakersPanel(void* data); 82 static void* createSpeakersPanel(void* data);
83 static void* createChatPanel(void* data); 83 static void* createChatPanel(void* data);
84 84
85 static void toggleHistoryChannelControl();
86
85 // visibility policy for LLUISingleton 87 // visibility policy for LLUISingleton
86 static bool visible(LLFloater* instance, const LLSD& key); 88 static bool visible(LLFloater* instance, const LLSD& key);
87 static void show(LLFloater* instance, const LLSD& key); 89 static void show(LLFloater* instance, const LLSD& key);
diff --git a/linden/indra/newview/llfloatertelehub.cpp b/linden/indra/newview/llfloatertelehub.cpp
index 943bc36..062306b 100644
--- a/linden/indra/newview/llfloatertelehub.cpp
+++ b/linden/indra/newview/llfloatertelehub.cpp
@@ -68,7 +68,6 @@ void LLFloaterTelehub::show()
68 // Find tools floater, glue to bottom 68 // Find tools floater, glue to bottom
69 if (gFloaterTools) 69 if (gFloaterTools)
70 { 70 {
71 gFloaterTools->showMore(FALSE);
72 LLRect tools_rect = gFloaterTools->getRect(); 71 LLRect tools_rect = gFloaterTools->getRect();
73 S32 our_width = sInstance->getRect().getWidth(); 72 S32 our_width = sInstance->getRect().getWidth();
74 S32 our_height = sInstance->getRect().getHeight(); 73 S32 our_height = sInstance->getRect().getHeight();
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index 84a1edc..b63138f 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -54,6 +54,7 @@
54#include "llpanelobject.h" 54#include "llpanelobject.h"
55#include "llpanelvolume.h" 55#include "llpanelvolume.h"
56#include "llpanelpermissions.h" 56#include "llpanelpermissions.h"
57#include "llresmgr.h"
57#include "llselectmgr.h" 58#include "llselectmgr.h"
58#include "llslider.h" 59#include "llslider.h"
59#include "llstatusbar.h" 60#include "llstatusbar.h"
@@ -321,7 +322,7 @@ BOOL LLFloaterTools::postBuild()
321 322
322 mSliderDozerSize = getChild<LLSlider>("slider brush size"); 323 mSliderDozerSize = getChild<LLSlider>("slider brush size");
323 childSetCommitCallback("slider brush size", commit_slider_dozer_size, (void*)0); 324 childSetCommitCallback("slider brush size", commit_slider_dozer_size, (void*)0);
324 childSetValue( "slider brush size", gSavedSettings.getS32("LandBrushSize")); 325 childSetValue( "slider brush size", gSavedSettings.getF32("LandBrushSize"));
325 326
326 327
327 mSliderDozerForce = getChild<LLSlider>("slider force"); 328 mSliderDozerForce = getChild<LLSlider>("slider force");
@@ -329,14 +330,10 @@ BOOL LLFloaterTools::postBuild()
329 // the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here 330 // the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here
330 childSetValue( "slider force", log10(gSavedSettings.getF32("LandBrushForce"))); 331 childSetValue( "slider force", log10(gSavedSettings.getF32("LandBrushForce")));
331 332
332 childSetAction("button more", click_show_more, this);
333 childSetAction("button less", click_show_more, this);
334 mTab = getChild<LLTabContainer>("Object Info Tabs"); 333 mTab = getChild<LLTabContainer>("Object Info Tabs");
335 if(mTab) 334 if(mTab)
336 { 335 {
337 mTab->setVisible( gSavedSettings.getBOOL("ToolboxShowMore") );
338 mTab->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); 336 mTab->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
339 mTab->setVisible( gSavedSettings.getBOOL("ToolboxShowMore") );
340 mTab->setBorderVisible(FALSE); 337 mTab->setBorderVisible(FALSE);
341 mTab->selectFirstTab(); 338 mTab->selectFirstTab();
342 } 339 }
@@ -436,19 +433,6 @@ LLFloaterTools::LLFloaterTools()
436 factory_map["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo 433 factory_map["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo
437 434
438 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",&factory_map,FALSE); 435 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",&factory_map,FALSE);
439
440 mLargeHeight = getRect().getHeight();
441 mSmallHeight = mLargeHeight;
442 if (mTab) mSmallHeight -= mTab->getRect().getHeight();
443
444 // force a toggle initially. seems to be needed to correctly initialize
445 // both "more" and "less" cases. it also seems to be important to begin
446 // with the user's preference first so that it's initial position will
447 // be correct (SL-51192) -MG
448 BOOL show_more = gSavedSettings.getBOOL("ToolboxShowMore"); // get user's preference
449 gSavedSettings.setBOOL("ToolboxShowMore", show_more); // sets up forced toggle below
450 showMore( !show_more ); // does the toggle
451 showMore( show_more ); // reset the real user's preference
452} 436}
453 437
454LLFloaterTools::~LLFloaterTools() 438LLFloaterTools::~LLFloaterTools()
@@ -492,6 +476,16 @@ void LLFloaterTools::refresh()
492 mTab->enableTabButton(idx_face, all_volume); 476 mTab->enableTabButton(idx_face, all_volume);
493 mTab->enableTabButton(idx_contents, all_volume); 477 mTab->enableTabButton(idx_contents, all_volume);
494 478
479 // Refresh object and prim count labels
480 LLLocale locale(LLLocale::USER_LOCALE);
481 std::string obj_count_string;
482 LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
483 childSetTextArg("obj_count", "[COUNT]", obj_count_string);
484 std::string prim_count_string;
485 LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
486 childSetTextArg("prim_count", "[COUNT]", prim_count_string);
487
488 // Refresh child tabs
495 mPanelPermissions->refresh(); 489 mPanelPermissions->refresh();
496 mPanelObject->refresh(); 490 mPanelObject->refresh();
497 mPanelVolume->refresh(); 491 mPanelVolume->refresh();
@@ -799,8 +793,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
799 if (mSliderDozerSize) 793 if (mSliderDozerSize)
800 { 794 {
801 mSliderDozerSize ->setVisible( land_visible ); 795 mSliderDozerSize ->setVisible( land_visible );
802 childSetVisible("Brush:", land_visible); 796 childSetVisible("Bulldozer:", land_visible);
803 childSetVisible("Brush Size:", land_visible); 797 childSetVisible("Dozer Size:", land_visible);
804 } 798 }
805 if (mCheckShowOwners) 799 if (mCheckShowOwners)
806 { 800 {
@@ -812,13 +806,10 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
812 childSetVisible("Strength:", land_visible); 806 childSetVisible("Strength:", land_visible);
813 } 807 }
814 808
815 // 809 childSetVisible("obj_count", !land_visible);
816 // More panel visibility 810 childSetVisible("prim_count", !land_visible);
817 // 811 mTab->setVisible(!land_visible);
818 BOOL show_more = gSavedSettings.getBOOL("ToolboxShowMore"); 812 mPanelLandInfo->setVisible(land_visible);
819
820 mTab->setVisible(show_more && tool != LLToolBrushLand::getInstance() && tool != LLToolSelectLand::getInstance());
821 mPanelLandInfo->setVisible(show_more && (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance()));
822} 813}
823 814
824 815
@@ -873,46 +864,12 @@ void LLFloaterTools::onClose(bool app_quitting)
873 // gMenuBarView->arrange(); 864 // gMenuBarView->arrange();
874} 865}
875 866
876void LLFloaterTools::showMore(BOOL show_more)
877{
878 BOOL showing_more = gSavedSettings.getBOOL("ToolboxShowMore");
879 if (show_more == showing_more)
880 {
881 return;
882 }
883
884 gSavedSettings.setBOOL("ToolboxShowMore", show_more);
885
886 // Visibility updated next frame - JC
887 // mTab->setVisible(show_more);
888
889 if (show_more)
890 {
891 reshape( getRect().getWidth(), mLargeHeight, TRUE);
892 translate( 0, mSmallHeight - mLargeHeight );
893 }
894 else
895 {
896 reshape( getRect().getWidth(), mSmallHeight, TRUE);
897 translate( 0, mLargeHeight - mSmallHeight );
898 }
899 childSetVisible("button less", show_more);
900 childSetVisible("button more", !show_more);
901}
902
903void LLFloaterTools::showPanel(EInfoPanel panel) 867void LLFloaterTools::showPanel(EInfoPanel panel)
904{ 868{
905 llassert(panel >= 0 && panel < PANEL_COUNT); 869 llassert(panel >= 0 && panel < PANEL_COUNT);
906 mTab->selectTabByName(PANEL_NAMES[panel]); 870 mTab->selectTabByName(PANEL_NAMES[panel]);
907} 871}
908 872
909void click_show_more(void *userdata)
910{
911 LLFloaterTools *f = (LLFloaterTools *)userdata;
912 BOOL show_more = !gSavedSettings.getBOOL("ToolboxShowMore");
913 f->showMore( show_more );
914}
915
916void click_popup_info(void*) 873void click_popup_info(void*)
917{ 874{
918// gBuildView->setPropertiesPanelOpen(TRUE); 875// gBuildView->setPropertiesPanelOpen(TRUE);
@@ -997,8 +954,8 @@ void click_popup_dozer_mode(LLUICtrl *, void *user)
997 954
998void commit_slider_dozer_size(LLUICtrl *ctrl, void*) 955void commit_slider_dozer_size(LLUICtrl *ctrl, void*)
999{ 956{
1000 S32 size = (S32)ctrl->getValue().asInteger(); 957 F32 size = (F32)ctrl->getValue().asReal();
1001 gSavedSettings.setS32("LandBrushSize", size); 958 gSavedSettings.setF32("LandBrushSize", size);
1002} 959}
1003 960
1004void commit_slider_dozer_force(LLUICtrl *ctrl, void*) 961void commit_slider_dozer_force(LLUICtrl *ctrl, void*)
@@ -1086,15 +1043,15 @@ void LLFloaterTools::onFocusReceived()
1086 1043
1087void LLFloaterTools::updateTreeGrassCombo(bool visible) 1044void LLFloaterTools::updateTreeGrassCombo(bool visible)
1088{ 1045{
1046 LLTextBox* tree_grass_label = getChild<LLTextBox>("tree_grass_label");
1089 if (visible) 1047 if (visible)
1090 { 1048 {
1091 LLPCode pcode = LLToolPlacer::getObjectType(); 1049 LLPCode pcode = LLToolPlacer::getObjectType();
1092 std::map<std::string, S32>::iterator it, end; 1050 std::map<std::string, S32>::iterator it, end;
1093 std::string selected; 1051 std::string selected;
1094 LLTextBox* tree_grass_label = getChild<LLTextBox>("tree_grass_label");
1095 if (pcode == LLToolPlacerPanel::sTree) 1052 if (pcode == LLToolPlacerPanel::sTree)
1096 { 1053 {
1097 tree_grass_label->setVisible(true); 1054 tree_grass_label->setVisible(visible);
1098 LLButton* button = getChild<LLButton>("ToolTree"); 1055 LLButton* button = getChild<LLButton>("ToolTree");
1099 tree_grass_label->setText(button->getToolTip()); 1056 tree_grass_label->setText(button->getToolTip());
1100 1057
@@ -1104,7 +1061,7 @@ void LLFloaterTools::updateTreeGrassCombo(bool visible)
1104 } 1061 }
1105 else if (pcode == LLToolPlacerPanel::sGrass) 1062 else if (pcode == LLToolPlacerPanel::sGrass)
1106 { 1063 {
1107 tree_grass_label->setVisible(true); 1064 tree_grass_label->setVisible(visible);
1108 LLButton* button = getChild<LLButton>("ToolGrass"); 1065 LLButton* button = getChild<LLButton>("ToolGrass");
1109 tree_grass_label->setText(button->getToolTip()); 1066 tree_grass_label->setText(button->getToolTip());
1110 1067
@@ -1140,6 +1097,7 @@ void LLFloaterTools::updateTreeGrassCombo(bool visible)
1140 } 1097 }
1141 1098
1142 mComboTreesGrass->setVisible(visible); 1099 mComboTreesGrass->setVisible(visible);
1100 tree_grass_label->setVisible(visible);
1143} 1101}
1144 1102
1145// static 1103// static
diff --git a/linden/indra/newview/llfloatertools.h b/linden/indra/newview/llfloatertools.h
index 8f88977..1b13b9f 100644
--- a/linden/indra/newview/llfloatertools.h
+++ b/linden/indra/newview/llfloatertools.h
@@ -95,14 +95,12 @@ public:
95 /*virtual*/ void draw(); 95 /*virtual*/ void draw();
96 96
97 void dirty(); 97 void dirty();
98 void showMore(BOOL show_more);
99 void showPanel(EInfoPanel panel); 98 void showPanel(EInfoPanel panel);
100 99
101 void setStatusText(const std::string& text); 100 void setStatusText(const std::string& text);
102 virtual void onFocusReceived(); 101 virtual void onFocusReceived();
103 static void setEditTool(void* data); 102 static void setEditTool(void* data);
104 void saveLastTool(); 103 void saveLastTool();
105
106private: 104private:
107 static void setObjectType( void* data ); 105 static void setObjectType( void* data );
108 106
@@ -198,8 +196,6 @@ public:
198 196
199private: 197private:
200 BOOL mDirty; 198 BOOL mDirty;
201 S32 mSmallHeight;
202 S32 mLargeHeight;
203 199
204 std::map<std::string, std::string> mStatusText; 200 std::map<std::string, std::string> mStatusText;
205 201
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index 66c6cdd..24bbab6 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -84,6 +84,7 @@ BOOL LLPanelPermissions::postBuild()
84 84
85 85
86 this->childSetAction("button owner profile",LLPanelPermissions::onClickOwner,this); 86 this->childSetAction("button owner profile",LLPanelPermissions::onClickOwner,this);
87 this->childSetAction("button last owner profile",LLPanelPermissions::onClickLastOwner,this);
87 this->childSetAction("button creator profile",LLPanelPermissions::onClickCreator,this); 88 this->childSetAction("button creator profile",LLPanelPermissions::onClickCreator,this);
88 89
89 this->childSetAction("button set group",LLPanelPermissions::onClickGroup,this); 90 this->childSetAction("button set group",LLPanelPermissions::onClickGroup,this);
@@ -177,6 +178,11 @@ void LLPanelPermissions::refresh()
177 childSetEnabled("Owner Name",false); 178 childSetEnabled("Owner Name",false);
178 childSetEnabled("button owner profile",false); 179 childSetEnabled("button owner profile",false);
179 180
181 childSetEnabled("Last Owner:",false);
182 childSetText("Last Owner Name",LLStringUtil::null);
183 childSetEnabled("Last Owner Name",false);
184 childSetEnabled("button last owner profile",false);
185
180 childSetEnabled("Group:",false); 186 childSetEnabled("Group:",false);
181 childSetText("Group Name",LLStringUtil::null); 187 childSetText("Group Name",LLStringUtil::null);
182 childSetEnabled("Group Name",false); 188 childSetEnabled("Group Name",false);
@@ -190,9 +196,6 @@ void LLPanelPermissions::refresh()
190 childSetEnabled("Description:",false); 196 childSetEnabled("Description:",false);
191 childSetText("Object Description",LLStringUtil::null); 197 childSetText("Object Description",LLStringUtil::null);
192 childSetEnabled("Object Description",false); 198 childSetEnabled("Object Description",false);
193
194 childSetText("prim info",LLStringUtil::null);
195 childSetEnabled("prim info",false);
196 199
197 childSetEnabled("Permissions:",false); 200 childSetEnabled("Permissions:",false);
198 201
@@ -299,6 +302,8 @@ void LLPanelPermissions::refresh()
299 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); 302 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
300 303
301// llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl; 304// llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl;
305 std::string last_owner_name;
306 LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name);
302 307
303 if (mOwnerID.isNull()) 308 if (mOwnerID.isNull())
304 { 309 {
@@ -309,8 +314,8 @@ void LLPanelPermissions::refresh()
309 else 314 else
310 { 315 {
311 // Display last owner if public 316 // Display last owner if public
312 std::string last_owner_name; 317 //std::string last_owner_name;
313 LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); 318 //LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name);
314 319
315 // It should never happen that the last owner is null and the owner 320 // It should never happen that the last owner is null and the owner
316 // is null, but it seems to be a bug in the simulator right now. JC 321 // is null, but it seems to be a bug in the simulator right now. JC
@@ -343,6 +348,19 @@ void LLPanelPermissions::refresh()
343 fRlvEnableOwner && owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned())); 348 fRlvEnableOwner && owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned()));
344// [/RLVa:KB] 349// [/RLVa:KB]
345 350
351 if (owner_name != last_owner_name)
352 {
353 childSetText("Last Owner Name", last_owner_name);
354 childSetEnabled("Last Owner Name", TRUE);
355 childSetEnabled("button last owner profile", TRUE);
356 }
357 else
358 {
359 childSetText("Last Owner Name", LLStringUtil::null);
360 childSetEnabled("Last Owner Name", FALSE);
361 childSetEnabled("button last owner profile", FALSE);
362 }
363
346 // update group text field 364 // update group text field
347 childSetEnabled("Group:",true); 365 childSetEnabled("Group:",true);
348 childSetText("Group Name",LLStringUtil::null); 366 childSetText("Group Name",LLStringUtil::null);
@@ -405,33 +423,6 @@ void LLPanelPermissions::refresh()
405 childSetEnabled("Object Description",false); 423 childSetEnabled("Object Description",false);
406 } 424 }
407 425
408
409 // Pre-compute object info string
410 S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
411 S32 obj_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
412
413 std::string object_info_string;
414 if (1 == obj_count)
415 {
416 object_info_string.assign("1 Object, ");
417 }
418 else
419 {
420 object_info_string = llformat( "%d Objects, ", obj_count);
421 }
422 if (1 == prim_count)
423 {
424 object_info_string.append("1 Primitive");
425 }
426 else
427 {
428 std::string buffer;
429 buffer = llformat( "%d Primitives", prim_count);
430 object_info_string.append(buffer);
431 }
432 childSetText("prim info",object_info_string);
433 childSetEnabled("prim info",true);
434
435 S32 total_sale_price = 0; 426 S32 total_sale_price = 0;
436 S32 individual_sale_price = 0; 427 S32 individual_sale_price = 0;
437 BOOL is_for_sale_mixed = FALSE; 428 BOOL is_for_sale_mixed = FALSE;
@@ -888,6 +879,16 @@ void LLPanelPermissions::onClickOwner(void *data)
888 } 879 }
889} 880}
890 881
882void LLPanelPermissions::onClickLastOwner(void *data)
883{
884 LLPanelPermissions *self = (LLPanelPermissions *)data;
885
886 if ( self->mLastOwnerID.notNull() )
887 {
888 LLFloaterAvatarInfo::showFromObject(self->mLastOwnerID);
889 }
890}
891
891void LLPanelPermissions::onClickGroup(void* data) 892void LLPanelPermissions::onClickGroup(void* data)
892{ 893{
893 LLPanelPermissions* panelp = (LLPanelPermissions*)data; 894 LLPanelPermissions* panelp = (LLPanelPermissions*)data;
diff --git a/linden/indra/newview/llpanelpermissions.h b/linden/indra/newview/llpanelpermissions.h
index 3b73254..57339ed 100644
--- a/linden/indra/newview/llpanelpermissions.h
+++ b/linden/indra/newview/llpanelpermissions.h
@@ -68,6 +68,7 @@ protected:
68 static void onClickRelease(void*); 68 static void onClickRelease(void*);
69 static void onClickCreator(void*); 69 static void onClickCreator(void*);
70 static void onClickOwner(void*); 70 static void onClickOwner(void*);
71 static void onClickLastOwner(void*);
71 static void onClickGroup(void*); 72 static void onClickGroup(void*);
72 static void cbGroupID(LLUUID group_id, void* userdata); 73 static void cbGroupID(LLUUID group_id, void* userdata);
73 static void onClickDeedToGroup(void*); 74 static void onClickDeedToGroup(void*);
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp
index 4453751..f3b7278 100644
--- a/linden/indra/newview/llprefschat.cpp
+++ b/linden/indra/newview/llprefschat.cpp
@@ -32,6 +32,8 @@
32 32
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llchatbar.h"
36#include "llfloaterchat.h"
35#include "llprefschat.h" 37#include "llprefschat.h"
36#include "lltexteditor.h" 38#include "lltexteditor.h"
37#include "llviewercontrol.h" 39#include "llviewercontrol.h"
@@ -69,11 +71,11 @@ protected:
69 BOOL mPlayTypingAnim; 71 BOOL mPlayTypingAnim;
70 BOOL mChatBubbles; 72 BOOL mChatBubbles;
71 BOOL mScriptErrorAsChat; 73 BOOL mScriptErrorAsChat;
74 BOOL mChatChannel;
72 F32 mConsoleOpacity; 75 F32 mConsoleOpacity;
73 F32 mBubbleOpacity; 76 F32 mBubbleOpacity;
74}; 77};
75 78
76
77LLPrefsChatImpl::LLPrefsChatImpl() 79LLPrefsChatImpl::LLPrefsChatImpl()
78 : LLPanel(std::string("Chat Panel")) 80 : LLPanel(std::string("Chat Panel"))
79{ 81{
@@ -101,6 +103,7 @@ LLPrefsChatImpl::LLPrefsChatImpl()
101 childSetValue("chat_full_width_check", gSavedSettings.getBOOL("ChatFullWidth")); 103 childSetValue("chat_full_width_check", gSavedSettings.getBOOL("ChatFullWidth"));
102 childSetValue("close_chat_on_return_check", gSavedSettings.getBOOL("CloseChatOnReturn")); 104 childSetValue("close_chat_on_return_check", gSavedSettings.getBOOL("CloseChatOnReturn"));
103 childSetValue("play_typing_animation", gSavedSettings.getBOOL("PlayTypingAnim")); 105 childSetValue("play_typing_animation", gSavedSettings.getBOOL("PlayTypingAnim"));
106 childSetValue("toggle_channel_control", gSavedSettings.getBOOL("ChatChannelSelect"));
104 childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity")); 107 childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity"));
105 childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity")); 108 childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity"));
106 109
@@ -124,6 +127,7 @@ LLPrefsChatImpl::LLPrefsChatImpl()
124 mChatFullWidth = gSavedSettings.getBOOL("ChatFullWidth"); 127 mChatFullWidth = gSavedSettings.getBOOL("ChatFullWidth");
125 mCloseChatOnReturn = gSavedSettings.getBOOL("CloseChatOnReturn"); 128 mCloseChatOnReturn = gSavedSettings.getBOOL("CloseChatOnReturn");
126 mPlayTypingAnim = gSavedSettings.getBOOL("PlayTypingAnim"); 129 mPlayTypingAnim = gSavedSettings.getBOOL("PlayTypingAnim");
130 mChatChannel = gSavedSettings.getBOOL("ChatChannelSelect");
127 mConsoleOpacity = gSavedSettings.getF32("ConsoleBackgroundOpacity"); 131 mConsoleOpacity = gSavedSettings.getF32("ConsoleBackgroundOpacity");
128 mBubbleOpacity = gSavedSettings.getF32("ChatBubbleOpacity"); 132 mBubbleOpacity = gSavedSettings.getF32("ChatBubbleOpacity");
129} 133}
@@ -149,6 +153,7 @@ void LLPrefsChatImpl::cancel()
149 gSavedSettings.setBOOL("ChatFullWidth", mChatFullWidth); 153 gSavedSettings.setBOOL("ChatFullWidth", mChatFullWidth);
150 gSavedSettings.setBOOL("CloseChatOnReturn", mCloseChatOnReturn); 154 gSavedSettings.setBOOL("CloseChatOnReturn", mCloseChatOnReturn);
151 gSavedSettings.setBOOL("PlayTypingAnim", mPlayTypingAnim); 155 gSavedSettings.setBOOL("PlayTypingAnim", mPlayTypingAnim);
156 gSavedSettings.setBOOL("ChatChannelSelect", mChatChannel);
152 gSavedSettings.setF32("ConsoleBackgroundOpacity", mConsoleOpacity); 157 gSavedSettings.setF32("ConsoleBackgroundOpacity", mConsoleOpacity);
153 gSavedSettings.setF32("ChatBubbleOpacity", mBubbleOpacity); 158 gSavedSettings.setF32("ChatBubbleOpacity", mBubbleOpacity);
154} 159}
@@ -181,8 +186,21 @@ void LLPrefsChatImpl::apply()
181 186
182 gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal()); 187 gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal());
183 gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal()); 188 gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal());
189
190 BOOL chan_check = childGetValue("toggle_channel_control");
191 gSavedSettings.setBOOL("ChatChannelSelect", chan_check);
192 if (mChatChannel != chan_check)
193 {
194 if (gChatBar)
195 {
196 gChatBar->toggleChannelControl();
197 LLFloaterChat::toggleHistoryChannelControl();
198 }
199 mChatChannel = chan_check;
200 }
184} 201}
185 202
203
186//--------------------------------------------------------------------------- 204//---------------------------------------------------------------------------
187 205
188LLPrefsChat::LLPrefsChat() 206LLPrefsChat::LLPrefsChat()
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp
index 429bed9..5cb14fc 100644
--- a/linden/indra/newview/llprefsim.cpp
+++ b/linden/indra/newview/llprefsim.cpp
@@ -58,7 +58,7 @@ public:
58 void cancel(); 58 void cancel();
59 void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); 59 void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email);
60 void enableHistory(); 60 void enableHistory();
61 61
62 static void onClickLogPath(void* user_data); 62 static void onClickLogPath(void* user_data);
63 static void onCommitLogging(LLUICtrl* ctrl, void* user_data); 63 static void onCommitLogging(LLUICtrl* ctrl, void* user_data);
64 64
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 2dc4e74..8d5aa9e 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -2484,6 +2484,10 @@ bool idle_startup()
2484 2484
2485 // Have the agent start watching the friends list so we can update proxies 2485 // Have the agent start watching the friends list so we can update proxies
2486 gAgent.observeFriends(); 2486 gAgent.observeFriends();
2487
2488 // Start loading inventory
2489 gInventory.startBackgroundFetch();
2490
2487 if (gSavedSettings.getBOOL("LoginAsGod")) 2491 if (gSavedSettings.getBOOL("LoginAsGod"))
2488 { 2492 {
2489 gAgent.requestEnterGodMode(); 2493 gAgent.requestEnterGodMode();
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp
index 99dbe31..9dfd86b 100644
--- a/linden/indra/newview/lltool.cpp
+++ b/linden/indra/newview/lltool.cpp
@@ -64,7 +64,6 @@ LLTool::~LLTool()
64 } 64 }
65} 65}
66 66
67
68BOOL LLTool::handleMouseDown(S32 x, S32 y, MASK mask) 67BOOL LLTool::handleMouseDown(S32 x, S32 y, MASK mask)
69{ 68{
70 if (gDebugClicks) 69 if (gDebugClicks)
@@ -124,6 +123,20 @@ BOOL LLTool::handleRightMouseUp(S32 x, S32 y, MASK mask)
124 // llinfos << "LLTool::handleRightMouseDown" << llendl; 123 // llinfos << "LLTool::handleRightMouseDown" << llendl;
125 return FALSE; 124 return FALSE;
126} 125}
126
127BOOL LLTool::handleMiddleMouseDown(S32 x,S32 y,MASK mask)
128{
129 // by default, didn't handle it
130 // llinfos << "LLTool::handleMiddleMouseDown" << llendl;
131 return FALSE;
132}
133
134BOOL LLTool::handleMiddleMouseUp(S32 x, S32 y, MASK mask)
135{
136 // by default, didn't handle it
137 // llinfos << "LLTool::handleMiddleMouseUp" << llendl;
138 return FALSE;
139}
127 140
128BOOL LLTool::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) 141BOOL LLTool::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen)
129{ 142{
diff --git a/linden/indra/newview/lltool.h b/linden/indra/newview/lltool.h
index cf97fb4..73463ba 100644
--- a/linden/indra/newview/lltool.h
+++ b/linden/indra/newview/lltool.h
@@ -56,6 +56,9 @@ public:
56 // Virtual functions inherited from LLMouseHandler 56 // Virtual functions inherited from LLMouseHandler
57 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 57 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
58 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 58 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
59 virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask);
60 virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask);
61
59 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 62 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
60 virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); 63 virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
61 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 64 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 46b36d9..d23e29d 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -96,7 +96,24 @@ LLToolBrushLand::LLToolBrushLand()
96 mGotHover(FALSE), 96 mGotHover(FALSE),
97 mBrushSelected(FALSE) 97 mBrushSelected(FALSE)
98{ 98{
99 mBrushIndex = gSavedSettings.getS32("LandBrushSize"); 99 mBrushSize = gSavedSettings.getF32("LandBrushSize");
100}
101
102
103U8 LLToolBrushLand::getBrushIndex()
104{
105 // find the best index for desired size
106 // (compatibility with old sims, brush_index is now depricated - DEV-8252)
107 U8 index = 0;
108 for (U8 i = 0; i < LAND_BRUSH_SIZE_COUNT; i++)
109 {
110 if (mBrushSize > LAND_BRUSH_SIZE[i])
111 {
112 index = i;
113 }
114 }
115
116 return index;
100} 117}
101 118
102void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global, 119void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
@@ -157,7 +174,6 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
157 F32 seconds = (1.0f / gFPSClamped) * gSavedSettings.getF32("LandBrushForce"); 174 F32 seconds = (1.0f / gFPSClamped) * gSavedSettings.getF32("LandBrushForce");
158 F32 x_pos = (F32)pos_region.mV[VX]; 175 F32 x_pos = (F32)pos_region.mV[VX];
159 F32 y_pos = (F32)pos_region.mV[VY]; 176 F32 y_pos = (F32)pos_region.mV[VY];
160 U8 brush_size = (U8)mBrushIndex;
161 LLMessageSystem* msg = gMessageSystem; 177 LLMessageSystem* msg = gMessageSystem;
162 msg->newMessageFast(_PREHASH_ModifyLand); 178 msg->newMessageFast(_PREHASH_ModifyLand);
163 msg->nextBlockFast(_PREHASH_AgentData); 179 msg->nextBlockFast(_PREHASH_AgentData);
@@ -165,7 +181,7 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
165 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 181 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
166 msg->nextBlockFast(_PREHASH_ModifyBlock); 182 msg->nextBlockFast(_PREHASH_ModifyBlock);
167 msg->addU8Fast(_PREHASH_Action, (U8)action); 183 msg->addU8Fast(_PREHASH_Action, (U8)action);
168 msg->addU8Fast(_PREHASH_BrushSize, brush_size); 184 msg->addU8Fast(_PREHASH_BrushSize, getBrushIndex());
169 msg->addF32Fast(_PREHASH_Seconds, seconds); 185 msg->addF32Fast(_PREHASH_Seconds, seconds);
170 msg->addF32Fast(_PREHASH_Height, mStartingZ); 186 msg->addF32Fast(_PREHASH_Height, mStartingZ);
171 msg->nextBlockFast(_PREHASH_ParcelData); 187 msg->nextBlockFast(_PREHASH_ParcelData);
@@ -174,6 +190,8 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
174 msg->addF32Fast(_PREHASH_South, y_pos ); 190 msg->addF32Fast(_PREHASH_South, y_pos );
175 msg->addF32Fast(_PREHASH_East, x_pos ); 191 msg->addF32Fast(_PREHASH_East, x_pos );
176 msg->addF32Fast(_PREHASH_North, y_pos ); 192 msg->addF32Fast(_PREHASH_North, y_pos );
193 msg->nextBlock("ModifyBlockExtended");
194 msg->addF32("BrushSize", mBrushSize);
177 msg->sendMessage(regionp->getHost()); 195 msg->sendMessage(regionp->getHost());
178 } 196 }
179} 197}
@@ -294,7 +312,6 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
294 regionp->forceUpdate(); 312 regionp->forceUpdate();
295 313
296 // tell the simulator what we've done 314 // tell the simulator what we've done
297 U8 brush_size = (U8)mBrushIndex;
298 LLMessageSystem* msg = gMessageSystem; 315 LLMessageSystem* msg = gMessageSystem;
299 msg->newMessageFast(_PREHASH_ModifyLand); 316 msg->newMessageFast(_PREHASH_ModifyLand);
300 msg->nextBlockFast(_PREHASH_AgentData); 317 msg->nextBlockFast(_PREHASH_AgentData);
@@ -302,7 +319,7 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
302 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 319 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
303 msg->nextBlockFast(_PREHASH_ModifyBlock); 320 msg->nextBlockFast(_PREHASH_ModifyBlock);
304 msg->addU8Fast(_PREHASH_Action, (U8)action); 321 msg->addU8Fast(_PREHASH_Action, (U8)action);
305 msg->addU8Fast(_PREHASH_BrushSize, brush_size); 322 msg->addU8Fast(_PREHASH_BrushSize, getBrushIndex());
306 msg->addF32Fast(_PREHASH_Seconds, seconds); 323 msg->addF32Fast(_PREHASH_Seconds, seconds);
307 msg->addF32Fast(_PREHASH_Height, mStartingZ); 324 msg->addF32Fast(_PREHASH_Height, mStartingZ);
308 325
@@ -327,6 +344,9 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
327 msg->addF32Fast(_PREHASH_East, max_region.mV[VX] ); 344 msg->addF32Fast(_PREHASH_East, max_region.mV[VX] );
328 msg->addF32Fast(_PREHASH_North, max_region.mV[VY] ); 345 msg->addF32Fast(_PREHASH_North, max_region.mV[VY] );
329 } 346 }
347
348 msg->nextBlock("ModifyBlockExtended");
349 msg->addF32("BrushSize", mBrushSize);
330 350
331 msg->sendMessage(regionp->getHost()); 351 msg->sendMessage(regionp->getHost());
332 } 352 }
@@ -447,7 +467,8 @@ void LLToolBrushLand::render()
447 spot.mdV[VX] = floor( spot.mdV[VX] + 0.5 ); 467 spot.mdV[VX] = floor( spot.mdV[VX] + 0.5 );
448 spot.mdV[VY] = floor( spot.mdV[VY] + 0.5 ); 468 spot.mdV[VY] = floor( spot.mdV[VY] + 0.5 );
449 469
450 mBrushIndex = gSavedSettings.getS32("LandBrushSize"); 470 mBrushSize = gSavedSettings.getF32("LandBrushSize");
471
451 region_list_t regions; 472 region_list_t regions;
452 determineAffectedRegions(regions, spot); 473 determineAffectedRegions(regions, spot);
453 474
@@ -499,7 +520,7 @@ void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region
499 520
500 S32 i = (S32) pos_region.mV[VX]; 521 S32 i = (S32) pos_region.mV[VX];
501 S32 j = (S32) pos_region.mV[VY]; 522 S32 j = (S32) pos_region.mV[VY];
502 S32 half_edge = llfloor(LAND_BRUSH_SIZE[mBrushIndex]); 523 S32 half_edge = llfloor(mBrushSize);
503 S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction"); 524 S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
504 F32 force = gSavedSettings.getF32("LandBrushForce"); // .1 to 100? 525 F32 force = gSavedSettings.getF32("LandBrushForce"); // .1 to 100?
505 526
@@ -556,27 +577,27 @@ void LLToolBrushLand::determineAffectedRegions(region_list_t& regions,
556 const LLVector3d& spot ) const 577 const LLVector3d& spot ) const
557{ 578{
558 LLVector3d corner(spot); 579 LLVector3d corner(spot);
559 corner.mdV[VX] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2); 580 corner.mdV[VX] -= (mBrushSize / 2);
560 corner.mdV[VY] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2); 581 corner.mdV[VY] -= (mBrushSize / 2);
561 LLViewerRegion* region = NULL; 582 LLViewerRegion* region = NULL;
562 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner); 583 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
563 if(region && regions.find(region) == regions.end()) 584 if(region && regions.find(region) == regions.end())
564 { 585 {
565 regions.insert(region); 586 regions.insert(region);
566 } 587 }
567 corner.mdV[VY] += LAND_BRUSH_SIZE[mBrushIndex]; 588 corner.mdV[VY] += mBrushSize;
568 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner); 589 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
569 if(region && regions.find(region) == regions.end()) 590 if(region && regions.find(region) == regions.end())
570 { 591 {
571 regions.insert(region); 592 regions.insert(region);
572 } 593 }
573 corner.mdV[VX] += LAND_BRUSH_SIZE[mBrushIndex]; 594 corner.mdV[VX] += mBrushSize;
574 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner); 595 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
575 if(region && regions.find(region) == regions.end()) 596 if(region && regions.find(region) == regions.end())
576 { 597 {
577 regions.insert(region); 598 regions.insert(region);
578 } 599 }
579 corner.mdV[VY] -= LAND_BRUSH_SIZE[mBrushIndex]; 600 corner.mdV[VY] -= mBrushSize;
580 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner); 601 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
581 if(region && regions.find(region) == regions.end()) 602 if(region && regions.find(region) == regions.end())
582 { 603 {
diff --git a/linden/indra/newview/lltoolbrush.h b/linden/indra/newview/lltoolbrush.h
index 8df4b67..f25d6b9 100644
--- a/linden/indra/newview/lltoolbrush.h
+++ b/linden/indra/newview/lltoolbrush.h
@@ -95,11 +95,14 @@ protected:
95 F32 mStartingZ; 95 F32 mStartingZ;
96 S32 mMouseX; 96 S32 mMouseX;
97 S32 mMouseY; 97 S32 mMouseY;
98 S32 mBrushIndex; 98 F32 mBrushSize;
99 BOOL mGotHover; 99 BOOL mGotHover;
100 BOOL mBrushSelected; 100 BOOL mBrushSelected;
101 // Order doesn't matter and we do check for existance of regions, so use a set 101 // Order doesn't matter and we do check for existance of regions, so use a set
102 region_list_t mLastAffectedRegions; 102 region_list_t mLastAffectedRegions;
103
104private:
105 U8 getBrushIndex();
103}; 106};
104 107
105 108
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 93f0254..5a21992 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -676,7 +676,7 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
676 llinfos << "LLToolPie handleDoubleClick (becoming mouseDown)" << llendl; 676 llinfos << "LLToolPie handleDoubleClick (becoming mouseDown)" << llendl;
677 } 677 }
678 678
679 if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) 679 if (gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport"))
680 { 680 {
681 if (mPick.mPickType == LLPickInfo::PICK_LAND 681 if (mPick.mPickType == LLPickInfo::PICK_LAND
682 && !mPick.mPosGlobal.isExactlyZero()) 682 && !mPick.mPosGlobal.isExactlyZero())
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 1560414..e83bc2d 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -211,6 +211,9 @@
211#include "lltexlayer.h" 211#include "lltexlayer.h"
212#include "primbackup.h" 212#include "primbackup.h"
213 213
214#include "jcfloater_animation_list.h"
215#include "llfloaterassetbrowser.h"
216
214void init_client_menu(LLMenuGL* menu); 217void init_client_menu(LLMenuGL* menu);
215void init_server_menu(LLMenuGL* menu); 218void init_server_menu(LLMenuGL* menu);
216 219
@@ -2412,28 +2415,40 @@ bool handle_go_to()
2412 std::vector<std::string> strings; 2415 std::vector<std::string> strings;
2413 std::string val; 2416 std::string val;
2414 LLVector3d pos = LLToolPie::getInstance()->getPick().mPosGlobal; 2417 LLVector3d pos = LLToolPie::getInstance()->getPick().mPosGlobal;
2415 val = llformat("%g", pos.mdV[VX]); 2418 if (gSavedSettings.getBOOL("DoubleClickTeleport"))
2416 strings.push_back(val);
2417 val = llformat("%g", pos.mdV[VY]);
2418 strings.push_back(val);
2419 val = llformat("%g", pos.mdV[VZ]);
2420 strings.push_back(val);
2421 send_generic_message("autopilot", strings);
2422
2423 LLViewerParcelMgr::getInstance()->deselectLand();
2424
2425 if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
2426 { 2419 {
2427 gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID()); 2420 LLVector3d hips_offset(0.0f, 0.0f, 1.2f);
2421 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
2422 gAgent.teleportViaLocation(pos + hips_offset);
2428 } 2423 }
2429 else 2424 else
2430 { 2425 {
2431 // Snap camera back to behind avatar 2426 // JAMESDEBUG try simulator autopilot
2432 gAgent.setFocusOnAvatar(TRUE, ANIMATE); 2427 std::vector<std::string> strings;
2433 } 2428 std::string val;
2429 val = llformat("%g", pos.mdV[VX]);
2430 strings.push_back(val);
2431 val = llformat("%g", pos.mdV[VY]);
2432 strings.push_back(val);
2433 val = llformat("%g", pos.mdV[VZ]);
2434 strings.push_back(val);
2435 send_generic_message("autopilot", strings);
2434 2436
2435 // Could be first use 2437 LLViewerParcelMgr::getInstance()->deselectLand();
2436 LLFirstUse::useGoTo(); 2438
2439 if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
2440 {
2441 gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID());
2442 }
2443 else
2444 {
2445 // Snap camera back to behind avatar
2446 gAgent.setFocusOnAvatar(TRUE, ANIMATE);
2447 }
2448
2449 // Could be first use
2450 LLFirstUse::useGoTo();
2451 }
2437 return true; 2452 return true;
2438} 2453}
2439 2454
@@ -5721,6 +5736,10 @@ class LLShowFloater : public view_listener_t
5721 { 5736 {
5722 LLFloaterActiveSpeakers::toggleInstance(LLSD()); 5737 LLFloaterActiveSpeakers::toggleInstance(LLSD());
5723 } 5738 }
5739 else if (floater_name == "animation list")
5740 {
5741 JCFloaterAnimList::toggleInstance(LLSD());
5742 }
5724 else if (floater_name == "inworld browser") 5743 else if (floater_name == "inworld browser")
5725 { 5744 {
5726 LLFloaterMediaBrowser::toggle(); 5745 LLFloaterMediaBrowser::toggle();
@@ -5927,7 +5946,6 @@ class LLLandEdit : public view_listener_t
5927 5946
5928 LLViewerParcelMgr::getInstance()->selectParcelAt( LLToolPie::getInstance()->getPick().mPosGlobal ); 5947 LLViewerParcelMgr::getInstance()->selectParcelAt( LLToolPie::getInstance()->getPick().mPosGlobal );
5929 5948
5930 gFloaterTools->showMore(TRUE);
5931 gFloaterView->bringToFront( gFloaterTools ); 5949 gFloaterView->bringToFront( gFloaterTools );
5932 5950
5933 // Switch to land edit toolset 5951 // Switch to land edit toolset
@@ -8269,6 +8287,113 @@ class LLAdvancedCheckHUDInfo : public view_listener_t
8269}; 8287};
8270 8288
8271 8289
8290//////////////////////
8291// FORCE GROUND SIT //
8292//////////////////////
8293
8294class LLAdvancedToggleSit: public view_listener_t
8295{
8296 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8297 {
8298 LLChat chat;
8299 chat.mSourceType = CHAT_SOURCE_SYSTEM;
8300 if(!gAgent.getAvatarObject()->mIsSitting)
8301 {
8302 gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND);
8303 chat.mText = "Forcing Ground Sit";
8304 }
8305 else
8306 {
8307 gAgent.setControlFlags(!AGENT_CONTROL_SIT_ON_GROUND);
8308 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
8309 chat.mText = "Standing up";
8310 }
8311 LLFloaterChat::addChat(chat);
8312 return true;
8313 }
8314};
8315
8316class LLAdvancedCheckSit : public view_listener_t
8317{
8318 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8319 {
8320 if(gAgent.getAvatarObject()->mIsSitting)
8321 {
8322 gMenuHolder->findControl(userdata["control"].asString())->setValue(true);
8323 }
8324 else
8325 {
8326 gMenuHolder->findControl(userdata["control"].asString())->setValue(false);
8327 }
8328 return true;
8329 }
8330};
8331
8332
8333/////////////
8334// PHANTOM //
8335/////////////
8336
8337class LLAdvancedTogglePhantom: public view_listener_t
8338{
8339 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8340 {
8341 LLAgent::togglePhantom();
8342 BOOL ph = LLAgent::getPhantom();
8343 LLChat chat;
8344 chat.mSourceType = CHAT_SOURCE_SYSTEM;
8345 chat.mText = llformat("%s%s","Phantom ",(ph ? "On" : "Off"));
8346 LLFloaterChat::addChat(chat);
8347 //gMenuHolder->findControl(userdata["control"].asString())->setValue(ph);
8348 return true;
8349 }
8350
8351};
8352
8353class LLAdvancedCheckPhantom: public view_listener_t
8354{
8355 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8356 {
8357 gMenuHolder->findControl(userdata["control"].asString())->setValue(LLAgent::getPhantom());
8358 return true;
8359 }
8360};
8361
8362
8363///////////////////
8364// ASSET BROWSER //
8365///////////////////
8366
8367class LLAdvancedToggleAssetBrowser: public view_listener_t
8368{
8369 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8370 {
8371 //open the floater
8372 LLFloaterAssetBrowser::show(0);
8373
8374 bool vis = false;
8375 if(LLFloaterAssetBrowser::getInstance())
8376 {
8377 vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
8378 }
8379 return true;
8380 }
8381};
8382
8383class LLAdvancedCheckAssetBrowser: public view_listener_t
8384{
8385 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
8386 {
8387 bool vis = false;
8388 if(LLFloaterAssetBrowser::getInstance())
8389 {
8390 vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
8391 }
8392 gMenuHolder->findControl(userdata["control"].asString())->setValue(vis);
8393 return true;
8394 }
8395};
8396
8272 8397
8273/////////////////////// 8398///////////////////////
8274// CLEAR GROUP CACHE // 8399// CLEAR GROUP CACHE //
@@ -10483,6 +10608,12 @@ void initialize_menus()
10483 addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole"); 10608 addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole");
10484 addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole"); 10609 addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole");
10485 addMenu(new LLAdvancedReloadSettingsOverrides(), "Advanced.ReloadSettingsOverrides"); 10610 addMenu(new LLAdvancedReloadSettingsOverrides(), "Advanced.ReloadSettingsOverrides");
10611 addMenu(new LLAdvancedToggleSit(), "Advanced.ToggleSit");
10612 addMenu(new LLAdvancedCheckSit(), "Emerald.CheckSit");
10613 addMenu(new LLAdvancedTogglePhantom(), "Advanced.TogglePhantom");
10614 addMenu(new LLAdvancedCheckPhantom(), "Advanced.CheckPhantom");
10615 addMenu(new LLAdvancedToggleAssetBrowser(),"Advanced.ToggleAssetBrowser");
10616 addMenu(new LLAdvancedCheckAssetBrowser(),"Advanced.CheckAssetBrowser");
10486 10617
10487 // Advanced > HUD Info 10618 // Advanced > HUD Info
10488 addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo"); 10619 addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo");
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index cef6926..76b752c 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -900,51 +900,9 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
900 900
901BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) 901BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
902{ 902{
903 BOOL handled = FALSE; 903 BOOL handled = FALSE;
904
905 // let scrollbar have first dibs
906 handled = LLView::childrenHandleMouseUp(x, y, mask) != NULL;
907
908 // Used to enable I Agree checkbox if the user scrolled through entire text
909 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax());
910 if (mOnScrollEndCallback && was_scrolled_to_bottom)
911 {
912 mOnScrollEndCallback(mOnScrollEndData);
913 }
914
915 if( !handled && mTakesNonScrollClicks)
916 {
917 if( mIsSelecting )
918 {
919 // Finish selection
920 if( y > getTextRect().mTop )
921 {
922 mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 );
923 }
924 else
925 if( y < getTextRect().mBottom )
926 {
927 mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 );
928 }
929
930 setCursorAtLocalPos( x, y, TRUE );
931 endSelection();
932
933 updateScrollFromCursor();
934 }
935
936 if( !hasSelection() )
937 {
938 handleMouseUpOverSegment( x, y, mask );
939 }
940
941 handled = TRUE;
942 }
943
944 // Delay cursor flashing
945 resetKeystrokeTimer();
946 904
947 if( hasMouseCapture() ) 905 if( hasMouseCapture() )
948 { 906 {
949 if (mDragItem) 907 if (mDragItem)
950 { 908 {
@@ -963,8 +921,15 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
963 } 921 }
964 } 922 }
965 mDragItem = NULL; 923 mDragItem = NULL;
966 gFocusMgr.setMouseCapture( NULL ); 924 }
967 handled = TRUE; 925
926 handled = LLTextEditor::handleMouseUp(x,y,mask);
927
928 // Used to enable I Agree checkbox if the user scrolled through entire text
929 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax());
930 if (mOnScrollEndCallback && was_scrolled_to_bottom)
931 {
932 mOnScrollEndCallback(mOnScrollEndData);
968 } 933 }
969 934
970 return handled; 935 return handled;
@@ -1006,6 +971,24 @@ BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
1006 return handled; 971 return handled;
1007} 972}
1008 973
974BOOL LLViewerTextEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask)
975{
976 BOOL handled = FALSE;
977 handled = childrenHandleMiddleMouseDown(x, y, mask) != NULL;
978 if (!handled)
979 {
980 handled = LLTextEditor::handleMiddleMouseDown(x, y, mask);
981 }
982 return handled;
983}
984
985BOOL LLViewerTextEditor::handleMiddleMouseUp(S32 x, S32 y, MASK mask)
986{
987 BOOL handled = childrenHandleMiddleMouseUp(x, y, mask) != NULL;
988
989 return handled;
990}
991
1009BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) 992BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
1010{ 993{
1011 BOOL handled = FALSE; 994 BOOL handled = FALSE;
@@ -1028,7 +1011,6 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
1028 } 1011 }
1029 } 1012 }
1030 } 1013 }
1031
1032 1014
1033 setCursorAtLocalPos( x, y, FALSE ); 1015 setCursorAtLocalPos( x, y, FALSE );
1034 deselect(); 1016 deselect();
@@ -1066,6 +1048,9 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
1066 // delay cursor flashing 1048 // delay cursor flashing
1067 resetKeystrokeTimer(); 1049 resetKeystrokeTimer();
1068 1050
1051 // take selection to 'primary' clipboard
1052 updatePrimary();
1053
1069 handled = TRUE; 1054 handled = TRUE;
1070 } 1055 }
1071 return handled; 1056 return handled;
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h
index 4cd5850..062808a 100644
--- a/linden/indra/newview/llviewertexteditor.h
+++ b/linden/indra/newview/llviewertexteditor.h
@@ -58,6 +58,8 @@ public:
58 // mousehandler overrides 58 // mousehandler overrides
59 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 59 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
60 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 60 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
61 virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask);
62 virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask);
61 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 63 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
62 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 64 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
63 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); 65 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask );
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 0ab4ab6..2240d44 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -547,19 +547,42 @@ bool LLViewerWindow::shouldShowToolTipFor(LLMouseHandler *mh)
547 return false; 547 return false;
548} 548}
549 549
550BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) 550BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down)
551{ 551{
552 std::string buttonname;
553 std::string buttonstatestr;
554 BOOL handled = FALSE;
552 S32 x = pos.mX; 555 S32 x = pos.mX;
553 S32 y = pos.mY; 556 S32 y = pos.mY;
554 x = llround((F32)x / mDisplayScale.mV[VX]); 557 x = llround((F32)x / mDisplayScale.mV[VX]);
555 y = llround((F32)y / mDisplayScale.mV[VY]); 558 y = llround((F32)y / mDisplayScale.mV[VY]);
556 559
557 LLView::sMouseHandlerMessage.clear(); 560 if (down)
558 561 buttonstatestr = "down" ;
559 if (gDebugClicks) 562 else
563 buttonstatestr = "up" ;
564
565 switch (clicktype)
560 { 566 {
561 llinfos << "ViewerWindow left mouse down at " << x << "," << y << llendl; 567 case LLMouseHandler::CLICK_LEFT:
568 mLeftMouseDown = down;
569 buttonname = "Left";
570 break;
571 case LLMouseHandler::CLICK_RIGHT:
572 mRightMouseDown = down;
573 buttonname = "Right";
574 break;
575 case LLMouseHandler::CLICK_MIDDLE:
576 mMiddleMouseDown = down;
577 buttonname = "Middle";
578 break;
579 case LLMouseHandler::CLICK_DOUBLELEFT:
580 mLeftMouseDown = down;
581 buttonname = "Left Double Click";
582 break;
562 } 583 }
584
585 LLView::sMouseHandlerMessage.clear();
563 586
564 if (gMenuBarView) 587 if (gMenuBarView)
565 { 588 {
@@ -567,7 +590,10 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
567 gMenuBarView->resetMenuTrigger(); 590 gMenuBarView->resetMenuTrigger();
568 } 591 }
569 592
570 mLeftMouseDown = TRUE; 593 if (gDebugClicks)
594 {
595 llinfos << "ViewerWindow " << buttonname << " mouse " << buttonstatestr << " at " << x << "," << y << llendl;
596 }
571 597
572 // Make sure we get a coresponding mouseup event, even if the mouse leaves the window 598 // Make sure we get a coresponding mouseup event, even if the mouse leaves the window
573 mWindow->captureMouse(); 599 mWindow->captureMouse();
@@ -576,9 +602,9 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
576 gMouseIdleTimer.reset(); 602 gMouseIdleTimer.reset();
577 603
578 // Hide tooltips on mousedown 604 // Hide tooltips on mousedown
579 mToolTipBlocked = TRUE; 605 mToolTipBlocked = down;
580 606
581 // Also hide hover info on mousedown 607 // Also hide hover info on mousedown/mouseup
582 if (gHoverView) 608 if (gHoverView)
583 { 609 {
584 gHoverView->cancelHover(); 610 gHoverView->cancelHover();
@@ -587,7 +613,7 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
587 // Don't let the user move the mouse out of the window until mouse up. 613 // Don't let the user move the mouse out of the window until mouse up.
588 if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() ) 614 if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
589 { 615 {
590 mWindow->setMouseClipping(TRUE); 616 mWindow->setMouseClipping(down);
591 } 617 }
592 618
593 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); 619 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -598,10 +624,9 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
598 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y ); 624 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
599 if (LLView::sDebugMouseHandling) 625 if (LLView::sDebugMouseHandling)
600 { 626 {
601 llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl; 627 llinfos << buttonname << " Mouse " << buttonstatestr << " handled by captor " << mouse_captor->getName() << llendl;
602 } 628 }
603 629 return mouse_captor->handleAnyMouseClick(local_x, local_y, mask, clicktype, down);
604 return mouse_captor->handleMouseDown(local_x, local_y, mask);
605 } 630 }
606 631
607 // Topmost view gets a chance before the hierarchy 632 // Topmost view gets a chance before the hierarchy
@@ -610,215 +635,95 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
610 { 635 {
611 S32 local_x, local_y; 636 S32 local_x, local_y;
612 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); 637 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
613 if (top_ctrl->pointInView(local_x, local_y)) 638 if (down)
614 { 639 {
615 return top_ctrl->handleMouseDown(local_x, local_y, mask); 640 if (top_ctrl->pointInView(local_x, local_y))
616 } 641 {
617 else 642 return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ;
618 { 643 }
619 gFocusMgr.setTopCtrl(NULL); 644 else
645 {
646 gFocusMgr.setTopCtrl(NULL);
647 }
620 } 648 }
621 } 649 else
650 handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask);
622 651
652
653 }
623 // Give the UI views a chance to process the click 654 // Give the UI views a chance to process the click
624 if( mRootView->handleMouseDown(x, y, mask) ) 655 if( mRootView->handleAnyMouseClick(x, y, mask, clicktype, down) )
625 { 656 {
626 if (LLView::sDebugMouseHandling) 657 if (LLView::sDebugMouseHandling)
627 { 658 {
628 llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl; 659 llinfos << buttonname << " Mouse " << buttonstatestr << " " << LLView::sMouseHandlerMessage << llendl;
629 } 660 }
630 return TRUE; 661 return TRUE;
631 } 662 }
632 else if (LLView::sDebugMouseHandling) 663 else if (LLView::sDebugMouseHandling)
633 { 664 {
634 llinfos << "Left Mouse Down not handled by view" << llendl; 665 llinfos << buttonname << " Mouse " << buttonstatestr << " not handled by view" << llendl;
635 }
636
637 if (gDisconnected)
638 {
639 return FALSE;
640 }
641
642 if(LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask ) )
643 {
644 // This is necessary to force clicks in the world to cause edit
645 // boxes that might have keyboard focus to relinquish it, and hence
646 // cause a commit to update their value. JC
647 gFocusMgr.setKeyboardFocus(NULL);
648 return TRUE;
649 }
650
651 return FALSE;
652}
653
654BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK mask)
655{
656 S32 x = pos.mX;
657 S32 y = pos.mY;
658 x = llround((F32)x / mDisplayScale.mV[VX]);
659 y = llround((F32)y / mDisplayScale.mV[VY]);
660
661 LLView::sMouseHandlerMessage.clear();
662
663 if (gDebugClicks)
664 {
665 llinfos << "ViewerWindow left mouse double-click at " << x << "," << y << llendl;
666 } 666 }
667 667 if (down)
668 mLeftMouseDown = TRUE;
669
670 // Hide tooltips
671 if( mToolTip )
672 { 668 {
673 mToolTip->setVisible( FALSE ); 669 if (gDisconnected)
674 }
675
676 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
677 if( mouse_captor )
678 {
679 S32 local_x;
680 S32 local_y;
681 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
682 if (LLView::sDebugMouseHandling)
683 { 670 {
684 llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl; 671 return FALSE;
685 }
686
687 return mouse_captor->handleDoubleClick(local_x, local_y, mask);
688 }
689
690 // Check for hit on UI.
691 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
692 if (top_ctrl)
693 {
694 S32 local_x, local_y;
695 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
696 if (top_ctrl->pointInView(local_x, local_y))
697 {
698 return top_ctrl->handleDoubleClick(local_x, local_y, mask);
699 } 672 }
700 else 673
674 if(LLToolMgr::getInstance()->getCurrentTool()->handleAnyMouseClick( x, y, mask, clicktype, down ) )
701 { 675 {
702 gFocusMgr.setTopCtrl(NULL); 676 // This is necessary to force clicks in the world to cause edit
677 // boxes that might have keyboard focus to relinquish it, and hence
678 // cause a commit to update their value. JC
679 gFocusMgr.setKeyboardFocus(NULL);
680 return TRUE;
703 } 681 }
704 } 682 }
705 683 else
706 if (mRootView->handleDoubleClick(x, y, mask))
707 { 684 {
708 if (LLView::sDebugMouseHandling) 685
686 mWindow->releaseMouse();
687
688 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
689 if( !handled )
709 { 690 {
710 llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl; 691 handled = mRootView->handleAnyMouseClick(x, y, mask, clicktype, down);
692 }
693
694
695
696 if( !handled )
697 {
698 if (tool)
699 {
700 handled = tool->handleAnyMouseClick(x, y, mask, clicktype, down);
701 }
711 } 702 }
712 return TRUE;
713 }
714 else if (LLView::sDebugMouseHandling)
715 {
716 llinfos << "Left Mouse Down not handled by view" << llendl;
717 } 703 }
718 704
719 // Why is this here? JC 9/3/2002 705 return (!down);
720 if (gNoRender) 706}
721 {
722 return TRUE;
723 }
724 707
725 if(LLToolMgr::getInstance()->getCurrentTool()->handleDoubleClick( x, y, mask ) ) 708BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
726 { 709{
727 return TRUE; 710 BOOL down = TRUE;
728 } 711 return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
712}
729 713
730 // if we got this far and nothing handled a double click, pass a normal mouse down 714BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK mask)
731 return handleMouseDown(window, pos, mask); 715{
716 // try handling as a double-click first, then a single-click if that
717 // wasn't handled.
718 BOOL down = TRUE;
719 return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_DOUBLELEFT,down) ||
720 handleMouseDown(window, pos, mask);
732} 721}
733 722
734BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) 723BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
735{ 724{
736 S32 x = pos.mX; 725 BOOL down = FALSE;
737 S32 y = pos.mY; 726 return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
738 x = llround((F32)x / mDisplayScale.mV[VX]);
739 y = llround((F32)y / mDisplayScale.mV[VY]);
740
741 LLView::sMouseHandlerMessage.clear();
742
743 if (gDebugClicks)
744 {
745 llinfos << "ViewerWindow left mouse up" << llendl;
746 }
747
748 mLeftMouseDown = FALSE;
749
750 // Indicate mouse was active
751 gMouseIdleTimer.reset();
752
753 // Hide tooltips on mouseup
754 if( mToolTip )
755 {
756 mToolTip->setVisible( FALSE );
757 }
758
759 // Also hide hover info on mouseup
760 if (gHoverView) gHoverView->cancelHover();
761
762 BOOL handled = FALSE;
763
764 mWindow->releaseMouse();
765
766 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
767
768 if( tool->clipMouseWhenDown() )
769 {
770 mWindow->setMouseClipping(FALSE);
771 }
772
773 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
774 if( mouse_captor )
775 {
776 S32 local_x;
777 S32 local_y;
778 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
779 if (LLView::sDebugMouseHandling)
780 {
781 llinfos << "Left Mouse Up handled by captor " << mouse_captor->getName() << llendl;
782 }
783
784 return mouse_captor->handleMouseUp(local_x, local_y, mask);
785 }
786
787 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
788 if (top_ctrl)
789 {
790 S32 local_x, local_y;
791 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
792 handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask);
793 }
794
795 if( !handled )
796 {
797 handled = mRootView->handleMouseUp(x, y, mask);
798 }
799
800 if (LLView::sDebugMouseHandling)
801 {
802 if (handled)
803 {
804 llinfos << "Left Mouse Up" << LLView::sMouseHandlerMessage << llendl;
805 }
806 else
807 {
808 llinfos << "Left Mouse Up not handled by view" << llendl;
809 }
810 }
811
812 if( !handled )
813 {
814 if (tool)
815 {
816 handled = tool->handleMouseUp(x, y, mask);
817 }
818 }
819
820 // Always handled as far as the OS is concerned.
821 return TRUE;
822} 727}
823 728
824 729
@@ -829,91 +734,10 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
829 x = llround((F32)x / mDisplayScale.mV[VX]); 734 x = llround((F32)x / mDisplayScale.mV[VX]);
830 y = llround((F32)y / mDisplayScale.mV[VY]); 735 y = llround((F32)y / mDisplayScale.mV[VY]);
831 736
832 LLView::sMouseHandlerMessage.clear(); 737 BOOL down = TRUE;
833 738 BOOL handle = handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down);
834 if (gDebugClicks) 739 if (handle)
835 { 740 return handle;
836 llinfos << "ViewerWindow right mouse down at " << x << "," << y << llendl;
837 }
838
839 if (gMenuBarView)
840 {
841 // stop ALT-key access to menu
842 gMenuBarView->resetMenuTrigger();
843 }
844
845 mRightMouseDown = TRUE;
846
847 // Make sure we get a coresponding mouseup event, even if the mouse leaves the window
848 mWindow->captureMouse();
849
850 // Hide tooltips
851 if( mToolTip )
852 {
853 mToolTip->setVisible( FALSE );
854 }
855
856 // Also hide hover info on mousedown
857 if (gHoverView)
858 {
859 gHoverView->cancelHover();
860 }
861
862 // Don't let the user move the mouse out of the window until mouse up.
863 if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
864 {
865 mWindow->setMouseClipping(TRUE);
866 }
867
868 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
869 if( mouse_captor )
870 {
871 S32 local_x;
872 S32 local_y;
873 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
874 if (LLView::sDebugMouseHandling)
875 {
876 llinfos << "Right Mouse Down handled by captor " << mouse_captor->getName() << llendl;
877 }
878 return mouse_captor->handleRightMouseDown(local_x, local_y, mask);
879 }
880
881 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
882 if (top_ctrl)
883 {
884 S32 local_x, local_y;
885 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
886 if (top_ctrl->pointInView(local_x, local_y))
887 {
888 return top_ctrl->handleRightMouseDown(local_x, local_y, mask);
889 }
890 else
891 {
892 gFocusMgr.setTopCtrl(NULL);
893 }
894 }
895
896 if( mRootView->handleRightMouseDown(x, y, mask) )
897 {
898 if (LLView::sDebugMouseHandling)
899 {
900 llinfos << "Right Mouse Down" << LLView::sMouseHandlerMessage << llendl;
901 }
902 return TRUE;
903 }
904 else if (LLView::sDebugMouseHandling)
905 {
906 llinfos << "Right Mouse Down not handled by view" << llendl;
907 }
908
909 if(LLToolMgr::getInstance()->getCurrentTool()->handleRightMouseDown( x, y, mask ) )
910 {
911 // This is necessary to force clicks in the world to cause edit
912 // boxes that might have keyboard focus to relinquish it, and hence
913 // cause a commit to update their value. JC
914 gFocusMgr.setKeyboardFocus(NULL);
915 return TRUE;
916 }
917 741
918 // *HACK: this should be rolled into the composite tool logic, not 742 // *HACK: this should be rolled into the composite tool logic, not
919 // hardcoded at the top level. 743 // hardcoded at the top level.
@@ -931,107 +755,27 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
931 755
932BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) 756BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
933{ 757{
934 S32 x = pos.mX; 758 BOOL down = FALSE;
935 S32 y = pos.mY; 759 return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down);
936 x = llround((F32)x / mDisplayScale.mV[VX]);
937 y = llround((F32)y / mDisplayScale.mV[VY]);
938
939 LLView::sMouseHandlerMessage.clear();
940
941 // Don't care about caps lock for mouse events.
942 if (gDebugClicks)
943 {
944 llinfos << "ViewerWindow right mouse up" << llendl;
945 }
946
947 mRightMouseDown = FALSE;
948
949 // Indicate mouse was active
950 gMouseIdleTimer.reset();
951
952 // Hide tooltips on mouseup
953 if( mToolTip )
954 {
955 mToolTip->setVisible( FALSE );
956 }
957
958 // Also hide hover info on mouseup
959 if (gHoverView) gHoverView->cancelHover();
960
961 BOOL handled = FALSE;
962
963 mWindow->releaseMouse();
964
965 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
966
967 if( tool->clipMouseWhenDown() )
968 {
969 mWindow->setMouseClipping(FALSE);
970 }
971
972 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
973 if( mouse_captor )
974 {
975 S32 local_x;
976 S32 local_y;
977 mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
978 if (LLView::sDebugMouseHandling)
979 {
980 llinfos << "Right Mouse Up handled by captor " << mouse_captor->getName() << llendl;
981 }
982 return mouse_captor->handleRightMouseUp(local_x, local_y, mask);
983 }
984
985 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
986 if (top_ctrl)
987 {
988 S32 local_x, local_y;
989 top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
990 handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleRightMouseUp(local_x, local_y, mask);
991 }
992
993 if( !handled )
994 {
995 handled = mRootView->handleRightMouseUp(x, y, mask);
996 }
997
998 if (LLView::sDebugMouseHandling)
999 {
1000 if (handled)
1001 {
1002 llinfos << "Right Mouse Up" << LLView::sMouseHandlerMessage << llendl;
1003 }
1004 else
1005 {
1006 llinfos << "Right Mouse Up not handled by view" << llendl;
1007 }
1008 }
1009
1010 if( !handled )
1011 {
1012 if (tool)
1013 {
1014 handled = tool->handleRightMouseUp(x, y, mask);
1015 }
1016 }
1017
1018 // Always handled as far as the OS is concerned.
1019 return TRUE;
1020} 760}
1021 761
1022BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) 762BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
1023{ 763{
764 BOOL down = TRUE;
1024 gVoiceClient->middleMouseState(true); 765 gVoiceClient->middleMouseState(true);
1025 766 handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
1026 // Always handled as far as the OS is concerned. 767
768 // Always handled as far as the OS is concerned.
1027 return TRUE; 769 return TRUE;
1028} 770}
1029 771
1030BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) 772BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
1031{ 773{
774 BOOL down = FALSE;
1032 gVoiceClient->middleMouseState(false); 775 gVoiceClient->middleMouseState(false);
1033 776 handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
1034 // Always handled as far as the OS is concerned. 777
778 // Always handled as far as the OS is concerned.
1035 return TRUE; 779 return TRUE;
1036} 780}
1037 781
@@ -1404,6 +1148,7 @@ LLViewerWindow::LLViewerWindow(
1404 mWindowRect(0, height, width, 0), 1148 mWindowRect(0, height, width, 0),
1405 mVirtualWindowRect(0, height, width, 0), 1149 mVirtualWindowRect(0, height, width, 0),
1406 mLeftMouseDown(FALSE), 1150 mLeftMouseDown(FALSE),
1151 mMiddleMouseDown(FALSE),
1407 mRightMouseDown(FALSE), 1152 mRightMouseDown(FALSE),
1408 mToolTip(NULL), 1153 mToolTip(NULL),
1409 mToolTipBlocked(FALSE), 1154 mToolTipBlocked(FALSE),
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h
index ab2dd4e..40368f8 100644
--- a/linden/indra/newview/llviewerwindow.h
+++ b/linden/indra/newview/llviewerwindow.h
@@ -47,6 +47,7 @@
47#include "lltimer.h" 47#include "lltimer.h"
48#include "llstat.h" 48#include "llstat.h"
49#include "llalertdialog.h" 49#include "llalertdialog.h"
50#include "llmousehandler.h"
50 51
51class LLView; 52class LLView;
52class LLViewerObject; 53class LLViewerObject;
@@ -57,7 +58,6 @@ class LLVelocityBar;
57class LLTextBox; 58class LLTextBox;
58class LLImageRaw; 59class LLImageRaw;
59class LLHUDIcon; 60class LLHUDIcon;
60class LLMouseHandler;
61 61
62#define PICK_HALF_WIDTH 5 62#define PICK_HALF_WIDTH 5
63#define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1) 63#define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1)
@@ -81,7 +81,7 @@ public:
81 81
82 static bool isFlora(LLViewerObject* object); 82 static bool isFlora(LLViewerObject* object);
83 83
84 typedef enum e_pick_type 84 typedef enum
85 { 85 {
86 PICK_OBJECT, 86 PICK_OBJECT,
87 PICK_FLORA, 87 PICK_FLORA,
@@ -150,6 +150,7 @@ public:
150 /*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask); 150 /*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask);
151 /*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level); 151 /*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
152 /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended 152 /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended
153 /*virtual*/ BOOL handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down);
153 /*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask); 154 /*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
154 /*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); 155 /*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
155 /*virtual*/ BOOL handleCloseRequest(LLWindow *window); 156 /*virtual*/ BOOL handleCloseRequest(LLWindow *window);
@@ -212,6 +213,7 @@ public:
212 LLCoordGL getCurrentMouseDelta() const { return mCurrentMouseDelta; } 213 LLCoordGL getCurrentMouseDelta() const { return mCurrentMouseDelta; }
213 LLStat * getMouseVelocityStat() { return &mMouseVelocityStat; } 214 LLStat * getMouseVelocityStat() { return &mMouseVelocityStat; }
214 BOOL getLeftMouseDown() const { return mLeftMouseDown; } 215 BOOL getLeftMouseDown() const { return mLeftMouseDown; }
216 BOOL getMiddleMouseDown() const { return mMiddleMouseDown; }
215 BOOL getRightMouseDown() const { return mRightMouseDown; } 217 BOOL getRightMouseDown() const { return mRightMouseDown; }
216 218
217 const LLPickInfo& getLastPick() const { return mLastPick; } 219 const LLPickInfo& getLastPick() const { return mLastPick; }
@@ -279,7 +281,7 @@ public:
279 281
280 // snapshot functionality. 282 // snapshot functionality.
281 // perhaps some of this should move to llfloatershapshot? -MG 283 // perhaps some of this should move to llfloatershapshot? -MG
282 typedef enum e_snapshot_type 284 typedef enum
283 { 285 {
284 SNAPSHOT_TYPE_COLOR, 286 SNAPSHOT_TYPE_COLOR,
285 SNAPSHOT_TYPE_DEPTH, 287 SNAPSHOT_TYPE_DEPTH,
@@ -397,6 +399,7 @@ protected:
397 LLCoordGL mCurrentMouseDelta; //amount mouse moved this frame 399 LLCoordGL mCurrentMouseDelta; //amount mouse moved this frame
398 LLStat mMouseVelocityStat; 400 LLStat mMouseVelocityStat;
399 BOOL mLeftMouseDown; 401 BOOL mLeftMouseDown;
402 BOOL mMiddleMouseDown;
400 BOOL mRightMouseDown; 403 BOOL mRightMouseDown;
401 404
402 LLProgressView *mProgressView; 405 LLProgressView *mProgressView;
diff --git a/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png
new file mode 100644
index 0000000..f9ea7a2
--- /dev/null
+++ b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png
Binary files differ
diff --git a/linden/indra/newview/skins/default/html/en-us/loading/loading.html b/linden/indra/newview/skins/default/html/en-us/loading/loading.html
index 1c62d2f..97174b0 100644
--- a/linden/indra/newview/skins/default/html/en-us/loading/loading.html
+++ b/linden/indra/newview/skins/default/html/en-us/loading/loading.html
@@ -2,7 +2,7 @@
2<table width="100%" height="100%" border="0"> 2<table width="100%" height="100%" border="0">
3 <tr> 3 <tr>
4 <td align="center" valign="middle" style="font-size:0.8em;"> 4 <td align="center" valign="middle" style="font-size:0.8em;">
5 <img src="sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;loading... 5 <img src="imprudence_loading.png" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;loading...
6 </td> 6 </td>
7 </tr> 7 </tr>
8</table> 8</table>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml b/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml
new file mode 100644
index 0000000..be7de86
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_animation_list.xml
@@ -0,0 +1,74 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<floater
3 name="animation list"
4 title="Animation List"
5 can_resize="true"
6 can_minimize="true"
7 can_close="true"
8 can_drag_on_left="false"
9 rect_control="FloaterAnimationListRect"
10 min_width="1000"
11 min_height="275"
12 >
13 <scroll_list
14 name="animation_list"
15 left="10"
16 right="-10"
17 top="-20"
18 bottom="100"
19 column_padding="0"
20 can_resize="true"
21 follows="left|top|bottom|right"
22 draw_heading="true"
23 multi_select="true"
24 search_column="1"
25 tool_tip="Hold shift or control while clicking to select multiple thingers"
26 >
27 <!-- Icons relating to the avatar, currently: tracking, and marked -->
28 <column name="Anim Name" label="Anim Name" width="250"/>
29 <column name="Animation UUID" label="Animation UUID" width="250"/>
30 <!--<column name="object_name" label="Distance" dynamicwidth="true"/>-->
31 <column name="Source Object UUID" label="Source Object UUID" width="250"/>
32 <column name="Source Owner" label="Source Owner" width="250"/>
33 <!-- What the avatar is doing: producing sounds, rezzing, particles, etc -->
34 </scroll_list>
35 <panel
36 name="options"
37 left="10"
38 right="-10"
39 top="90"
40 bottom="10"
41 border="true"
42 mouse_opaque="true"
43 bevel_style="in"
44 background_visible="true"
45 background_opaque="true"
46 follows="left|right|bottom"
47 bg_opaque_color="0,0,0,0.3"
48 bg_alpha_color="blue"
49 can_resize="false"
50 >
51 </panel>
52
53 <button bottom="55" follows="left|bottom" font="SansSerifSmall" halign="center"
54 height="20" label="Stop Selected" left_delta="5"
55 mouse_opaque="true" name="Stop Selected"
56 tool_tip="Stop selected animations" width="150" />
57 <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center"
58 height="20" label="Revoke Selected" left_delta="155"
59 mouse_opaque="true" name="Revoke Selected"
60 tool_tip="Revokes animation permissions for object associated with the selections" width="150" />
61 <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center"
62 height="20" label="Stop+Revoke Selected" left_delta="155"
63 mouse_opaque="true" name="Stop+Revoke Selected"
64 tool_tip="Revokes animation permissions for object(s) associated with the selections, as well as stopping the anim" width="150" />
65 <button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center"
66 height="20" label="Open Owner Profile" left_delta="155"
67 mouse_opaque="true" name="Open Owner Profile"
68 tool_tip="Opens profile of the owner(s) of object(s) associated with the selections" width="150" />
69 <button bottom_delta="-25" enabled="false" follows="left|bottom" font="SansSerifSmall" halign="center"
70 height="20" label="Return Object" left_delta="-465"
71 mouse_opaque="true" name="Return Object"
72 tool_tip="Returns object(s) selected, if you have land powers" width="150" />
73
74</floater> \ No newline at end of file
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml b/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml
new file mode 100644
index 0000000..13c6b6c
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_asset_browser.xml
@@ -0,0 +1,29 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2
3<floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="true"
4 can_resize="true" enabled="true" follows="left|bottom" height="620"
5 hidden="false" left="300" min_height="420" min_width="630"
6 mouse_opaque="true" name="asset browser" title="Asset Browser" width="720">
7
8 <inventory_panel allow_multi_select="false" border="true" bottom="-299" enabled="true"
9 follows="left|top" height="280" hidden="false" left="10"
10 mouse_opaque="true" name="inventory panel"
11 sort_order="TexturePickerSortOrder" width="231"/>
12
13 <button bottom="-350" follows="left|top" font="SansSerifSmall"
14 halign="center" height="20" hidden="false" label="Next &gt;&gt;"
15 left="160" mouse_opaque="true" name="button next" scale_image="TRUE"
16 width="80"/>
17
18 <button bottom_delta="-30" follows="left|top" font="SansSerifSmall"
19 halign="center" height="20" hidden="false" label="&lt;&lt; Previous"
20 left_delta="0" mouse_opaque="true" name="button previous" scale_image="TRUE"
21 width="80"/>
22
23 <button bottom_delta="-30" follows="left|top" font="SansSerifSmall"
24 halign="center" height="20" hidden="false" label="Refresh"
25 left_delta="0" mouse_opaque="true" name="button refresh" scale_image="TRUE"
26 width="80"/>
27
28</floater>
29
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
index d32832c..dd66a83 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="27" can_close="true" can_drag_on_left="false" can_minimize="false" 2<floater bottom="27" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" can_tear_off="true" enabled="true" height="270" left="15" 3 can_resize="true" can_tear_off="true" enabled="true" height="270" left="15"
4 min_height="150" min_width="425" mouse_opaque="true" name="chat floater" 4 min_height="150" min_width="425" mouse_opaque="true" name="chat floater"
5 rect_control="FloaterChatRect" title="Local Chat" width="435"> 5 rect_control="FloaterChatRect" title="Local Chat" width="435">
@@ -59,10 +59,14 @@
59 <panel bottom="5" follows="left|right|bottom" left="5" name="chat_panel" right="-5" 59 <panel bottom="5" follows="left|right|bottom" left="5" name="chat_panel" right="-5"
60 tab_group="1" top="25"> 60 tab_group="1" top="25">
61 <string name="gesture_label">Gestures</string> 61 <string name="gesture_label">Gestures</string>
62 <spinner bottom="-22" decimal_digits="0" follows="left|bottom" height="20"
63 increment="1.00" initial_val="0" label="Channel" label_width="50" left="0"
64 max_val="2147483647" min_val="0" mouse_opaque="true" name="channel_control"
65 width="100" tool_tip="Set the default channel for inworld chat"/>
62 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0" 66 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0"
63 enabled="true" follows="left|right|bottom" font="SansSerif" 67 enabled="true" follows="left|right|bottom" font="SansSerif"
64 handle_edit_keys_directly="false" height="20" label="Click here to chat." 68 handle_edit_keys_directly="false" height="20" label="Click here to chat."
65 left="0" max_length="254" mouse_opaque="true" name="Chat Editor" 69 left="105" max_length="254" mouse_opaque="true" name="Chat Editor"
66 right="-70" select_all_on_focus_received="false" select_on_focus="false" 70 right="-70" select_all_on_focus_received="false" select_on_focus="false"
67 tab_group="1" /> 71 tab_group="1" />
68 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65" 72 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
index 18d56b4..bc18f44 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-359" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-374" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" follows="left|top" height="550" 3 can_resize="false" follows="left|top" height="565"
4 left="308" min_height="100" min_width="100" mouse_opaque="true" 4 left="308" min_height="100" min_width="100" mouse_opaque="true"
5 name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title="" 5 name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title=""
6 short_title="Build" width="272"> 6 short_title="Build" width="272">
@@ -79,20 +79,24 @@
79 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 79 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
80 initial_value="false" label="Select Faces to Texture" left="4" mouse_opaque="true" 80 initial_value="false" label="Select Faces to Texture" left="4" mouse_opaque="true"
81 name="radio select face" radio_style="true" width="114" /> 81 name="radio select face" radio_style="true" width="114" />
82 <check_box bottom_delta="-22" control_name="SnapEnabled" follows="left|top" 82 <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top"
83 font="SansSerifSmall" height="16" initial_value="true" label="Use Grid" 83 font="SansSerifSmall" height="16" initial_value="false"
84 left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" /> 84 label="Edit linked parts" left="4" mouse_opaque="true"
85 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" 85 name="checkbox edit linked parts" width="114" />
86 height="16" label="Options..." label_selected="Options..." left_delta="75" 86 <button bottom_delta="-19" follows="left|top" font="SansSerifSmall"
87 mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> 87 halign="center" height="18" label="Link" label_selected="Link"
88 left="10" mouse_opaque="true" name="link_btn" width="68" />
89 <button bottom_delta="0" follows="left|top" font="SansSerifSmall"
90 halign="center" height="18" label="Unlink" label_selected="Unlink"
91 left_delta="75" mouse_opaque="true" name="unlink_btn" width="68" />
88 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 92 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
89 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 93 bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
90 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6" 94 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6"
91 mouse_opaque="true" name="text ruler mode" v_pad="0" width="68"> 95 mouse_opaque="true" name="text ruler mode" v_pad="0" width="68">
92 Ruler mode: 96 Ruler:
93 </text> 97 </text>
94 <combo_box allow_text_entry="false" bottom_delta="-4" follows="left|top" height="20" 98 <combo_box allow_text_entry="false" bottom_delta="-4" follows="left|top" height="20"
95 left_delta="74" max_chars="20" mouse_opaque="true" 99 left_delta="40" max_chars="20" mouse_opaque="true"
96 name="combobox grid mode" width="86"> 100 name="combobox grid mode" width="86">
97 <combo_item name="World" value="World"> 101 <combo_item name="World" value="World">
98 World 102 World
@@ -112,16 +116,13 @@
112 font="SansSerifSmall" height="16" initial_value="true" 116 font="SansSerifSmall" height="16" initial_value="true"
113 label="Stretch Textures" left_delta="0" mouse_opaque="true" 117 label="Stretch Textures" left_delta="0" mouse_opaque="true"
114 name="checkbox stretch textures" width="134" /> 118 name="checkbox stretch textures" width="134" />
115 <check_box bottom_delta="-15" control_name="EditLinkedParts" follows="left|top" 119 <check_box bottom_delta="-19" control_name="SnapEnabled" follows="left|top"
116 font="SansSerifSmall" height="16" initial_value="false" 120 font="SansSerifSmall" height="16" initial_value="true" label="Use Grid"
117 label="Edit linked parts" left="143" mouse_opaque="true" 121 left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" />
118 name="checkbox edit linked parts" width="114" /> 122 <button bottom_delta="-19" follows="left|top" font="SansSerifSmall"
119 <button bottom_delta="-18" follows="left|top" font="SansSerifSmall" 123 halign="center" valign="center"
120 halign="center" height="18" label="Link" label_selected="Link" 124 height="20" label="Options..." label_selected="Options..." left_delta="20"
121 right="-5" mouse_opaque="true" name="link_btn" width="78" /> 125 mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" />
122 <button bottom_delta="-20" follows="left|top" font="SansSerifSmall"
123 halign="center" height="18" label="Unlink" label_selected="Unlink"
124 right="-5" mouse_opaque="true" name="unlink_btn" width="78" />
125 126
126<!-- Help text --> 127<!-- Help text -->
127 128
@@ -289,18 +290,18 @@
289 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" 290 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false"
290 border_visible="false" bottom_delta="-16" drop_shadow_visible="true" enabled="true" 291 border_visible="false" bottom_delta="-16" drop_shadow_visible="true" enabled="true"
291 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" height="12" left="118" 292 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" height="12" left="118"
292 hidden="false" mouse_opaque="true" name="Brush:" v_pad="0" width="100"> 293 hidden="false" mouse_opaque="true" name="Bulldozer:" v_pad="0" width="100">
293 Brush: 294 Bulldozer:
294 </text> 295 </text>
295 296
296 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" 297 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false"
297 border_visible="false" bottom_delta="-18" drop_shadow_visible="true" enabled="true" 298 border_visible="false" bottom_delta="-18" drop_shadow_visible="true" enabled="true"
298 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" height="12" left="132" 299 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" height="12" left="132"
299 hidden="false" mouse_opaque="true" name="Brush Size:" v_pad="0" width="100"> 300 hidden="false" mouse_opaque="true" name="Dozer Size:" v_pad="0" width="100">
300 Size 301 Size
301 </text> 302 </text>
302 <volume_slider bottom_delta="-4" follows="left|top" height="16" hidden="false" 303 <volume_slider bottom_delta="-4" follows="left|top" height="16" hidden="false"
303 increment="1.0" initial_val="0.0" left="178" max_val="2.0" min_val="0.0" 304 increment="0.1" initial_val="2.0" left="178" max_val="11.0" min_val="1.0"
304 mouse_opaque="true" name="slider brush size" width="80" /> 305 mouse_opaque="true" name="slider brush size" width="80" />
305 306
306 307
@@ -312,21 +313,23 @@
312 </text> 313 </text>
313 <volume_slider bottom_delta="-4" follows="left|top" height="16" hidden="false" 314 <volume_slider bottom_delta="-4" follows="left|top" height="16" hidden="false"
314 increment="0.1" initial_val="0.00" left="178" max_val="2.0" min_val="-1.0" 315 increment="0.1" initial_val="0.00" left="178" max_val="2.0" min_val="-1.0"
315 mouse_opaque="true" name="slider force" width="80" /> 316 mouse_opaque="true" name="slider force" width="80" />
316 317 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
317 318 bottom="-168" left="118" drop_shadow_visible="true" follows="left|top"
318 <button bottom="-163" follows="left|top" font="SansSerifSmall" halign="center" 319 font="SansSerifSmall" h_pad="0" halign="right" height="16"
319 height="20" label="More &gt;&gt;" left="186" mouse_opaque="true" 320 mouse_opaque="true" name="obj_count" v_pad="0" width="143">
320 name="button more" scale_image="TRUE" tool_tip="Advanced Options" 321 Selected objects: [COUNT]
321 width="80" /> 322 </text>
322 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" 323 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
323 height="20" label="&lt;&lt; Less" left_delta="0" mouse_opaque="true" 324 bottom="-181" left="118" drop_shadow_visible="true" follows="left|top"
324 name="button less" scale_image="TRUE" tool_tip="Advanced Options" 325 font="SansSerifSmall" h_pad="0" halign="right" height="16"
325 width="80" /> 326 mouse_opaque="true" name="prim_count" v_pad="0" width="143">
327 primitives: [COUNT]
328 </text>
326 329
327<!-- Sub-tabs --> 330<!-- Sub-tabs -->
328 331
329 <tab_container bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="false" 332 <tab_container bottom="-565" follows="left|top" height="384" left="0" mouse_opaque="false"
330 name="Object Info Tabs" tab_max_width="52" tab_min_width="40" 333 name="Object Info Tabs" tab_max_width="52" tab_min_width="40"
331 tab_position="top" width="272"> 334 tab_position="top" width="272">
332 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 335 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
@@ -364,7 +367,7 @@
364 Thrax Linden 367 Thrax Linden
365 </text> 368 </text>
366 <button bottom="-66" follows="top|right" font="SansSerifSmall" halign="center" 369 <button bottom="-66" follows="top|right" font="SansSerifSmall" halign="center"
367 height="16" label="Profile..." label_selected="Profile..." left_delta="94" 370 height="20" label="Profile..." label_selected="Profile..." left_delta="94"
368 mouse_opaque="true" name="button creator profile" scale_image="TRUE" 371 mouse_opaque="true" name="button creator profile" scale_image="TRUE"
369 width="78" /> 372 width="78" />
370 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 373 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -380,32 +383,42 @@
380 Thrax Linden 383 Thrax Linden
381 </text> 384 </text>
382 <button bottom="-86" follows="top|right" font="SansSerifSmall" halign="center" 385 <button bottom="-86" follows="top|right" font="SansSerifSmall" halign="center"
383 height="16" label="Profile..." label_selected="Profile..." left_delta="94" 386 height="20" label="Profile..." label_selected="Profile..." left_delta="94"
384 mouse_opaque="true" name="button owner profile" scale_image="TRUE" 387 mouse_opaque="true" name="button owner profile" scale_image="TRUE"
385 width="78" /> 388 width="78" />
389 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
390 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
391 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
392 mouse_opaque="true" name="LastOwner:" v_pad="0" width="78">
393 Last Owner:
394 </text>
395 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
396 bottom_delta="0" drop_shadow_visible="true" follows="left|top"
397 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78"
398 mouse_opaque="true" name="Last Owner Name" v_pad="0" width="88">
399 Thrax Linden
400 </text>
401 <button bottom_delta="0" follows="top|right" font="SansSerifSmall" halign="center"
402 height="20" label="Profile..." label_selected="Profile..." left_delta="94"
403 mouse_opaque="true" name="button last owner profile" scale_image="TRUE"
404 width="78" />
386 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 405 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
387 bottom="-106" drop_shadow_visible="true" follows="left|top" 406 bottom="-126" drop_shadow_visible="true" follows="left|top"
388 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" 407 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
389 mouse_opaque="true" name="Group:" v_pad="0" width="78"> 408 mouse_opaque="true" name="Group:" v_pad="0" width="78">
390 Group: 409 Group:
391 </text> 410 </text>
392 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 411 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
393 bottom="-106" drop_shadow_visible="true" follows="left|top" 412 bottom="-126" drop_shadow_visible="true" follows="left|top"
394 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78" 413 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="78"
395 mouse_opaque="true" name="Group Name Proxy" v_pad="0" visible="false" 414 mouse_opaque="true" name="Group Name Proxy" v_pad="0" visible="false"
396 width="88"> 415 width="88">
397 The Lindens 416 The Lindens
398 </text> 417 </text>
399 <button bottom="-106" follows="top|right" font="SansSerifSmall" halign="center" 418 <button bottom="-126" follows="top|right" font="SansSerifSmall" halign="center"
400 height="16" label="Set..." label_selected="Set..." left_delta="94" 419 height="20" label="Set..." label_selected="Set..." left_delta="94"
401 mouse_opaque="true" name="button set group" scale_image="TRUE" width="78" /> 420 mouse_opaque="true" name="button set group" scale_image="TRUE" width="78" />
402 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 421 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
403 bottom="-126" drop_shadow_visible="true" follows="left|top"
404 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
405 mouse_opaque="true" name="prim info" v_pad="0" width="166">
406 1 Object, 1 Primitive
407 </text>
408 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
409 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 422 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
410 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" 423 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
411 mouse_opaque="true" name="Permissions:" v_pad="0" width="85"> 424 mouse_opaque="true" name="Permissions:" v_pad="0" width="85">
@@ -420,7 +433,7 @@
420 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 433 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
421 initial_value="false" label="Share with group" left="10" 434 initial_value="false" label="Share with group" left="10"
422 mouse_opaque="true" name="checkbox share with group" 435 mouse_opaque="true" name="checkbox share with group"
423 tool_tip="Allow group members to move, modify, copy and delete." 436 tool_tip="Allow all members of the set group to share and use your permissions for this object. You must Deed to enable role restrictions."
424 width="166" /> 437 width="166" />
425 <string name="text deed continued"> 438 <string name="text deed continued">
426 Deed... 439 Deed...
@@ -428,8 +441,8 @@
428 <string name="text deed"> 441 <string name="text deed">
429 Deed 442 Deed
430 </string> 443 </string>
431 <button bottom="-186" follows="top|right" font="SansSerifSmall" halign="center" 444 <button bottom_delta="0" follows="top|right" font="SansSerifSmall" halign="center"
432 height="16" label="Deed..." label_selected="Deed..." left_delta="172" 445 height="20" label="Deed..." label_selected="Deed..." left_delta="172"
433 mouse_opaque="true" name="button deed" scale_image="TRUE" 446 mouse_opaque="true" name="button deed" scale_image="TRUE"
434 tool_tip="Group shared objects can be deeded by a group officer." 447 tool_tip="Group shared objects can be deeded by a group officer."
435 width="78" /> 448 width="78" />
@@ -517,37 +530,37 @@
517 </combo_item> 530 </combo_item>
518 </combo_box> 531 </combo_box>
519 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 532 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
520 bottom="-135" drop_shadow_visible="true" follows="left|top" 533 bottom="-115" drop_shadow_visible="true" follows="left|top"
521 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" 534 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88"
522 mouse_opaque="true" name="B:" v_pad="0" width="174"> 535 mouse_opaque="true" name="B:" v_pad="0" width="174">
523 B: 536 B:
524 </text> 537 </text>
525 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 538 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
526 bottom="-135" drop_shadow_visible="true" follows="left|top" 539 bottom="-115" drop_shadow_visible="true" follows="left|top"
527 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" 540 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50"
528 mouse_opaque="true" name="O:" v_pad="0" width="124"> 541 mouse_opaque="true" name="O:" v_pad="0" width="124">
529 O; 542 O;
530 </text> 543 </text>
531 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 544 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
532 bottom="-135" drop_shadow_visible="true" follows="left|top" 545 bottom="-115" drop_shadow_visible="true" follows="left|top"
533 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" 546 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50"
534 mouse_opaque="true" name="G:" v_pad="0" width="74"> 547 mouse_opaque="true" name="G:" v_pad="0" width="74">
535 G: 548 G:
536 </text> 549 </text>
537 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 550 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
538 bottom="-147" drop_shadow_visible="true" follows="left|top" 551 bottom="-127" drop_shadow_visible="true" follows="left|top"
539 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88" 552 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="88"
540 mouse_opaque="true" name="E:" v_pad="0" width="174"> 553 mouse_opaque="true" name="E:" v_pad="0" width="174">
541 E: 554 E:
542 </text> 555 </text>
543 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 556 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
544 bottom="-147" drop_shadow_visible="true" follows="left|top" 557 bottom="-127" drop_shadow_visible="true" follows="left|top"
545 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" 558 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50"
546 mouse_opaque="true" name="N:" v_pad="0" width="124"> 559 mouse_opaque="true" name="N:" v_pad="0" width="124">
547 N: 560 N:
548 </text> 561 </text>
549 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 562 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
550 bottom="-147" drop_shadow_visible="true" follows="left|top" 563 bottom="-127" drop_shadow_visible="true" follows="left|top"
551 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50" 564 font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="50"
552 mouse_opaque="true" name="F:" v_pad="0" width="74"> 565 mouse_opaque="true" name="F:" v_pad="0" width="74">
553 F: 566 F:
@@ -764,12 +777,12 @@
764 Skew 777 Skew
765 </text> 778 </text>
766 <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" 779 <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16"
767 increment="5" initial_val="0" left="121" max_val="95" min_val="0" 780 increment="5" initial_val="0" left="121" max_val="95" min_val="0"
768 mouse_opaque="true" name="Scale 1" width="68" label=" " label_width="10"/> 781 mouse_opaque="true" name="Scale 1" width="68" />
769 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" 782 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16"
770 increment="0.05" initial_val="0" left_delta="73" max_val="0.95" label_width="10" 783 increment="0.05" initial_val="0" left_delta="73" max_val="0.95"
771 min_val="-0.95" mouse_opaque="true" name="Skew" width="68" label=" " /> 784 min_val="-0.95" mouse_opaque="true" name="Skew" width="68" />
772 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 785 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
773 bottom_delta="-15" drop_shadow_visible="true" follows="left|top" 786 bottom_delta="-15" drop_shadow_visible="true" follows="left|top"
774 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" 787 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121"
775 mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> 788 mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141">
@@ -888,10 +901,10 @@
888 </text> 901 </text>
889 <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" 902 <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16"
890 increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" 903 increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1"
891 mouse_opaque="true" name="Radius Offset" width="68" label=" " label_width="10" /> 904 mouse_opaque="true" name="Radius Offset" width="68" />
892 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" 905 <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16"
893 increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" 906 increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1"
894 mouse_opaque="true" name="Revolutions" width="68" label=" " label_width="10" /> 907 mouse_opaque="true" name="Revolutions" width="68" />
895 <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" 908 <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true"
896 default_image_name="Default" follows="left|top" height="141" 909 default_image_name="Default" follows="left|top" height="141"
897 label="Sculpt Texture" left="121" mouse_opaque="true" 910 label="Sculpt Texture" left="121" mouse_opaque="true"
@@ -1192,7 +1205,7 @@
1192 initial_val="1" left="112" max_val="10" min_val="0.1" mouse_opaque="true" 1205 initial_val="1" left="112" max_val="10" min_val="0.1" mouse_opaque="true"
1193 name="rptctrl" width="68" /> 1206 name="rptctrl" width="68" />
1194 <button bottom="-256" follows="left|top" font="SansSerifSmall" halign="center" 1207 <button bottom="-256" follows="left|top" font="SansSerifSmall" halign="center"
1195 height="16" label="Apply" label_selected="Apply" left_delta="78" 1208 height="20" label="Apply" label_selected="Apply" left_delta="78"
1196 mouse_opaque="true" name="button apply" scale_image="TRUE" width="75" /> 1209 mouse_opaque="true" name="button apply" scale_image="TRUE" width="75" />
1197 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 1210 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1198 bottom="-288" drop_shadow_visible="true" follows="left|top" 1211 bottom="-288" drop_shadow_visible="true" follows="left|top"
@@ -1223,10 +1236,13 @@
1223 </panel> 1236 </panel>
1224 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 1237 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
1225 label="Content" left="1" mouse_opaque="false" name="Contents" width="270"> 1238 label="Content" left="1" mouse_opaque="false" name="Contents" width="270">
1226 <button bottom="-30" follows="left|top" font="SansSerif" halign="center" height="20" 1239 <button bottom="-30" follows="left|top" font="SansSerif" halign="center" height="20"
1227 label="New Script..." label_selected="New Script..." 1240 label="New Script" label_selected="New Script..."
1228 left="10" mouse_opaque="true" name="button new script" scale_image="TRUE" 1241 left="10" mouse_opaque="true" name="button new script" scale_image="TRUE"
1229 width="130" /> 1242 width="100" />
1243 <!--<button bottom_delta="0" left_delta="110" width="100" height="20" follows="left|top"
1244 label="Permissions..." name="button permissions" font="SansSerif" halign="center"
1245 mouse_opaque="true" scale_image="TRUE" />-->
1230 <panel bottom_delta="-330" follows="left|top" height="325" left="10" 1246 <panel bottom_delta="-330" follows="left|top" height="325" left="10"
1231 mouse_opaque="true" name="ContentsInventory" width="252" /> 1247 mouse_opaque="true" name="ContentsInventory" width="252" />
1232 </panel> 1248 </panel>
@@ -1236,22 +1252,10 @@
1236 1252
1237 <panel bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="true" 1253 <panel bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="true"
1238 name="land info panel" width="272"> 1254 name="land info panel" width="272">
1255 <!-- Parcel Information -->
1239 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 1256 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1240 bottom="-40" drop_shadow_visible="true" follows="left|top" 1257 bottom="-40" drop_shadow_visible="true" follows="left|top"
1241 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40" 1258 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40"
1242 mouse_opaque="true" name="label_parcel_modify" v_pad="0" width="150">
1243 Modify Parcel
1244 </text>
1245 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
1246 height="20" label="Subdivide..." label_selected="Subdivide..." left="48"
1247 mouse_opaque="true" name="button subdivide land" scale_image="TRUE"
1248 width="112" />
1249 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
1250 height="20" label="Join..." label_selected="Join..." left="48"
1251 mouse_opaque="true" name="button join land" scale_image="TRUE" width="112" />
1252 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1253 bottom_delta="-56" drop_shadow_visible="true" follows="left|top"
1254 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40"
1255 mouse_opaque="true" name="label_parcel_info" v_pad="0" width="150"> 1259 mouse_opaque="true" name="label_parcel_info" v_pad="0" width="150">
1256 Parcel Information 1260 Parcel Information
1257 </text> 1261 </text>
@@ -1271,12 +1275,27 @@
1271 height="20" label="About Land..." label_selected="About Land..." left="48" 1275 height="20" label="About Land..." label_selected="About Land..." left="48"
1272 mouse_opaque="true" name="button about land" scale_image="TRUE" width="112" /> 1276 mouse_opaque="true" name="button about land" scale_image="TRUE" width="112" />
1273 <check_box bottom_delta="-24" control_name="ShowParcelOwners" follows="left|top" 1277 <check_box bottom_delta="-24" control_name="ShowParcelOwners" follows="left|top"
1274 tool_tip="Colour parcels according to their status" font="SansSerifSmall" 1278 tool_tip="Colour parcels according to their ownership" font="SansSerifSmall"
1275 height="16" initial_value="false" label="Show Status" left="48" 1279 height="16" initial_value="false" label="Show owners" left="48"
1276 mouse_opaque="true" name="checkbox show owners" width="100" /> 1280 mouse_opaque="true" name="checkbox show owners" width="100" />
1277 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 1281 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
1278 height="18" label="?" label_selected="?" left_delta="94" 1282 height="18" label="?" label_selected="?" left_delta="94"
1279 mouse_opaque="true" name="button show owners help" width="18" /> 1283 mouse_opaque="true" name="button show owners help" width="18" />
1284 <!-- Modify Parcel -->
1285 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1286 bottom_delta="-56" drop_shadow_visible="true" follows="left|top"
1287 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40"
1288 mouse_opaque="true" name="label_parcel_modify" v_pad="0" width="150">
1289 Modify Parcel
1290 </text>
1291 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
1292 height="20" label="Subdivide..." label_selected="Subdivide..." left="48"
1293 mouse_opaque="true" name="button subdivide land" scale_image="TRUE"
1294 width="112" />
1295 <button bottom_delta="-24" follows="left|top" font="SansSerif" halign="center"
1296 height="20" label="Join..." label_selected="Join..." left="48"
1297 mouse_opaque="true" name="button join land" scale_image="TRUE" width="112" />
1298 <!-- Land Transactions -->
1280 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 1299 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
1281 bottom_delta="-56" drop_shadow_visible="true" follows="left|top" 1300 bottom_delta="-56" drop_shadow_visible="true" follows="left|top"
1282 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40" 1301 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="40"
@@ -1307,10 +1326,10 @@
1307 Click and drag to change view 1326 Click and drag to change view
1308 </string> 1327 </string>
1309 <string name="status_grab"> 1328 <string name="status_grab">
1310 Drag to move objects, Ctrl to lift, Ctrl-Shift to spin 1329 Drag to move, Ctrl to lift, Ctrl-Shift to rotate
1311 </string> 1330 </string>
1312 <string name="status_place"> 1331 <string name="status_place">
1313 Click in the world to create, shift-click to select 1332 Click inworld to build
1314 </string> 1333 </string>
1315 <string name="status_selectland"> 1334 <string name="status_selectland">
1316 Click and drag to select land 1335 Click and drag to select land
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml
index ac3d359..15cdc9e 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml
@@ -44,7 +44,11 @@
44 <on_enable function="Object.EnableReturn" /> 44 <on_enable function="Object.EnableReturn" />
45 </menu_item_call> 45 </menu_item_call>
46 <pie_menu label="More &gt;" name="Rate Menu"> 46 <pie_menu label="More &gt;" name="Rate Menu">
47 <menu_item_separator /> 47 <menu_item_call label="Backup" enabled="false" hidden="false"
48 mouse_opaqu="true" name="Export">
49 <on_click function="Object.Export" />
50 <on_enable function="Object.EnableExport" />
51 </menu_item_call>
48 <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute"> 52 <menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute">
49 <on_click function="Object.Mute" /> 53 <on_click function="Object.Mute" />
50 <on_enable function="Object.EnableMute" /> 54 <on_enable function="Object.EnableMute" />
@@ -54,10 +58,8 @@
54 <on_click function="Object.ReportAbuse" /> 58 <on_click function="Object.ReportAbuse" />
55 <on_enable function="Object.EnableReportAbuse" /> 59 <on_enable function="Object.EnableReportAbuse" />
56 </menu_item_call> 60 </menu_item_call>
57 <menu_item_call label="Backup" enabled="false" hidden="false" 61 <menu_item_call enabled="false" label="Go Here" mouse_opaque="true" name="Go Here">
58 mouse_opaqu="true" name="Export"> 62 <on_click function="GoToObject" />
59 <on_click function="Object.Export" />
60 <on_enable function="Object.EnableExport" />
61 </menu_item_call> 63 </menu_item_call>
62 <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect"> 64 <menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect">
63 <on_click function="Object.Inspect" /> 65 <on_click function="Object.Inspect" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index 3681b62..81c49e7 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -892,6 +892,25 @@
892 userdata="QuietSnapshotsToDisk" /> 892 userdata="QuietSnapshotsToDisk" />
893 <on_check control="QuietSnapshotsToDisk" /> 893 <on_check control="QuietSnapshotsToDisk" />
894 </menu_item_check> 894 </menu_item_check>
895 <menu_item_call label="Ground Sit" name="Ground Sit"
896 shortcut="control|alt|s">
897 <on_click function="Advanced.ToggleSit" userdata="" />
898 <on_Check function="Advanced.CheckSit" userdata="" />
899 </menu_item_call>
900 <menu_item_check label="Phantom Avatar" name="Phantom"
901 shortcut="control|alt|p">
902 <on_click function="Advanced.TogglePhantom" userdata="" />
903 <on_check function="Advanced.CheckPhantom" userdata="" />
904 </menu_item_check>
905 <menu_item_check label="Animation List" name="Animation List">
906 <on_click function="ShowFloater" userdata="animation list" />
907 <on_check function="FloaterVisible" userdata="animation list" />
908 </menu_item_check>
909 <menu_item_check label="Asset Browser" name="asset browser"
910 shortcut="alt|shift|a">
911 <on_click function="Advanced.ToggleAssetBrowser" userdata="" />
912 <on_check function="Advanced.CheckAssetBrowser" userdata="" />
913 </menu_item_check>
895 <menu_item_check name="Show Mouselook Crosshairs" 914 <menu_item_check name="Show Mouselook Crosshairs"
896 label="Show Mouselook Crosshairs"> 915 label="Show Mouselook Crosshairs">
897 <on_click function="ToggleControl" 916 <on_click function="ToggleControl"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
index 464ecac..ac3a74a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
@@ -8,13 +8,17 @@
8 <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="20" 8 <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="20"
9 label="Local Chat" left="7" name="History" 9 label="Local Chat" left="7" name="History"
10 tool_tip="Click here to see what has been said" width="93" /> 10 tool_tip="Click here to see what has been said" width="93" />
11 <spinner bottom="-24" decimal_digits="0" follows="left|bottom" height="20"
12 increment="1.00" initial_val="0" label="Channel" label_width="50" left="107"
13 max_val="2147483647" min_val="0" mouse_opaque="true" name="channel_control"
14 width="100" tool_tip="Set the default channel for inworld chat"/>
11 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23" 15 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23"
12 follows="left|right|bottom" font="SansSerif" 16 follows="left|right|bottom" font="SansSerif"
13 handle_edit_keys_directly="false" height="20" label="Click here to chat." 17 handle_edit_keys_directly="false" height="20" label="Click here to chat."
14 left="107" max_length="254" name="Chat Editor" 18 left="212" max_length="254" name="Chat Editor"
15 select_all_on_focus_received="false" select_on_focus="false" tab_group="1" 19 select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
16 tool_tip="Press Enter to say, Ctrl-Enter to shout." width="105" /> 20 tool_tip="Press Enter to say, Ctrl-Enter to shout." width="5" />
17 <flyout_button bottom="-23" follows="right|bottom" height="20" label="Say" left_delta="109" 21 <flyout_button bottom="-23" follows="right|bottom" height="20" label="Say" left_delta="4"
18 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" 22 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)"
19 width="80"> 23 width="80">
20 <flyout_button_item value="shout" name="shout_item"> 24 <flyout_button_item value="shout" name="shout_item">
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml
index 24753d1..b0384cf 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml
@@ -131,30 +131,34 @@
131 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 131 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
132 label="Close chat bar after hitting return" left="148" mouse_opaque="true" 132 label="Close chat bar after hitting return" left="148" mouse_opaque="true"
133 name="close_chat_on_return_check" radio_style="false" width="237" /> 133 name="close_chat_on_return_check" radio_style="false" width="237" />
134 <check_box bottom_delta="-20" enabled="true" 134 <check_box bottom_delta="-18" enabled="true"
135 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 135 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
136 label="Arrow keys always move avatar when chatting" left="148" 136 label="Arrow keys always move avatar when chatting" left="148"
137 mouse_opaque="true" name="arrow_keys_move_avatar_check" radio_style="false" 137 mouse_opaque="true" name="arrow_keys_move_avatar_check" radio_style="false"
138 width="237" /> 138 width="237" />
139 <check_box bottom_delta="-20" enabled="true" 139 <check_box bottom_delta="-18" enabled="true"
140 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 140 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
141 label="Show timestamps in Local Chat" left="148" mouse_opaque="true" 141 label="Show timestamps in Local Chat" left="148" mouse_opaque="true"
142 name="show_timestamps_check" radio_style="false" width="237" /> 142 name="show_timestamps_check" radio_style="false" width="237" />
143 <check_box bottom_delta="-20" enabled="true" 143 <check_box bottom_delta="-18" enabled="true"
144 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 144 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
145 label="Play typing animation when chatting" left="148" mouse_opaque="true" 145 label="Play typing animation when chatting" left="148" mouse_opaque="true"
146 name="play_typing_animation" radio_style="false" width="237" /> 146 name="play_typing_animation" radio_style="false" width="237" />
147 <check_box bottom_delta="-18" enabled="true" follows="left|top"
148 font="SansSerifSmall" height="16" initial_value="false"
149 label="Show custom chat channel" left="148" mouse_opaque="true"
150 name="toggle_channel_control" radio_style="false" width="237" />
147 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 151 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
148 bottom="-369" drop_shadow_visible="true" enabled="true" follows="left|top" 152 bottom="-379" drop_shadow_visible="true" enabled="true" follows="left|top"
149 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" 153 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12"
150 mouse_opaque="false" name="text_box7" v_pad="0" width="128"> 154 mouse_opaque="false" name="text_box7" v_pad="0" width="128">
151 Bubble Chat: 155 Bubble Chat:
152 </text> 156 </text>
153 <check_box bottom="-376" control_name="UseChatBubbles" enabled="true" follows="left|top" 157 <check_box bottom="-386" control_name="UseChatBubbles" enabled="true" follows="left|top"
154 font="SansSerifSmall" height="16" initial_value="false" 158 font="SansSerifSmall" height="16" initial_value="false"
155 label="Show chat bubbles" left="148" mouse_opaque="true" 159 label="Show chat bubbles" left="148" mouse_opaque="true"
156 name="bubble_text_chat" radio_style="false" width="237" /> 160 name="bubble_text_chat" radio_style="false" width="237" />
157 <slider bottom="-392" can_edit_text="false" control_name="ChatBubbleOpacity" 161 <slider bottom="-402" can_edit_text="false" control_name="ChatBubbleOpacity"
158 decimal_digits="3" enabled="true" follows="left|top" height="12" 162 decimal_digits="3" enabled="true" follows="left|top" height="12"
159 increment="0.05" initial_val="1" label="Opacity" left="148" max_val="1" 163 increment="0.05" initial_val="1" label="Opacity" left="148" max_val="1"
160 min_val="0" mouse_opaque="true" name="bubble_chat_opacity" show_text="true" 164 min_val="0" mouse_opaque="true" name="bubble_chat_opacity" show_text="true"