aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:45:16 -0500
committerJacek Antonelli2008-08-15 23:45:16 -0500
commit3f27ba891ac4d032753b219b4b96d1ffbc9fb488 (patch)
tree504932ee91a0356fba7ea48798887c96867e492f /linden/indra/newview
parentSecond Life viewer sources 1.18.4.3 (diff)
downloadmeta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.zip
meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.gz
meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.bz2
meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.xz
Second Life viewer sources 1.18.5.0-RC
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/Info-SecondLife.plist2
-rw-r--r--linden/indra/newview/files.lst7
-rw-r--r--linden/indra/newview/licenses-win32.txt39
-rw-r--r--linden/indra/newview/llagent.cpp37
-rw-r--r--linden/indra/newview/llagent.h6
-rw-r--r--linden/indra/newview/llclassifiedstatsresponder.cpp70
-rw-r--r--linden/indra/newview/llclassifiedstatsresponder.h41
-rw-r--r--linden/indra/newview/llconsole.cpp7
-rw-r--r--linden/indra/newview/llcontroldef.cpp31
-rw-r--r--linden/indra/newview/llfloateravatarinfo.cpp150
-rw-r--r--linden/indra/newview/llfloateravatarinfo.h13
-rw-r--r--linden/indra/newview/llfloaterchat.cpp17
-rw-r--r--linden/indra/newview/llfloaterclassified.cpp131
-rw-r--r--linden/indra/newview/llfloaterclassified.h54
-rw-r--r--linden/indra/newview/llfloaterclothing.cpp2
-rw-r--r--linden/indra/newview/llfloatercustomize.cpp12
-rw-r--r--linden/indra/newview/llfloaterdirectory.cpp134
-rw-r--r--linden/indra/newview/llfloaterdirectory.h60
-rw-r--r--linden/indra/newview/llfloaterevent.cpp120
-rw-r--r--linden/indra/newview/llfloaterevent.h52
-rw-r--r--linden/indra/newview/llfloatergroupinfo.cpp13
-rw-r--r--linden/indra/newview/llfloaterhtml.cpp21
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.cpp23
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.h2
-rw-r--r--linden/indra/newview/llfloaterland.cpp7
-rw-r--r--linden/indra/newview/llfloaterland.h6
-rw-r--r--linden/indra/newview/llfloaterlandmark.cpp471
-rw-r--r--linden/indra/newview/llfloaterlandmark.h107
-rw-r--r--linden/indra/newview/llfloatermap.cpp2
-rw-r--r--linden/indra/newview/llfloatermap.h5
-rw-r--r--linden/indra/newview/llfloaterparcel.cpp133
-rw-r--r--linden/indra/newview/llfloaterparcel.h53
-rw-r--r--linden/indra/newview/llfloaterpostcard.cpp2
-rw-r--r--linden/indra/newview/llfloaterpreference.cpp42
-rw-r--r--linden/indra/newview/llfloaterpreference.h4
-rw-r--r--linden/indra/newview/llfloaterurldisplay.cpp84
-rw-r--r--linden/indra/newview/llfloaterurldisplay.h61
-rw-r--r--linden/indra/newview/llfloaterworldmap.cpp8
-rw-r--r--linden/indra/newview/llfloaterworldmap.h8
-rw-r--r--linden/indra/newview/llfolderview.cpp2
-rw-r--r--linden/indra/newview/llgivemoney.cpp8
-rw-r--r--linden/indra/newview/llimpanel.cpp108
-rw-r--r--linden/indra/newview/llimpanel.h17
-rw-r--r--linden/indra/newview/llimview.cpp78
-rw-r--r--linden/indra/newview/llimview.h9
-rw-r--r--linden/indra/newview/llinventorybridge.cpp37
-rw-r--r--linden/indra/newview/lllcd.cpp703
-rw-r--r--linden/indra/newview/lllcd.h110
-rw-r--r--linden/indra/newview/lloverlaybar.cpp7
-rw-r--r--linden/indra/newview/lloverlaybar.h4
-rw-r--r--linden/indra/newview/llpanelLCD.cpp131
-rw-r--r--linden/indra/newview/llpanelLCD.h62
-rw-r--r--linden/indra/newview/llpanelclassified.cpp49
-rw-r--r--linden/indra/newview/llpanelclassified.h4
-rw-r--r--linden/indra/newview/llpaneldirbrowser.cpp99
-rw-r--r--linden/indra/newview/llpaneldirbrowser.h13
-rw-r--r--linden/indra/newview/llpaneldirclassified.cpp4
-rw-r--r--linden/indra/newview/llpaneldirevents.cpp4
-rw-r--r--linden/indra/newview/llpaneldirfind.cpp361
-rw-r--r--linden/indra/newview/llpaneldirfind.h22
-rw-r--r--linden/indra/newview/llpaneldirgroups.cpp4
-rw-r--r--linden/indra/newview/llpaneldirland.cpp4
-rw-r--r--linden/indra/newview/llpaneldirplaces.cpp4
-rw-r--r--linden/indra/newview/llpaneldirpopular.cpp4
-rw-r--r--linden/indra/newview/llpanelevent.cpp1
-rw-r--r--linden/indra/newview/llpanelgeneral.cpp4
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.cpp6
-rw-r--r--linden/indra/newview/llpanelplace.cpp167
-rw-r--r--linden/indra/newview/llpanelplace.h30
-rw-r--r--linden/indra/newview/llpreviewlandmark.cpp103
-rw-r--r--linden/indra/newview/llpreviewlandmark.h8
-rw-r--r--linden/indra/newview/llremoteparcelrequest.cpp66
-rw-r--r--linden/indra/newview/llremoteparcelrequest.h41
-rw-r--r--linden/indra/newview/llstartup.cpp62
-rw-r--r--linden/indra/newview/llstatusbar.cpp158
-rw-r--r--linden/indra/newview/llstatusbar.h40
-rw-r--r--linden/indra/newview/lltoolpie.cpp2
-rw-r--r--linden/indra/newview/llurldispatcher.cpp128
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp1
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp4
-rw-r--r--linden/indra/newview/llviewermenu.cpp213
-rw-r--r--linden/indra/newview/llviewerparcelmgr.cpp2
-rw-r--r--linden/indra/newview/llviewerparcelmgr.h1
-rw-r--r--linden/indra/newview/llviewerregion.cpp40
-rw-r--r--linden/indra/newview/llviewerregion.h3
-rw-r--r--linden/indra/newview/llviewerstats.cpp6
-rw-r--r--linden/indra/newview/llviewerstats.h3
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp51
-rw-r--r--linden/indra/newview/llviewertexteditor.h3
-rw-r--r--linden/indra/newview/llviewerwindow.cpp14
-rw-r--r--linden/indra/newview/llvoavatar.cpp11
-rw-r--r--linden/indra/newview/llvoavatar.h1
-rw-r--r--linden/indra/newview/llvoiceclient.cpp6
-rw-r--r--linden/indra/newview/llweb.cpp2
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp61
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h8
-rw-r--r--linden/indra/newview/llworldmap.cpp34
-rw-r--r--linden/indra/newview/llworldmap.h12
-rw-r--r--linden/indra/newview/llworldmapview.cpp4
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj52
-rw-r--r--linden/indra/newview/newview.vcproj80
-rw-r--r--linden/indra/newview/newview_vc8.vcproj68
-rw-r--r--linden/indra/newview/releasenotes.txt13
-rw-r--r--linden/indra/newview/res/newViewRes.rc9
-rw-r--r--linden/indra/newview/res/resource.h3
-rw-r--r--linden/indra/newview/skins/textures/textures.xml1
-rw-r--r--linden/indra/newview/skins/xui/en-us/LCD_text.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml19
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_about.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_about_land.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_directory.xml252
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_html_help.xml24
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_landmark_ctrl.xml40
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_classified.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_event.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_existing_landmark.xml30
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_url.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_tools.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_inventory.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_slurl.xml17
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_viewer.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/notify.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_general.xml12
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_place.xml64
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_place_small.xml62
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_LCD.xml70
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_general.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_status_bar.xml57
-rw-r--r--linden/indra/newview/viewer.cpp51
-rw-r--r--linden/indra/newview/viewer.h10
133 files changed, 5288 insertions, 912 deletions
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index 8929cb4..794fe0d 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Second Life"; 3CFBundleName = "Second Life";
4CFBundleShortVersionString = "Second Life version 1.18.4.3"; 4CFBundleShortVersionString = "Second Life version 1.18.5.0";
5CFBundleGetInfoString = "Second Life version 1.18.4.3, Copyright 2004-2007 Linden Research, Inc."; 5CFBundleGetInfoString = "Second Life version 1.18.5.0, Copyright 2004-2007 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index 0778494..ec08e21 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
32 </dict> 32 </dict>
33 </array> 33 </array>
34 <key>CFBundleVersion</key> 34 <key>CFBundleVersion</key>
35 <string>1.18.4.3</string> 35 <string>1.18.5.0</string>
36 <key>CSResourcesFileMapped</key> 36 <key>CSResourcesFileMapped</key>
37 <true/> 37 <true/>
38</dict> 38</dict>
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index 979ad7a..fe864a3 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -88,6 +88,7 @@ newview/llfloaterinspect.cpp
88newview/llfloaterlagmeter.cpp 88newview/llfloaterlagmeter.cpp
89newview/llfloaterland.cpp 89newview/llfloaterland.cpp
90newview/llfloaterlandholdings.cpp 90newview/llfloaterlandholdings.cpp
91newview/llfloaterlandmark.cpp
91newview/llfloatermap.cpp 92newview/llfloatermap.cpp
92newview/llfloatermute.cpp 93newview/llfloatermute.cpp
93newview/llfloaternamedesc.cpp 94newview/llfloaternamedesc.cpp
@@ -341,3 +342,9 @@ newview/moviemaker.cpp
341newview/noise.cpp 342newview/noise.cpp
342newview/pipeline.cpp 343newview/pipeline.cpp
343newview/viewer.cpp 344newview/viewer.cpp
345newview/llremoteparcelrequest.cpp
346newview/llfloaterurldisplay.cpp
347newview/llfloaterevent.cpp
348newview/llfloaterclassified.cpp
349newview/llfloaterparcel.cpp
350newview/llclassifiedstatsresponder.cpp
diff --git a/linden/indra/newview/licenses-win32.txt b/linden/indra/newview/licenses-win32.txt
index e87d244..3d9ef9b 100644
--- a/linden/indra/newview/licenses-win32.txt
+++ b/linden/indra/newview/licenses-win32.txt
@@ -1,4 +1,43 @@
1=========== 1===========
2Logitech License
3===========
4
5End-User License Agreement for Logitech LCD SDK
6
7This End-User License Agreement for Logitech LCD SDK ( “Agreement”) is a legal agreement between you, either an individual or legal entity (“You” or “you”) and Logitech Inc. (“Logitech”) for use of the Logitech LCD software development kit, which includes computer software and related media and documentation (hereinafter “LCD SDK”). By using this LCD SDK, you are agreeing to be bound by the terms and conditions of this Agreement. If you do not agree to the terms and conditions of this Agreement, promptly return the LCD SDK and other items that are part of this product in their original package with your sales receipt to your point of purchase for a full refund, or if you have downloaded this software from a Logitech web site, then you must stop using the software and destroy any copies of the software in your possession or control.
8
91 Grant of License and Restrictions.
10This Agreement grants You the following rights provided that You comply with all terms and conditions of this Agreement.
11(a) Logitech grants You a limited, non-exclusive, nontransferable license to install and use an unlimited number of copies of the LCD SDK on computers . All other rights are reserved to Logitech.
12(b) You shall not reverse engineer, decompile or disassemble any portion of the LCD SDK, except and only to the extent that this limitation is expressly prohibited by applicable law.
13(c) At your option, you may provide reasonable feedback to Logitech, including but not limited to usability, bug reports and test results, with respect to the LCD SDK. All bug reports, test results and other feedback provided to Logitech by You shall be the property of Logitech and may be used by Logitech for any purpose.
14(d) In the event Logitech, in its sole discretion, elects to provide copies of the LCD SDK to more than one individual employed by You (if You are not a single individual), each such individual shall be entitled to exercise the rights granted in this Agreement and shall be bound by the terms and conditions herein.
15
162 Updates.
17Logitech is not obligated to provide technical support or updates to You for the LCD SDK provided to You pursuant to this Agreement. However, Logitech may, in its sole discretion, provide further pre-release versions, technical support, updates and/or supplements (“Updates”) to You, in which case such Updates shall be deemed to be included in the “LCD SDK” and shall be governed by this Agreement, unless other terms of use are provided in writing by Logitech with such Updates.
18
193 Intellectual Property Rights.
20The LCD SDK is licensed, not sold, to You for use only under the terms and conditions of this Agreement. Logitech and its suppliers retain title to the LCD SDK and all intellectual property rights therein. The LCD SDK is protected by intellectual property laws and international treaties, including U.S. copyright law and international copyright treaties. All rights not expressly granted by Logitech are reserved.
21
224 Disclaimer of Warranty.
23TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, LOGITECH AND ITS SUPPLIERS PROVIDE THE LCD SDK AND OTHER LOGITECH PRODUCTS AND SERVICES (IF ANY) AS IS AND WITHOUT WARRANTY OF ANY KIND. LOGITECH AND ITS SUPPLIERS EXPRESSLY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD-PARTY RIGHTS WITH RESPECT TO THE LCD SDK AND ANY WARRANTIES OF NON-INTERFERENCE OR ACCURACY OF INFORMATIONAL CONTENT. NO LOGITECH DEALER, AGENT, OR EMPLOYEE IS AUTHORIZED TO MAKE ANY MODIFICATION, EXTENSION, OR ADDITION TO THIS WARRANTY. Some jurisdictions do not allow limitations on how long an implied warranty lasts, so the above limitation may not apply to you.
24
255 Limitation of Liability.
26IN NO EVENT WILL LOGITECH OR ITS SUPPLIERS BE LIABLE FOR ANY COSTS OF PROCUREMENT OF SUBSTITUTE PRODUCTS OR SERVICES, LOST PROFITS, LOSS OF INFORMATION OR DATA, OR ANY OTHER SPECIAL, INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING IN ANY WAY OUT OF THE SALE OF, USE OF, OR INABILITY TO USE THE LCD SDK OR ANY LOGITECH PRODUCT OR SERVICE, EVEN IF LOGITECH HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO CASE SHALL LOGITECH'S AND ITS SUPPLIERS’ TOTAL LIABILITY EXCEED THE ACTUAL MONEY PAID FOR THE LOGITECH PRODUCT OR SERVICE GIVING RISE TO THE LIABILITY. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you. The above limitations will not apply in case of personal injury where and to the extent that applicable law requires such liability.
27
286 U.S. Government Rights.
29Use, duplication, or disclosure of the software contained in the LCD SDK by the U.S. Government is subject to restrictions set forth in this Agreement and as provided in DFARS 227.7202-1(a) and 227.7202-3(a) (1995), DFARS 252.227-7013(c)(1)(ii) (OCT 1988) FAR 12.212(a) (1995), FAR 52.227-19, or FAR 52.227-14 (ALT III), as applicable. Logitech Inc. 6505 Kaiser Drive, Fremont, CA 94555.
30
317 Export Law Assurances.
32You agree and certify that neither the LCD SDK nor any other technical data received from Logitech will be exported outside the United States except as authorized and as permitted by the laws and regulations of the United States. If you have rightfully obtained the LCD SDK outside of the United States, you agree that you will not re-export the LCD SDK nor any other technical data received from Logitech, except as permitted by the laws and regulations of the United States and the laws and regulations of the jurisdiction in which you obtained the LCD SDK.
33
348 Termination:
35This Agreement is effective until terminated. Upon any violation of any of the provisions of this Agreement, rights to use the LCD SDK shall automatically terminate and the LCD SDK must be returned to Logitech or all copies of the LCD SDK destroyed. You may also terminate this Agreement at any time by destroying all copies of the LCD SDK in your possession or control. If Logitech makes a request via public announcement or press release to stop using the copies of the LCD SDK, you will comply immediately with this request. The provisions of paragraphs 3, 7, 8 and 12 will survive any termination of this Agreement.
36
379 General Terms and Conditions.
38If You are an individual signing this Agreement on behalf of a company, then You represent that You have authority to execute this Agreement on behalf of such company. This Agreement will be governed by and construed in accordance with the laws of the United States and the State of California, without regard to or application of its choice of law rules or principles. If for any reason a court of competent jurisdiction finds any provision of this Agreement, or portion thereof, to be unenforceable, that provision of the Agreement shall be enforced to the maximum extent permissible so as to affect the intent of the parties, and the remainder of this Agreement shall continue in full force and effect. This Agreement constitutes the entire agreement between You and Logitech respect to the use of the LCD SDK and supersedes all prior or contemporaneous understandings, communications or agreements, written or oral, regarding such subject matter.
39
40===========
2APR License 41APR License
3=========== 42===========
4 43
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 42fc27d..8b49d54 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -903,6 +903,7 @@ BOOL LLAgent::canManageEstate() const
903{ 903{
904 return mRegionp && mRegionp->canManageEstate(); 904 return mRegionp && mRegionp->canManageEstate();
905} 905}
906
906//----------------------------------------------------------------------------- 907//-----------------------------------------------------------------------------
907// sendMessage() 908// sendMessage()
908//----------------------------------------------------------------------------- 909//-----------------------------------------------------------------------------
@@ -2934,6 +2935,7 @@ void LLAgent::endAnimationUpdateUI()
2934 // Don't let this be called more than once if the camera 2935 // Don't let this be called more than once if the camera
2935 // mode hasn't changed. --JC 2936 // mode hasn't changed. --JC
2936 mLastCameraMode = mCameraMode; 2937 mLastCameraMode = mCameraMode;
2938
2937} 2939}
2938 2940
2939 2941
@@ -4194,15 +4196,22 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL animate)
4194 if (animate && !mAvatarObject.isNull()) 4196 if (animate && !mAvatarObject.isNull())
4195 { 4197 {
4196 sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); 4198 sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
4199 mAvatarObject->startMotion(ANIM_AGENT_CUSTOMIZE);
4197 LLMotion* turn_motion = mAvatarObject->findMotion(ANIM_AGENT_CUSTOMIZE); 4200 LLMotion* turn_motion = mAvatarObject->findMotion(ANIM_AGENT_CUSTOMIZE);
4201
4198 if (turn_motion) 4202 if (turn_motion)
4199 { 4203 {
4200 mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP; 4204 mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
4205
4201 } 4206 }
4202 else 4207 else
4203 { 4208 {
4204 mAnimationDuration = gSavedSettings.getF32("ZoomTime"); 4209 mAnimationDuration = gSavedSettings.getF32("ZoomTime");
4205 } 4210 }
4211
4212
4213
4214
4206 gAgent.setFocusGlobal(LLVector3d::zero); 4215 gAgent.setFocusGlobal(LLVector3d::zero);
4207 } 4216 }
4208 else 4217 else
@@ -4709,6 +4718,22 @@ U8 LLAgent::getGodLevel() const
4709#endif 4718#endif
4710} 4719}
4711 4720
4721bool LLAgent::isTeen() const
4722{
4723 return mAccess < SIM_ACCESS_MATURE;
4724}
4725
4726void LLAgent::setTeen(bool teen)
4727{
4728 if (teen)
4729 {
4730 mAccess = SIM_ACCESS_PG;
4731 }
4732 else
4733 {
4734 mAccess = SIM_ACCESS_MATURE;
4735 }
4736}
4712 4737
4713void LLAgent::buildFullname(std::string& name) const 4738void LLAgent::buildFullname(std::string& name) const
4714{ 4739{
@@ -5627,7 +5652,7 @@ void LLAgent::teleportRequest(
5627} 5652}
5628 5653
5629// Landmark ID = LLUUID::null means teleport home 5654// Landmark ID = LLUUID::null means teleport home
5630void LLAgent::teleportViaLandmark(const LLUUID& landmark_id) 5655void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
5631{ 5656{
5632 LLViewerRegion *regionp = getRegion(); 5657 LLViewerRegion *regionp = getRegion();
5633 if(regionp && teleportCore()) 5658 if(regionp && teleportCore())
@@ -5637,7 +5662,7 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_id)
5637 msg->nextBlockFast(_PREHASH_Info); 5662 msg->nextBlockFast(_PREHASH_Info);
5638 msg->addUUIDFast(_PREHASH_AgentID, getID()); 5663 msg->addUUIDFast(_PREHASH_AgentID, getID());
5639 msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); 5664 msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
5640 msg->addUUIDFast(_PREHASH_LandmarkID, landmark_id); 5665 msg->addUUIDFast(_PREHASH_LandmarkID, landmark_asset_id);
5641 sendReliableMessage(); 5666 sendReliableMessage();
5642 } 5667 }
5643} 5668}
@@ -6850,7 +6875,7 @@ void LLAgent::removeWearable( EWearableType type )
6850{ 6875{
6851 LLWearable* old_wearable = mWearableEntry[ type ].mWearable; 6876 LLWearable* old_wearable = mWearableEntry[ type ].mWearable;
6852 6877
6853 if ( (gAgent.mAccess < SIM_ACCESS_MATURE) 6878 if ( (gAgent.isTeen())
6854 && (type == WT_UNDERSHIRT || type == WT_UNDERPANTS)) 6879 && (type == WT_UNDERSHIRT || type == WT_UNDERPANTS))
6855 { 6880 {
6856 // Can't take off underclothing in simple UI mode or on PG accounts 6881 // Can't take off underclothing in simple UI mode or on PG accounts
@@ -6985,8 +7010,8 @@ void LLAgent::setWearableOutfit(
6985 wearables_to_remove[WT_SOCKS] = remove; 7010 wearables_to_remove[WT_SOCKS] = remove;
6986 wearables_to_remove[WT_JACKET] = remove; 7011 wearables_to_remove[WT_JACKET] = remove;
6987 wearables_to_remove[WT_GLOVES] = remove; 7012 wearables_to_remove[WT_GLOVES] = remove;
6988 wearables_to_remove[WT_UNDERSHIRT] = (gAgent.mAccess >= SIM_ACCESS_MATURE) & remove; 7013 wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) & remove;
6989 wearables_to_remove[WT_UNDERPANTS] = (gAgent.mAccess >= SIM_ACCESS_MATURE) & remove; 7014 wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) & remove;
6990 wearables_to_remove[WT_SKIRT] = remove; 7015 wearables_to_remove[WT_SKIRT] = remove;
6991 7016
6992 S32 count = wearables.count(); 7017 S32 count = wearables.count();
@@ -7224,7 +7249,7 @@ void LLAgent::userRemoveWearable( void* userdata )
7224 EWearableType type = (EWearableType)(intptr_t)userdata; 7249 EWearableType type = (EWearableType)(intptr_t)userdata;
7225 7250
7226 if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&& 7251 if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&&
7227 //!((gAgent.mAccess >= SIM_ACCESS_MATURE) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) 7252 //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
7228 { 7253 {
7229 gAgent.removeWearable( type ); 7254 gAgent.removeWearable( type );
7230 } 7255 }
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index 5b6c3c0..ad0606a 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -239,6 +239,8 @@ public:
239 239
240 BOOL isGodlike() const; 240 BOOL isGodlike() const;
241 U8 getGodLevel() const; 241 U8 getGodLevel() const;
242 bool isTeen() const;
243 void setTeen(bool teen);
242 BOOL isGroupTitleHidden() const { return mHideGroupTitle; } 244 BOOL isGroupTitleHidden() const { return mHideGroupTitle; }
243 BOOL isGroupMember() const { return !mGroupID.isNull(); } // This is only used for building titles! 245 BOOL isGroupMember() const { return !mGroupID.isNull(); } // This is only used for building titles!
244 const LLUUID &getGroupID() const { return mGroupID; } 246 const LLUUID &getGroupID() const { return mGroupID; }
@@ -666,8 +668,6 @@ public:
666 668
667 F32 mDrawDistance; 669 F32 mDrawDistance;
668 670
669 // Access or "maturity" level
670 U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG
671 U64 mGroupPowers; 671 U64 mGroupPowers;
672 BOOL mHideGroupTitle; 672 BOOL mHideGroupTitle;
673 char mGroupTitle[DB_GROUP_TITLE_BUF_SIZE]; /*Flawfinder: ignore*/ // honorific, like "Sir" 673 char mGroupTitle[DB_GROUP_TITLE_BUF_SIZE]; /*Flawfinder: ignore*/ // honorific, like "Sir"
@@ -703,6 +703,8 @@ public:
703 static std::map<LLString, LLString> sTeleportProgressMessages; 703 static std::map<LLString, LLString> sTeleportProgressMessages;
704 704
705private: 705private:
706 // Access or "maturity" level
707 U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG
706 ETeleportState mTeleportState; 708 ETeleportState mTeleportState;
707 LLString mTeleportMessage; 709 LLString mTeleportMessage;
708 710
diff --git a/linden/indra/newview/llclassifiedstatsresponder.cpp b/linden/indra/newview/llclassifiedstatsresponder.cpp
new file mode 100644
index 0000000..00b1878
--- /dev/null
+++ b/linden/indra/newview/llclassifiedstatsresponder.cpp
@@ -0,0 +1,70 @@
1/**
2 * @file llparcelrequest.cpp
3 * @brief Implementation of the LLParcelRequest class.
4 *
5 * $LicenseInfo:firstyear=2006&license=internal$
6 *
7 * Copyright (c) 2006-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#include "llviewerprecompiledheaders.h"
23
24#include "llagent.h"
25#include "llclassifiedstatsresponder.h"
26
27#include "llpanelclassified.h"
28#include "llpanel.h"
29#include "llhttpclient.h"
30#include "llsdserialize.h"
31#include "llviewerregion.h"
32#include "llview.h"
33#include "message.h"
34
35LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLViewHandle classified_panel_handle)
36: mClassifiedPanelHandle(classified_panel_handle)
37{
38}
39/*virtual*/
40void LLClassifiedStatsResponder::result(const LLSD& content)
41{
42 LLUUID classified_id = content["classified_id"];
43 S32 teleport = content["teleport_clicks"].asInteger();
44 S32 map = content["map_clicks"].asInteger();
45 S32 profile = content["profile_clicks"].asInteger();
46 S32 search_teleport = content["search_teleport_clicks"].asInteger();
47 S32 search_map = content["search_map_clicks"].asInteger();
48 S32 search_profile = content["search_profile_clicks"].asInteger();
49
50 std::string msg = llformat("Clicks: %d teleport, %d map, %d profile",
51 teleport + search_teleport,
52 map + search_map,
53 profile + search_profile);
54
55 LLPanelClassified* classified_panelp = (LLPanelClassified*)LLPanel::getPanelByHandle(mClassifiedPanelHandle);
56
57 if(classified_panelp)
58 {
59 classified_panelp->setClickThroughText(msg);
60 }
61
62}
63
64/*virtual*/
65void LLClassifiedStatsResponder::error(U32 status, const std::string& reason)
66{
67 llinfos << "LLClassifiedStatsResponder::error("
68 << status << ": " << reason << ")" << llendl;
69}
70
diff --git a/linden/indra/newview/llclassifiedstatsresponder.h b/linden/indra/newview/llclassifiedstatsresponder.h
new file mode 100644
index 0000000..c3eddbe
--- /dev/null
+++ b/linden/indra/newview/llclassifiedstatsresponder.h
@@ -0,0 +1,41 @@
1/**
2 * @file llclassifiedstatsrequest.h
3 * @brief Responder class for classified stats request.
4 *
5 * $LicenseInfo:firstyear=2006&license=internal$
6 *
7 * Copyright (c) 2006-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#ifndef LL_LLCLASSIFIEDSTATSRESPONDER_H
23#define LL_LLCLASSIFIEDSTATSRESPONDER_H
24
25#include "llhttpclient.h"
26#include "llview.h"
27
28class LLClassifiedStatsResponder : public LLHTTPClient::Responder
29{
30public:
31 LLClassifiedStatsResponder(LLViewHandle classified_panel_handle);
32 //If we get back a normal response, handle it here
33 virtual void result(const LLSD& content);
34 //If we get back an error (not found, etc...), handle it here
35 virtual void error(U32 status, const std::string& reason);
36
37protected:
38 LLViewHandle mClassifiedPanelHandle;
39};
40
41#endif // LL_LLCLASSIFIEDSTATSRESPONDER_H
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index aebecf5..51ee1f6 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -49,6 +49,9 @@
49#include "llstartup.h" 49#include "llstartup.h"
50#include "viewer.h" 50#include "viewer.h"
51 51
52// Used for LCD display
53extern void AddNewDebugConsoleToLCD(const LLWString &newLine);
54
52LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow. 55LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow.
53 56
54const F32 FADE_DURATION = 2.f; 57const F32 FADE_DURATION = 2.f;
@@ -254,6 +257,10 @@ void LLConsole::addLine(const LLWString& wline, F32 size, const LLColor4 &color)
254 mLineQueue.pop_front(); 257 mLineQueue.pop_front();
255 } 258 }
256 mLineQueue.push_back(LineInfo(wline, size, color, mTimer.getElapsedTimeF32())); 259 mLineQueue.push_back(LineInfo(wline, size, color, mTimer.getElapsedTimeF32()));
260#if LL_WINDOWS && LL_LCD_COMPILE
261 // add to LCD screen
262 AddNewDebugConsoleToLCD(wline);
263#endif
257} 264}
258 265
259void LLConsole::addQueuedLines() 266void LLConsole::addQueuedLines()
diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp
index 7c3e8d7..8cbe22c 100644
--- a/linden/indra/newview/llcontroldef.cpp
+++ b/linden/indra/newview/llcontroldef.cpp
@@ -229,7 +229,7 @@ void declare_settings()
229 // This is a fairly complete Japanese font that ships with Mac OS X. 229 // This is a fairly complete Japanese font that ships with Mac OS X.
230 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3". 230 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
231 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light" 231 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
232 gSavedSettings.declareString("FontSansSerifFallback", "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;AppleGothic.dfont;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf", "Name of san-serif font (Truetype file name)"); 232 gSavedSettings.declareString("FontSansSerifFallback", "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf", "Name of san-serif font (Truetype file name)");
233#else 233#else
234 // 'unicode.ttf' doesn't exist, but hopefully an international 234 // 'unicode.ttf' doesn't exist, but hopefully an international
235 // user can take the hint and drop in their favourite local font. 235 // user can take the hint and drop in their favourite local font.
@@ -467,7 +467,8 @@ void declare_settings()
467 gSavedSettings.declareF32("RenderNameShowTime", 10.f, "Fade avatar names after specified time (seconds)"); // seconds 467 gSavedSettings.declareF32("RenderNameShowTime", 10.f, "Fade avatar names after specified time (seconds)"); // seconds
468 gSavedSettings.declareF32("RenderNameFadeDuration", 1.f, "Time interval over which to fade avatar names (seconds)"); // seconds 468 gSavedSettings.declareF32("RenderNameFadeDuration", 1.f, "Time interval over which to fade avatar names (seconds)"); // seconds
469 gSavedSettings.declareBOOL("RenderNameHideSelf", FALSE, "Don't display own name above avatar"); 469 gSavedSettings.declareBOOL("RenderNameHideSelf", FALSE, "Don't display own name above avatar");
470 gSavedSettings.declareBOOL("RenderHideGroupTitle", FALSE, "Don't show group titles in name labels"); 470 gSavedSettings.declareBOOL("RenderHideGroupTitle", FALSE, "Don't show my group title in my name label");
471 gSavedSettings.declareBOOL("RenderGroupTitleAll", TRUE, "Show group titles in name labels");
471 472
472 // Camera widget controls 473 // Camera widget controls
473 const S32 CAMERA_LEFT = MOVE_BTN_FLY_RIGHT + 10; 474 const S32 CAMERA_LEFT = MOVE_BTN_FLY_RIGHT + 10;
@@ -971,6 +972,9 @@ void declare_settings()
971 gSavedSettings.declareRect("PreviewScriptRect", LLRect(0, 550, 500, 0), "Rectangle for script preview window" ); // Only width and height are used 972 gSavedSettings.declareRect("PreviewScriptRect", LLRect(0, 550, 500, 0), "Rectangle for script preview window" ); // Only width and height are used
972 gSavedSettings.declareRect("LSLHelpRect", LLRect(0, 400, 400, 0), "Rectangle for LSL help window" ); // Only width and height are used 973 gSavedSettings.declareRect("LSLHelpRect", LLRect(0, 400, 400, 0), "Rectangle for LSL help window" ); // Only width and height are used
973 gSavedSettings.declareRect("PreviewLandmarkRect", LLRect(0, 90, 300, 0), "Rectangle for landmark preview window" ); // Only width and height are used 974 gSavedSettings.declareRect("PreviewLandmarkRect", LLRect(0, 90, 300, 0), "Rectangle for landmark preview window" ); // Only width and height are used
975 gSavedSettings.declareRect("PreviewURLRect", LLRect(0, 90, 300, 0), "Rectangle for URL preview window" ); // Only width and height are used
976 gSavedSettings.declareRect("PreviewEventRect", LLRect(0, 530, 420, 0), "Rectangle for Event preview window" ); // Only width and height are used
977 gSavedSettings.declareRect("PreviewClassifiedRect", LLRect(0, 530, 420, 0), "Rectangle for URL preview window" ); // Only width and height are used
974 gSavedSettings.declareRect("PreviewSoundRect", LLRect(0, 85, 300, 0), "Rectangle for sound preview window" ); // Only width and height are used 978 gSavedSettings.declareRect("PreviewSoundRect", LLRect(0, 85, 300, 0), "Rectangle for sound preview window" ); // Only width and height are used
975 gSavedSettings.declareRect("PreviewObjectRect", LLRect(0, 85, 300, 0), "Rectangle for object preview window" ); // Only width and height are used 979 gSavedSettings.declareRect("PreviewObjectRect", LLRect(0, 85, 300, 0), "Rectangle for object preview window" ); // Only width and height are used
976 gSavedSettings.declareRect("PreviewWearableRect", LLRect(0, 85, 300, 0), "Rectangle for wearable preview window" ); // Only width and height are used 980 gSavedSettings.declareRect("PreviewWearableRect", LLRect(0, 85, 300, 0), "Rectangle for wearable preview window" ); // Only width and height are used
@@ -994,6 +998,9 @@ void declare_settings()
994 998
995 gSavedSettings.declareRect("FloaterRegionInfo", LLRect(0, 512, 480, 0), "Rectangle for region info window"); 999 gSavedSettings.declareRect("FloaterRegionInfo", LLRect(0, 512, 480, 0), "Rectangle for region info window");
996 1000
1001 // Landmark Picker
1002 gSavedSettings.declareRect("FloaterLandmarkRect", LLRect(0, 290, 310, 0), "Rectangle for landmark picker" ); // Only width and height are used
1003
997 // editors 1004 // editors
998 // Only width and height are used 1005 // Only width and height are used
999 gSavedSettings.declareRect("NotecardEditorRect", LLRect(0, 400, 400, 0), "Rectangle for notecard editor"); 1006 gSavedSettings.declareRect("NotecardEditorRect", LLRect(0, 400, 400, 0), "Rectangle for notecard editor");
@@ -1322,7 +1329,7 @@ void declare_settings()
1322 gSavedSettings.declareBOOL("AutomaticFly", TRUE, "Fly by holding jump key or using \"Fly\" command (FALSE = fly by using \"Fly\" command only)"); 1329 gSavedSettings.declareBOOL("AutomaticFly", TRUE, "Fly by holding jump key or using \"Fly\" command (FALSE = fly by using \"Fly\" command only)");
1323 1330
1324 // Index of the last find panel you opened. 1331 // Index of the last find panel you opened.
1325 gSavedSettings.declareString("LastFindPanel", "all_panel", "Controls which find operation appears by default when clicking \"Find\" button "); 1332 gSavedSettings.declareString("LastFindPanel", "find_all_panel", "Controls which find operation appears by default when clicking \"Find\" button ");
1326 1333
1327 // grab keystrokes at last possible moment to minimize latency 1334 // grab keystrokes at last possible moment to minimize latency
1328 gSavedSettings.declareBOOL("AsyncKeyboard", TRUE, "Improves responsiveness to keyboard input when at low framerates"); 1335 gSavedSettings.declareBOOL("AsyncKeyboard", TRUE, "Improves responsiveness to keyboard input when at low framerates");
@@ -1369,6 +1376,15 @@ void declare_settings()
1369 gSavedSettings.declareBOOL("MapShowInfohubs", TRUE, "Show infohubs on the world map"); 1376 gSavedSettings.declareBOOL("MapShowInfohubs", TRUE, "Show infohubs on the world map");
1370 gSavedSettings.declareBOOL("MapShowClassifieds", TRUE, "Show locations associated with classified ads on world map"); 1377 gSavedSettings.declareBOOL("MapShowClassifieds", TRUE, "Show locations associated with classified ads on world map");
1371 1378
1379 // Search panel in directory uses this URL for queries
1380 // Trailing "/" matters.
1381 gSavedSettings.declareString("SearchDefaultURL",
1382 "http://secondlife.com/app/search/index.php?m=[MATURE]",
1383 "URL to load for empty searches");
1384 gSavedSettings.declareString("SearchQueryURL",
1385 "http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]",
1386 "URL to use for searches");
1387
1372 // Arrow keys move avatar while in chat? 1388 // Arrow keys move avatar while in chat?
1373 gSavedSettings.declareBOOL("ArrowKeysMoveAvatar", TRUE, "While cursor is in chat entry box, arrow keys still control your avatar"); 1389 gSavedSettings.declareBOOL("ArrowKeysMoveAvatar", TRUE, "While cursor is in chat entry box, arrow keys still control your avatar");
1374 gSavedSettings.declareBOOL("ChatBarStealsFocus", TRUE, "Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus"); 1390 gSavedSettings.declareBOOL("ChatBarStealsFocus", TRUE, "Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus");
@@ -1451,6 +1467,15 @@ void declare_settings()
1451 gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas)."); 1467 gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas).");
1452 gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom."); 1468 gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom.");
1453 1469
1470 // logitech LCD settings
1471 gSavedSettings.declareS32("LCDDestination", 0, "Which LCD to use");
1472 gSavedSettings.declareBOOL("DisplayChat", TRUE, "Display Latest Chat message on LCD");
1473 gSavedSettings.declareBOOL("DisplayIM", TRUE, "Display Latest IM message on LCD");
1474 gSavedSettings.declareBOOL("DisplayRegion", TRUE, "Display Location information on LCD");
1475 gSavedSettings.declareBOOL("DisplayDebug", TRUE, "Display Network Information on LCD");
1476 gSavedSettings.declareBOOL("DisplayDebugConsole", TRUE, "Display Console Debug Information on LCD");
1477 gSavedSettings.declareBOOL("DisplayLinden", TRUE, "Display Account Information on LCD");
1478
1454 // Vector Processor & Math 1479 // Vector Processor & Math
1455 gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version."); 1480 gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version.");
1456 gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment."); 1481 gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment.");
diff --git a/linden/indra/newview/llfloateravatarinfo.cpp b/linden/indra/newview/llfloateravatarinfo.cpp
index c7341b6..58fe1ab 100644
--- a/linden/indra/newview/llfloateravatarinfo.cpp
+++ b/linden/indra/newview/llfloateravatarinfo.cpp
@@ -1,6 +1,9 @@
1/** 1/**
2 * @file llfloateravatarinfo.cpp 2 * @file llfloateravatarinfo.cpp
3 * @brief LLFloaterAvatarInfo class implementation 3 * @brief LLFloaterAvatarInfo class implementation
4 * Avatar information as shown in a floating window from right-click
5 * Profile. Used for editing your own avatar info. Just a wrapper
6 * for LLPanelAvatar, shared with the Find directory.
4 * 7 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$ 8 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 9 *
@@ -28,54 +31,42 @@
28 * COMPLETENESS OR PERFORMANCE. 31 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$ 32 * $/LicenseInfo$
30 */ 33 */
31
32/**
33 * Avatar information as shown in a floating window from right-click
34 * Profile. Used for editing your own avatar info. Just a wrapper
35 * for LLPanelAvatar, shared with the Find directory.
36 */
37
38// system includes
39
40// linden prefix includes
41#include "llviewerprecompiledheaders.h" 34#include "llviewerprecompiledheaders.h"
42 35
43// self include
44#include "llfloateravatarinfo.h" 36#include "llfloateravatarinfo.h"
45 37
46// linden library includes
47#include "llcachename.h"
48#include "llfontgl.h"
49#include "llinventory.h"
50#include "message.h"
51
52// viewer project includes 38// viewer project includes
53#include "llagentdata.h" 39#include "llagentdata.h"
54#include "llbutton.h" 40//#include "llbutton.h"
55#include "llcallingcard.h" 41//#include "llcallingcard.h"
56#include "llcheckboxctrl.h" 42//#include "llcheckboxctrl.h"
43//#include "llcommandhandler.h"
44//#include "llfloaterworldmap.h"
45//#include "llfloatermute.h"
46//#include "llinventoryview.h"
47//#include "lllineeditor.h"
48//#include "llmutelist.h"
49//#include "llscrolllistctrl.h"
50//#include "lltabcontainer.h"
51//#include "llimview.h"
52//#include "lluiconstants.h"
53//#include "llviewerobject.h"
54//#include "llviewerobjectlist.h"
55//#include "llviewerregion.h"
56//#include "llviewborder.h"
57//#include "llinventorymodel.h"
58//#include "lltextbox.h"
59//#include "lltexturectrl.h"
60//#include "llviewertexteditor.h"
57#include "llcommandhandler.h" 61#include "llcommandhandler.h"
58#include "llfloaterworldmap.h"
59#include "llfloatermute.h"
60#include "llinventoryview.h"
61#include "lllineeditor.h"
62#include "llmutelist.h"
63#include "llscrolllistctrl.h"
64#include "lltabcontainer.h"
65#include "llimview.h"
66#include "lluiconstants.h"
67#include "llviewerobject.h"
68#include "llviewerobjectlist.h"
69#include "llviewerregion.h"
70#include "llviewborder.h"
71#include "llinventorymodel.h"
72#include "lltextbox.h"
73#include "lltexturectrl.h"
74#include "llviewertexteditor.h"
75#include "llpanelavatar.h" 62#include "llpanelavatar.h"
76
77#include "llvieweruictrlfactory.h" 63#include "llvieweruictrlfactory.h"
78 64
65// linden library includes
66#include "llinventory.h"
67#include "lluuid.h"
68#include "message.h"
69
79const char FLOATER_TITLE[] = "Profile"; 70const char FLOATER_TITLE[] = "Profile";
80const LLRect FAI_RECT(0, 530, 420, 0); 71const LLRect FAI_RECT(0, 530, 420, 0);
81 72
@@ -100,7 +91,7 @@ public:
100 91
101 if (params[1] == "about") 92 if (params[1] == "about")
102 { 93 {
103 LLFloaterAvatarInfo::showFromDirectory(agent_id); 94 LLFloaterAvatarInfo::show(agent_id);
104 return true; 95 return true;
105 } 96 }
106 return false; 97 return false;
@@ -172,79 +163,52 @@ void LLFloaterAvatarInfo::resetGroupList()
172 mPanelAvatarp->resetGroupList(); 163 mPanelAvatarp->resetGroupList();
173} 164}
174 165
175
176// Open profile to a certian tab.
177// static 166// static
178void LLFloaterAvatarInfo::showFromObject( 167LLFloaterAvatarInfo* LLFloaterAvatarInfo::show(const LLUUID &avatar_id)
179 const LLUUID& avatar_id,
180 std::string tab_name)
181{ 168{
182 if(avatar_id.isNull()) 169 if (avatar_id.isNull())
183 { 170 {
184 return; 171 return NULL;
185 } 172 }
186 173
187 LLFloaterAvatarInfo *floater = NULL; 174 LLFloaterAvatarInfo *floater;
188 if (gAvatarInfoInstances.checkData(avatar_id)) 175 if (gAvatarInfoInstances.checkData(avatar_id))
189 { 176 {
190 // ...bring that window to front 177 // ...bring that window to front
191 floater = gAvatarInfoInstances.getData(avatar_id); 178 floater = gAvatarInfoInstances.getData(avatar_id);
179 floater->open(); /*Flawfinder: ignore*/
192 } 180 }
193 else 181 else
194 { 182 {
195 floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, 183 floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
196 avatar_id); 184 avatar_id );
197 floater->center(); 185 floater->center();
198 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO); 186 floater->open(); /*Flawfinder: ignore*/
199
200 } 187 }
201 floater->mPanelAvatarp->selectTabByName(tab_name); 188 return floater;
202 floater->open(); /*Flawfinder: ignore*/
203} 189}
204 190
191// Open profile to a certain tab.
205// static 192// static
206void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id) 193void LLFloaterAvatarInfo::showFromObject(
194 const LLUUID& avatar_id,
195 std::string tab_name)
207{ 196{
208 if(avatar_id.isNull()) 197 LLFloaterAvatarInfo *floater = show(avatar_id);
198 if (floater)
209 { 199 {
210 return;
211 }
212
213 LLFloaterAvatarInfo *floater;
214 if (gAvatarInfoInstances.checkData(avatar_id))
215 {
216 // ...bring that window to front
217 floater = gAvatarInfoInstances.getData(avatar_id);
218 }
219 else
220 {
221 floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
222 avatar_id);
223 floater->center();
224 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO); 200 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
225 } 201 floater->mPanelAvatarp->selectTabByName(tab_name);
226 if(floater)
227 {
228 floater->open();
229 } 202 }
230} 203}
231 204
232
233// static 205// static
234void LLFloaterAvatarInfo::showFromAvatar(LLViewerObject *avatar) 206void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id)
235{ 207{
236 if (gAvatarInfoInstances.checkData(avatar->getID())) 208 LLFloaterAvatarInfo *floater = show(avatar_id);
237 { 209 if (floater)
238 // ...bring that window to front
239 LLFloaterAvatarInfo *f = gAvatarInfoInstances.getData(avatar->getID());
240 f->open(); /*Flawfinder: ignore*/
241 }
242 else
243 { 210 {
244 LLFloaterAvatarInfo *floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, 211 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
245 avatar->getID() );
246 floater->center();
247 floater->open(); /*Flawfinder: ignore*/
248 } 212 }
249} 213}
250 214
@@ -252,21 +216,9 @@ void LLFloaterAvatarInfo::showFromAvatar(LLViewerObject *avatar)
252// static 216// static
253void LLFloaterAvatarInfo::showFromFriend(const LLUUID& agent_id, BOOL online) 217void LLFloaterAvatarInfo::showFromFriend(const LLUUID& agent_id, BOOL online)
254{ 218{
255 if(agent_id.isNull()) 219 LLFloaterAvatarInfo *floater = show(agent_id);
220 if (floater)
256 { 221 {
257 return;
258 }
259 if (gAvatarInfoInstances.checkData( agent_id ))
260 {
261 // ...bring that window to front
262 LLFloaterAvatarInfo *f = gAvatarInfoInstances.getData( agent_id );
263 f->open(); /*Flawfinder: ignore*/
264 }
265 else
266 {
267 LLFloaterAvatarInfo *floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
268 agent_id);
269 floater->center();
270 floater->mSuggestedOnlineStatus = online ? ONLINE_STATUS_YES : ONLINE_STATUS_NO; 222 floater->mSuggestedOnlineStatus = online ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
271 } 223 }
272} 224}
diff --git a/linden/indra/newview/llfloateravatarinfo.h b/linden/indra/newview/llfloateravatarinfo.h
index f305ae0..9b5fcb4 100644
--- a/linden/indra/newview/llfloateravatarinfo.h
+++ b/linden/indra/newview/llfloateravatarinfo.h
@@ -62,7 +62,6 @@ class LLFloaterAvatarInfo
62: public LLPreview 62: public LLPreview
63{ 63{
64public: 64public:
65
66 static void* createPanelAvatar(void* data); 65 static void* createPanelAvatar(void* data);
67 66
68 virtual BOOL postBuild(); 67 virtual BOOL postBuild();
@@ -77,16 +76,14 @@ public:
77 /*virtual*/ void loadAsset(); 76 /*virtual*/ void loadAsset();
78 /*virtual*/ EAssetStatus getAssetStatus(); 77 /*virtual*/ EAssetStatus getAssetStatus();
79 78
80 // Enables rate button, enables IM 79 static LLFloaterAvatarInfo* show(const LLUUID& avatar_id);
80 // Core method, doesn't do anything funny with online status or
81 // tab selection.
82
81 static void showFromObject(const LLUUID &avatar_id, std::string tab_name = std::string()); 83 static void showFromObject(const LLUUID &avatar_id, std::string tab_name = std::string());
82 84
83 // Disables the rate button, enables IM
84 static void showFromDirectory(const LLUUID &avatar_id); 85 static void showFromDirectory(const LLUUID &avatar_id);
85 86
86 // Enables all buttons
87 static void showFromAvatar(LLViewerObject *object);
88
89 // Enables most buttons
90 static void showFromFriend(const LLUUID& agent_id, BOOL online); 87 static void showFromFriend(const LLUUID& agent_id, BOOL online);
91 88
92 static LLFloaterAvatarInfo* getInstance(const LLUUID &id); 89 static LLFloaterAvatarInfo* getInstance(const LLUUID &id);
@@ -94,8 +91,6 @@ public:
94 void resetGroupList(); 91 void resetGroupList();
95 92
96private: 93private:
97
98protected:
99 LLUUID mAvatarID; // for which avatar is this window? 94 LLUUID mAvatarID; // for which avatar is this window?
100 LLPanelAvatar* mPanelAvatarp; 95 LLPanelAvatar* mPanelAvatarp;
101 EOnlineStatus mSuggestedOnlineStatus; 96 EOnlineStatus mSuggestedOnlineStatus;
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 686cc81..b435ada 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -73,6 +73,9 @@
73#include "llfloaterhtml.h" 73#include "llfloaterhtml.h"
74#include "llweb.h" 74#include "llweb.h"
75 75
76// Used for LCD display
77extern void AddNewIMToLCD(const LLString &newLine);
78extern void AddNewChatToLCD(const LLString &newLine);
76// 79//
77// Constants 80// Constants
78// 81//
@@ -309,6 +312,20 @@ void LLFloaterChat::addChat(const LLChat& chat,
309 chat.mChatType == CHAT_TYPE_DEBUG_MSG 312 chat.mChatType == CHAT_TYPE_DEBUG_MSG
310 && !gSavedSettings.getBOOL("ScriptErrorsAsChat"); 313 && !gSavedSettings.getBOOL("ScriptErrorsAsChat");
311 314
315#if LL_WINDOWS && LL_LCD_COMPILE
316 // add into LCD displays
317 if (!invisible_script_debug_chat)
318 {
319 if (!from_instant_message)
320 {
321 AddNewChatToLCD(chat.mText);
322 }
323 else
324 {
325 AddNewIMToLCD(chat.mText);
326 }
327 }
328#endif
312 if (!invisible_script_debug_chat 329 if (!invisible_script_debug_chat
313 && !chat.mMuted 330 && !chat.mMuted
314 && gConsole 331 && gConsole
diff --git a/linden/indra/newview/llfloaterclassified.cpp b/linden/indra/newview/llfloaterclassified.cpp
new file mode 100644
index 0000000..aa57c6f
--- /dev/null
+++ b/linden/indra/newview/llfloaterclassified.cpp
@@ -0,0 +1,131 @@
1/**
2* @file llfloaterclassified.cpp
3* @brief LLFloaterClassifiedInfo class implementation
4*
5* Classified information as shown in a floating window from secondlife:// command
6* handler.
7*
8* $LicenseInfo:firstyear=2002&license=internal$
9*
10* Copyright (c) 2002-2007, Linden Research, Inc.
11*
12* The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
13* this source code is governed by the Linden Lab Source Code Disclosure
14* Agreement ("Agreement") previously entered between you and Linden
15* Lab. By accessing, using, copying, modifying or distributing this
16* software, you acknowledge that you have been informed of your
17* obligations under the Agreement and agree to abide by those obligations.
18*
19* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
20* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
21* COMPLETENESS OR PERFORMANCE.
22* $/LicenseInfo$
23*/
24
25#include "llviewerprecompiledheaders.h"
26
27#include "llfloaterclassified.h"
28
29// viewer project includes
30#include "llcommandhandler.h"
31#include "llpanelclassified.h"
32#include "llvieweruictrlfactory.h"
33
34// linden library includes
35#include "lluuid.h"
36
37//-----------------------------------------------------------------------------
38// Globals
39//-----------------------------------------------------------------------------
40
41LLMap< const LLUUID, LLFloaterClassifiedInfo* > gClassifiedInfoInstances;
42////////////////////////////////////////////////////////////////////////////
43// LLFloaterEventDisplay
44
45class LLClassifiedHandler : public LLCommandHandler
46{
47public:
48 LLClassifiedHandler() : LLCommandHandler("classified") { }
49 bool handle(const std::vector<std::string>& tokens)
50 {
51 if (tokens.size() < 2)
52 {
53 return false;
54 }
55 LLUUID classified_id;
56 if (!classified_id.set(tokens[0], FALSE))
57 {
58 return false;
59 }
60
61 if (tokens[1] == "about")
62 {
63 LLFloaterClassifiedInfo::show(classified_id);
64 return true;
65 }
66 return false;
67 }
68};
69LLClassifiedHandler gClassifiedHandler;
70
71LLFloaterClassifiedInfo::LLFloaterClassifiedInfo(const std::string& name, const LLUUID &id)
72: LLFloater(name),
73mClassifiedID( id )
74{
75 mFactoryMap["classified_details_panel"] = LLCallbackMap(LLFloaterClassifiedInfo::createClassifiedDetail, this);
76 gUICtrlFactory->buildFloater(this, "floater_preview_classified.xml", &getFactoryMap());
77 gClassifiedInfoInstances.addData(id, this);
78}
79
80LLFloaterClassifiedInfo::~LLFloaterClassifiedInfo()
81{
82 // child views automatically deleted
83 gClassifiedInfoInstances.removeData(mClassifiedID);
84
85}
86
87void LLFloaterClassifiedInfo::displayClassifiedInfo(const LLUUID& classified_id)
88{
89 mClassifiedPanel->setClassifiedID(classified_id);
90 mClassifiedPanel->sendClassifiedInfoRequest();
91 this->setFrontmost(true);
92}
93
94// static
95void* LLFloaterClassifiedInfo::createClassifiedDetail(void* userdata)
96{
97 LLFloaterClassifiedInfo *self = (LLFloaterClassifiedInfo*)userdata;
98 self->mClassifiedPanel = new LLPanelClassified(TRUE, TRUE);
99 self->mClassifiedPanel->childSetValue("classified_url", self->mClassifiedID);
100 return self->mClassifiedPanel;
101}
102
103// static
104LLFloaterClassifiedInfo* LLFloaterClassifiedInfo::show(const LLUUID &classified_id)
105{
106 if (classified_id.isNull())
107 {
108 return NULL;
109 }
110
111 LLFloaterClassifiedInfo *floater;
112 if (gClassifiedInfoInstances.checkData(classified_id))
113 {
114 // ...bring that window to front
115 floater = gClassifiedInfoInstances.getData(classified_id);
116 floater->open(); /*Flawfinder: ignore*/
117 floater->setFrontmost(true);
118 }
119 else
120 {
121 floater = new LLFloaterClassifiedInfo("calssifiedinfo", classified_id );
122 floater->center();
123 floater->open(); /*Flawfinder: ignore*/
124 floater->displayClassifiedInfo(classified_id);
125 floater->setFrontmost(true);
126 }
127
128 return floater;
129}
130
131
diff --git a/linden/indra/newview/llfloaterclassified.h b/linden/indra/newview/llfloaterclassified.h
new file mode 100644
index 0000000..6cdc77b
--- /dev/null
+++ b/linden/indra/newview/llfloaterclassified.h
@@ -0,0 +1,54 @@
1/**
2 * @file llfloaterclassified.h
3 * @brief LLFloaterClassifiedInfo class declaration
4 *
5 * $LicenseInfo:firstyear=2002&license=internal$
6 *
7 * Copyright (c) 2002-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22/**
23* Classified information as shown in a floating window from a secondlife:// url.
24* Just a wrapper for LLPanelClassified.
25*/
26
27
28#ifndef LL_FLOATERCLASSIFIED_H
29#define LL_FLOATERCLASSIFIED_H
30
31#include "llfloater.h"
32
33class LLPanelClassified;
34
35class LLFloaterClassifiedInfo : LLFloater
36{
37public:
38 LLFloaterClassifiedInfo(const std::string& name, const LLUUID &id );
39 virtual ~LLFloaterClassifiedInfo();
40
41 void displayClassifiedInfo(const LLUUID& classified_id);
42
43 static LLFloaterClassifiedInfo* show(const LLUUID& classified_id);
44
45 static void* createClassifiedDetail(void* userdata);
46
47private:
48
49 LLPanelClassified* mClassifiedPanel;
50 LLUUID mClassifiedID;
51
52};
53
54#endif // LL_FLOATERCLASSIFIED_H
diff --git a/linden/indra/newview/llfloaterclothing.cpp b/linden/indra/newview/llfloaterclothing.cpp
index fd3812c..e0ef360 100644
--- a/linden/indra/newview/llfloaterclothing.cpp
+++ b/linden/indra/newview/llfloaterclothing.cpp
@@ -359,7 +359,7 @@ BOOL wearable_can_take_off(EWearableType wearable_type)
359 case WT_UNDERSHIRT: 359 case WT_UNDERSHIRT:
360 case WT_UNDERPANTS: 360 case WT_UNDERPANTS:
361 // can't take off underpants with PG accounts 361 // can't take off underpants with PG accounts
362 return (gAgent.mAccess >= SIM_ACCESS_MATURE); 362 return (!gAgent.isTeen());
363 } 363 }
364} 364}
365 365
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index 5351aa5..fb6efe2 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -217,7 +217,7 @@ public:
217 LLString name = LLString("checkbox_") + LLWearable::typeToTypeLabel( (EWearableType)i ); 217 LLString name = LLString("checkbox_") + LLWearable::typeToTypeLabel( (EWearableType)i );
218 mCheckBoxList.push_back(std::make_pair(name,i)); 218 mCheckBoxList.push_back(std::make_pair(name,i));
219 // Hide teen items 219 // Hide teen items
220 if (gAgent.mAccess < SIM_ACCESS_MATURE && 220 if (gAgent.isTeen() &&
221 !edit_wearable_for_teens((EWearableType)i)) 221 !edit_wearable_for_teens((EWearableType)i))
222 { 222 {
223 // hide wearable checkboxes that don't apply to this account 223 // hide wearable checkboxes that don't apply to this account
@@ -462,7 +462,7 @@ BOOL LLPanelEditWearable::postBuild()
462 // If PG, can't take off underclothing or shirt 462 // If PG, can't take off underclothing or shirt
463 mCanTakeOff = 463 mCanTakeOff =
464 LLWearable::typeToAssetType( mType ) == LLAssetType::AT_CLOTHING && 464 LLWearable::typeToAssetType( mType ) == LLAssetType::AT_CLOTHING &&
465 !( gAgent.mAccess < SIM_ACCESS_MATURE && (mType == WT_UNDERSHIRT || mType == WT_UNDERPANTS) ); 465 !( gAgent.isTeen() && (mType == WT_UNDERSHIRT || mType == WT_UNDERPANTS) );
466 childSetVisible("Take Off", mCanTakeOff); 466 childSetVisible("Take Off", mCanTakeOff);
467 childSetAction("Take Off", LLPanelEditWearable::onBtnTakeOff, this ); 467 childSetAction("Take Off", LLPanelEditWearable::onBtnTakeOff, this );
468 468
@@ -1606,8 +1606,8 @@ BOOL LLFloaterCustomize::postBuild()
1606 childSetTabChangeCallback("customize tab container", "Underpants", onTabChanged, (void*)WT_UNDERPANTS ); 1606 childSetTabChangeCallback("customize tab container", "Underpants", onTabChanged, (void*)WT_UNDERPANTS );
1607 childSetTabChangeCallback("customize tab container", "Skirt", onTabChanged, (void*)WT_SKIRT ); 1607 childSetTabChangeCallback("customize tab container", "Skirt", onTabChanged, (void*)WT_SKIRT );
1608 1608
1609 // Remove underware panels for teens 1609 // Remove underwear panels for teens
1610 if (gAgent.mAccess < SIM_ACCESS_MATURE) 1610 if (gAgent.isTeen())
1611 { 1611 {
1612 LLTabContainerCommon* tab_container = LLUICtrlFactory::getTabContainerByName(this, "customize tab container"); 1612 LLTabContainerCommon* tab_container = LLUICtrlFactory::getTabContainerByName(this, "customize tab container");
1613 if (tab_container) 1613 if (tab_container)
@@ -1693,7 +1693,7 @@ void LLFloaterCustomize::onBtnMakeOutfit( void* userdata )
1693 { 1693 {
1694 BOOL enabled = (gAgent.getWearable( (EWearableType) i ) != NULL); 1694 BOOL enabled = (gAgent.getWearable( (EWearableType) i ) != NULL);
1695 BOOL selected = (enabled && (WT_SHIRT <= i) && (i < WT_COUNT)); // only select clothing by default 1695 BOOL selected = (enabled && (WT_SHIRT <= i) && (i < WT_COUNT)); // only select clothing by default
1696 if (gAgent.mAccess < SIM_ACCESS_MATURE 1696 if (gAgent.isTeen()
1697 && !edit_wearable_for_teens((EWearableType)i)) 1697 && !edit_wearable_for_teens((EWearableType)i))
1698 { 1698 {
1699 dialog->setWearableToInclude( i, FALSE, FALSE ); 1699 dialog->setWearableToInclude( i, FALSE, FALSE );
@@ -1730,7 +1730,7 @@ void* LLFloaterCustomize::createWearablePanel(void* userdata)
1730 WearablePanelData* data = (WearablePanelData*)userdata; 1730 WearablePanelData* data = (WearablePanelData*)userdata;
1731 EWearableType type = data->mType; 1731 EWearableType type = data->mType;
1732 LLPanelEditWearable* panel; 1732 LLPanelEditWearable* panel;
1733 if ((gAgent.mAccess < SIM_ACCESS_MATURE && !edit_wearable_for_teens(data->mType) )) 1733 if ((gAgent.isTeen() && !edit_wearable_for_teens(data->mType) ))
1734 { 1734 {
1735 panel = NULL; 1735 panel = NULL;
1736 } 1736 }
diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp
index 1c06ed1..3b7142e 100644
--- a/linden/indra/newview/llfloaterdirectory.cpp
+++ b/linden/indra/newview/llfloaterdirectory.cpp
@@ -52,14 +52,6 @@
52#include "lluiconstants.h" 52#include "lluiconstants.h"
53#include "llviewercontrol.h" 53#include "llviewercontrol.h"
54 54
55LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL;
56
57//////////////////////////////////////////////
58// LLFloaterDirectory
59
60const S32 MIN_WIDTH = 400;
61const S32 MIN_HEIGHT = 200;
62
63#include "llagent.h" 55#include "llagent.h"
64#include "llpanelavatar.h" 56#include "llpanelavatar.h"
65#include "llpanelevent.h" 57#include "llpanelevent.h"
@@ -72,20 +64,18 @@ const S32 MIN_HEIGHT = 200;
72#include "lldir.h" 64#include "lldir.h"
73#include "llvieweruictrlfactory.h" 65#include "llvieweruictrlfactory.h"
74 66
67LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL;
68
75LLFloaterDirectory::LLFloaterDirectory(const std::string& name) 69LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
76: LLFloater(name, "FloaterFindRect2", "") 70: LLFloater(name, "FloaterFindRect2", "")
77{ 71{
78 sInstance = this; 72 sInstance = this;
79 73
80 // INITIALIZE SUBPANELS TO NULL 74 mFindAllPanel = NULL;
81 mClassifiedPanel = NULL; 75 mClassifiedPanel = NULL;
82 mEventsPanel = NULL; 76 mEventsPanel = NULL;
83 mPopularPanel = NULL; 77 mPopularPanel = NULL;
84 mPlacesPanel = NULL;
85 mLandPanel = NULL; 78 mLandPanel = NULL;
86 mPeoplePanel = NULL;
87 mGroupsPanel = NULL;
88 mFindPanel = NULL;
89 79
90 mPanelAvatarp = NULL; 80 mPanelAvatarp = NULL;
91 mPanelEventp = NULL; 81 mPanelEventp = NULL;
@@ -98,6 +88,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
98 // Build the floater with our tab panel classes 88 // Build the floater with our tab panel classes
99 89
100 LLCallbackMap::map_t factory_map; 90 LLCallbackMap::map_t factory_map;
91 factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this);
101 factory_map["classified_panel"] = LLCallbackMap(createClassified, this); 92 factory_map["classified_panel"] = LLCallbackMap(createClassified, this);
102 factory_map["events_panel"] = LLCallbackMap(createEvents, this); 93 factory_map["events_panel"] = LLCallbackMap(createEvents, this);
103 factory_map["popular_panel"] = LLCallbackMap(createPopular, this); 94 factory_map["popular_panel"] = LLCallbackMap(createPopular, this);
@@ -105,7 +96,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
105 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this); 96 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this);
106 factory_map["people_panel"] = LLCallbackMap(createPeople, this); 97 factory_map["people_panel"] = LLCallbackMap(createPeople, this);
107 factory_map["groups_panel"] = LLCallbackMap(createGroups, this); 98 factory_map["groups_panel"] = LLCallbackMap(createGroups, this);
108 factory_map["all_panel"] = LLCallbackMap(createFind, this); 99 factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this);
109 100
110 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this); 101 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this);
111 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this); 102 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this);
@@ -117,12 +108,14 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
117 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this); 108 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this);
118 109
119 gUICtrlFactory->buildFloater(this, "floater_directory.xml", &factory_map); 110 gUICtrlFactory->buildFloater(this, "floater_directory.xml", &factory_map);
111 moveResizeHandlesToFront();
120 112
121 if(mPanelAvatarp) 113 if(mPanelAvatarp)
122 { 114 {
123 mPanelAvatarp->selectTab(0); 115 mPanelAvatarp->selectTab(0);
124 } 116 }
125 117
118 childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChangedFindAll, this);
126 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this); 119 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this);
127 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this); 120 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this);
128 childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this); 121 childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this);
@@ -130,7 +123,28 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
130 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this); 123 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this);
131 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this); 124 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this);
132 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this); 125 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this);
133 childSetTabChangeCallback("Directory Tabs", "all_panel", onTabChanged, this); 126 childSetTabChangeCallback("Directory Tabs", "find_all_old_panel", onTabChanged, this);
127}
128
129LLFloaterDirectory::~LLFloaterDirectory()
130{
131 sInstance = NULL;
132 delete mPanelAvatarp; mPanelAvatarp = NULL;
133 delete mPanelEventp; mPanelEventp = NULL;
134 delete mPanelGroupp; mPanelGroupp = NULL;
135 delete mPanelGroupHolderp; mPanelGroupHolderp = NULL;
136 delete mPanelPlacep; mPanelPlacep = NULL;
137 delete mPanelPlaceSmallp; mPanelPlaceSmallp = NULL;
138 delete mPanelClassifiedp; mPanelClassifiedp = NULL;
139 gSavedSettings.setBOOL("ShowDirectory", FALSE);
140}
141
142// static
143void *LLFloaterDirectory::createFindAll(void* userdata)
144{
145 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
146 self->mFindAllPanel = LLPanelDirFindAllInterface::create(self);
147 return self->mFindAllPanel;
134} 148}
135 149
136// static 150// static
@@ -161,8 +175,7 @@ void* LLFloaterDirectory::createPopular(void* userdata)
161void* LLFloaterDirectory::createPlaces(void* userdata) 175void* LLFloaterDirectory::createPlaces(void* userdata)
162{ 176{
163 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 177 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
164 self->mPlacesPanel = new LLPanelDirPlaces("places_panel", self); 178 return new LLPanelDirPlaces("places_panel", self);
165 return self->mPlacesPanel;
166} 179}
167 180
168// static 181// static
@@ -178,24 +191,21 @@ void* LLFloaterDirectory::createLand(void* userdata)
178void* LLFloaterDirectory::createPeople(void* userdata) 191void* LLFloaterDirectory::createPeople(void* userdata)
179{ 192{
180 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 193 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
181 self->mPeoplePanel = new LLPanelDirPeople("people_panel", self); 194 return new LLPanelDirPeople("people_panel", self);
182 return self->mPeoplePanel;
183} 195}
184 196
185// static 197// static
186void* LLFloaterDirectory::createGroups(void* userdata) 198void* LLFloaterDirectory::createGroups(void* userdata)
187{ 199{
188 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 200 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
189 self->mGroupsPanel = new LLPanelDirGroups("groups_panel", self); 201 return new LLPanelDirGroups("groups_panel", self);
190 return self->mGroupsPanel;
191} 202}
192 203
193// static 204// static
194void *LLFloaterDirectory::createFind(void* userdata) 205void *LLFloaterDirectory::createFindAllOld(void* userdata)
195{ 206{
196 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 207 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
197 self->mFindPanel = new LLPanelDirFind("find_panel", self); 208 return new LLPanelDirFindAllOld("find_all_old_panel", self);
198 return self->mFindPanel;
199} 209}
200 210
201// static 211// static
@@ -282,6 +292,13 @@ void LLFloaterDirectory::requestClassifieds()
282 } 292 }
283} 293}
284 294
295void LLFloaterDirectory::showFindAll(const std::string& search_text)
296{
297 showPanel("find_all_panel");
298 LLPanelDirFindAllInterface::search(sInstance->mFindAllPanel, search_text);
299}
300
301
285void LLFloaterDirectory::showClassified(const LLUUID& classified_id) 302void LLFloaterDirectory::showClassified(const LLUUID& classified_id)
286{ 303{
287 showPanel("classified_panel"); 304 showPanel("classified_panel");
@@ -348,19 +365,6 @@ void LLFloaterDirectory::refreshGroup(const LLUUID& group_id)
348 } 365 }
349} 366}
350 367
351LLFloaterDirectory::~LLFloaterDirectory()
352{
353 sInstance = NULL;
354 delete mPanelAvatarp; mPanelAvatarp = NULL;
355 delete mPanelEventp; mPanelEventp = NULL;
356 delete mPanelGroupp; mPanelGroupp = NULL;
357 delete mPanelGroupHolderp; mPanelGroupHolderp = NULL;
358 delete mPanelPlacep; mPanelPlacep = NULL;
359 delete mPanelPlaceSmallp; mPanelPlaceSmallp = NULL;
360 delete mPanelClassifiedp; mPanelClassifiedp = NULL;
361 gSavedSettings.setBOOL("ShowDirectory", FALSE);
362}
363
364void LLFloaterDirectory::focusCurrentPanel() 368void LLFloaterDirectory::focusCurrentPanel()
365{ 369{
366 LLTabContainerCommon* tabs = LLUICtrlFactory::getTabContainerByName(this, "Directory Tabs"); 370 LLTabContainerCommon* tabs = LLUICtrlFactory::getTabContainerByName(this, "Directory Tabs");
@@ -373,25 +377,16 @@ void LLFloaterDirectory::focusCurrentPanel()
373} 377}
374 378
375// static 379// static
376void LLFloaterDirectory::show(void *) 380void LLFloaterDirectory::showPanel(const std::string& tabname)
377{ 381{
378#ifndef LL_RELEASE_FOR_DOWNLOAD 382 // This function gets called when web browser clicks are processed,
379 delete sInstance; 383 // so we don't delete the existing panel, which would delete the
380 sInstance = NULL; 384 // web browser instance currently handling the click. JC
381#endif
382 if (!sInstance) 385 if (!sInstance)
383 { 386 {
384 sInstance = new LLFloaterDirectory("directory"); 387 sInstance = new LLFloaterDirectory("directory");
385 } 388 }
386
387 sInstance->open(); /*Flawfinder: ignore*/ 389 sInstance->open(); /*Flawfinder: ignore*/
388 sInstance->focusCurrentPanel();
389}
390
391// static
392void LLFloaterDirectory::showPanel(const LLString& tabname)
393{
394 show(NULL);
395 sInstance->childShowTab("Directory Tabs", tabname); 390 sInstance->childShowTab("Directory Tabs", tabname);
396 sInstance->focusCurrentPanel(); 391 sInstance->focusCurrentPanel();
397} 392}
@@ -474,6 +469,21 @@ void LLFloaterDirectory::setVisible(BOOL visible)
474 LLFloater::setVisible(visible); 469 LLFloater::setVisible(visible);
475} 470}
476 471
472// virtual
473void LLFloaterDirectory::reshape(S32 width, S32 height, BOOL called_from_parent)
474{
475 // Don't let this floater go below its minimum width and height, ever.
476 if (width < getMinWidth())
477 {
478 width = getMinWidth();
479 }
480 if (height < getMinHeight())
481 {
482 height = getMinHeight();
483 }
484 LLFloater::reshape(width, height, called_from_parent);
485}
486
477void LLFloaterDirectory::onClose(bool app_quitting) 487void LLFloaterDirectory::onClose(bool app_quitting)
478{ 488{
479 setVisible(FALSE); 489 setVisible(FALSE);
@@ -491,3 +501,25 @@ void LLFloaterDirectory::onTabChanged(void* data, bool from_click)
491 gSavedSettings.setString("LastFindPanel", panel->getName()); 501 gSavedSettings.setString("LastFindPanel", panel->getName());
492 } 502 }
493} 503}
504
505// static
506void LLFloaterDirectory::onTabChangedFindAll(void* data, bool from_click)
507{
508 LLFloaterDirectory* self = (LLFloaterDirectory*)data;
509 if (!self) return;
510
511 self->hideAllDetailPanels();
512 LLPanelDirFindAllInterface::focus(self->mFindAllPanel);
513 onTabChanged(data, from_click);
514}
515
516void LLFloaterDirectory::hideAllDetailPanels()
517{
518 if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE);
519 if (mPanelEventp) mPanelEventp->setVisible(FALSE);
520 if (mPanelGroupp) mPanelGroupp->setVisible(FALSE);
521 if (mPanelGroupHolderp) mPanelGroupHolderp->setVisible(FALSE);
522 if (mPanelPlacep) mPanelPlacep->setVisible(FALSE);
523 if (mPanelPlaceSmallp) mPanelPlaceSmallp->setVisible(FALSE);
524 if (mPanelClassifiedp) mPanelClassifiedp->setVisible(FALSE);
525}
diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h
index 7314da7..f7a2905 100644
--- a/linden/indra/newview/llfloaterdirectory.h
+++ b/linden/indra/newview/llfloaterdirectory.h
@@ -33,18 +33,18 @@
33#define LL_LLFLOATERDIRECTORY_H 33#define LL_LLFLOATERDIRECTORY_H
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36#include "lltabcontainer.h"
37#include "viewer.h"
38 36
39class LLDirectoryCore; 37class LLDirectoryCore;
40class LLPanelDirAdvanced;
41class LLPanelDirBrowser; 38class LLPanelDirBrowser;
39
40class LLPanelDirAdvanced;
41class LLPanelDirClassified;
42class LLPanelDirEvents; 42class LLPanelDirEvents;
43class LLPanelDirFind; 43class LLPanelDirFindAll;
44class LLPanelDirFindAllOld;
44class LLPanelDirGroups; 45class LLPanelDirGroups;
45class LLPanelDirLand; 46class LLPanelDirLand;
46class LLPanelDirPeople; 47class LLPanelDirPeople;
47class LLPanelDirClassified;
48class LLPanelDirPlaces; 48class LLPanelDirPlaces;
49class LLPanelDirPopular; 49class LLPanelDirPopular;
50 50
@@ -62,11 +62,15 @@ public:
62 /*virtual*/ ~LLFloaterDirectory(); 62 /*virtual*/ ~LLFloaterDirectory();
63 63
64 /*virtual*/ void setVisible(BOOL visible); 64 /*virtual*/ void setVisible(BOOL visible);
65 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
65 66
66 // Used for toggling God mode, which changes to visibility of 67 // Used for toggling God mode, which changes to visibility of
67 // some picks. 68 // some picks.
68 static void requestClassifieds(); 69 static void requestClassifieds();
69 70
71 // Outside UI widgets can spawn this floater with various tabs
72 // selected.
73 static void showFindAll(const std::string& search_text);
70 static void showClassified(const LLUUID& classified_id); 74 static void showClassified(const LLUUID& classified_id);
71 static void showEvents(S32 event_id); 75 static void showEvents(S32 event_id);
72 static void showPopular(const LLUUID& parcel_id); 76 static void showPopular(const LLUUID& parcel_id);
@@ -78,39 +82,25 @@ public:
78 static void toggleEvents(void*); 82 static void toggleEvents(void*);
79 static void toggleFind(void*); 83 static void toggleFind(void*);
80 static void onTabChanged(void*, bool); 84 static void onTabChanged(void*, bool);
85 static void onTabChangedFindAll(void*, bool);
86
87 void hideAllDetailPanels();
81 88
82protected: 89private:
83 static void show(void *); 90 static void showPanel(const std::string& tabname);
84 static void showPanel(const LLString& tabname); 91 /*virtual*/ void onClose(bool app_quitting);
85 /*virtual*/ void onClose(bool app_quitting);
86 void focusCurrentPanel(); 92 void focusCurrentPanel();
87 93
88protected: 94private:
89 95 // Some special "showByID" functions use these cached pointers.
90 // This determines the order of panels in the directory 96 // They could be replaced by getPanelByName(), perhaps. JC
91 // From Left to Right 97 LLPanelDirFindAll* mFindAllPanel;
92 enum DIRECTORY_PANEL 98 LLPanelDirClassified* mClassifiedPanel;
93 { 99 LLPanelDirEvents* mEventsPanel;
94 DIRECTORY_PANEL_ALL, 100 LLPanelDirPopular* mPopularPanel;
95 DIRECTORY_PANEL_CLASSIFIED, 101 LLPanelDirLand* mLandPanel;
96 DIRECTORY_PANEL_EVENTS,
97 DIRECTORY_PANEL_POPULAR,
98 DIRECTORY_PANEL_LAND,
99 DIRECTORY_PANEL_PLACES,
100 DIRECTORY_PANEL_PEOPLE,
101 DIRECTORY_PANEL_GROUPS,
102 DIRECTORY_PANEL_TOTAL
103 };
104
105 LLPanelDirClassified* mClassifiedPanel;
106 LLPanelDirEvents* mEventsPanel;
107 LLPanelDirPopular* mPopularPanel;
108 LLPanelDirPlaces* mPlacesPanel;
109 LLPanelDirLand* mLandPanel;
110 LLPanelDirPeople* mPeoplePanel;
111 LLPanelDirGroups* mGroupsPanel;
112 LLPanelDirFind* mFindPanel;
113 102
103 static void* createFindAll(void* userdata);
114 static void* createClassified(void* userdata); 104 static void* createClassified(void* userdata);
115 static void* createEvents(void* userdata); 105 static void* createEvents(void* userdata);
116 static void* createPopular(void* userdata); 106 static void* createPopular(void* userdata);
@@ -118,7 +108,7 @@ protected:
118 static void* createLand(void* userdata); 108 static void* createLand(void* userdata);
119 static void* createPeople(void* userdata); 109 static void* createPeople(void* userdata);
120 static void* createGroups(void* userdata); 110 static void* createGroups(void* userdata);
121 static void* createFind(void* userdata); 111 static void* createFindAllOld(void* userdata);
122 112
123 static void* createClassifiedDetail(void* userdata); 113 static void* createClassifiedDetail(void* userdata);
124 static void* createAvatarDetail(void* userdata); 114 static void* createAvatarDetail(void* userdata);
diff --git a/linden/indra/newview/llfloaterevent.cpp b/linden/indra/newview/llfloaterevent.cpp
new file mode 100644
index 0000000..d237fc9
--- /dev/null
+++ b/linden/indra/newview/llfloaterevent.cpp
@@ -0,0 +1,120 @@
1/**
2 * @file llfloaterevent.cpp
3 * @brief LLFloaterEventInfo class implementation
4 *
5 * Event information as shown in a floating window from secondlife:// command
6 * handler.
7 *
8 * $LicenseInfo:firstyear=2002&license=internal$
9 *
10 * Copyright (c) 2002-2007, Linden Research, Inc.
11 *
12 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
13 * this source code is governed by the Linden Lab Source Code Disclosure
14 * Agreement ("Agreement") previously entered between you and Linden
15 * Lab. By accessing, using, copying, modifying or distributing this
16 * software, you acknowledge that you have been informed of your
17 * obligations under the Agreement and agree to abide by those obligations.
18 *
19 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
20 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
21 * COMPLETENESS OR PERFORMANCE.
22 * $/LicenseInfo$
23 */
24
25#include "llviewerprecompiledheaders.h"
26
27#include "llfloaterevent.h"
28
29// viewer project includes
30#include "llcommandhandler.h"
31#include "llpanelevent.h"
32#include "llvieweruictrlfactory.h"
33
34// linden library includes
35#include "lluuid.h"
36
37////////////////////////////////////////////////////////////////////////////
38// LLFloaterEventInfo
39
40//-----------------------------------------------------------------------------
41// Globals
42//-----------------------------------------------------------------------------
43
44LLMap< U32, LLFloaterEventInfo* > gEventInfoInstances;
45
46class LLEventHandler : public LLCommandHandler
47{
48public:
49 LLEventHandler() : LLCommandHandler("event") { }
50 bool handle(const std::vector<std::string>& tokens)
51 {
52 if (tokens.size() < 2)
53 {
54 return false;
55 }
56 U32 event_id = atoi(tokens[0].c_str());
57 if (tokens[1] == "about")
58 {
59 LLFloaterEventInfo::show(event_id);
60 return true;
61 }
62 return false;
63 }
64};
65LLEventHandler gEventHandler;
66
67LLFloaterEventInfo::LLFloaterEventInfo(const std::string& name, const U32 event_id)
68: LLFloater(name),
69 mEventID( event_id )
70{
71
72 mFactoryMap["event_details_panel"] = LLCallbackMap(LLFloaterEventInfo::createEventDetail, this);
73 gUICtrlFactory->buildFloater(this, "floater_preview_event.xml", &getFactoryMap());
74 gEventInfoInstances.addData(event_id, this);
75}
76
77LLFloaterEventInfo::~LLFloaterEventInfo()
78{
79 // child views automatically deleted
80 gEventInfoInstances.removeData(mEventID);
81}
82
83void LLFloaterEventInfo::displayEventInfo(const U32 event_id)
84{
85 mPanelEventp->setEventID(event_id);
86 this->setFrontmost(true);
87}
88
89// static
90void* LLFloaterEventInfo::createEventDetail(void* userdata)
91{
92 LLFloaterEventInfo *self = (LLFloaterEventInfo*)userdata;
93 self->mPanelEventp = new LLPanelEvent();
94 gUICtrlFactory->buildPanel(self->mPanelEventp, "panel_event.xml");
95
96 return self->mPanelEventp;
97}
98
99// static
100LLFloaterEventInfo* LLFloaterEventInfo::show(const U32 event_id)
101{
102 LLFloaterEventInfo *floater;
103 if (gEventInfoInstances.checkData(event_id))
104 {
105 // ...bring that window to front
106 floater = gEventInfoInstances.getData(event_id);
107 floater->open(); /*Flawfinder: ignore*/
108 floater->setFrontmost(true);
109 }
110 else
111 {
112 floater = new LLFloaterEventInfo("eventinfo", event_id );
113 floater->center();
114 floater->open(); /*Flawfinder: ignore*/
115 floater->displayEventInfo(event_id);
116 floater->setFrontmost(true);
117 }
118
119 return floater;
120}
diff --git a/linden/indra/newview/llfloaterevent.h b/linden/indra/newview/llfloaterevent.h
new file mode 100644
index 0000000..2946ff4
--- /dev/null
+++ b/linden/indra/newview/llfloaterevent.h
@@ -0,0 +1,52 @@
1/**
2 * @file llfloaterevent.h
3 * @brief LLFloaterEvent class implementation
4 *
5 * $LicenseInfo:firstyear=2002&license=internal$
6 *
7 * Copyright (c) 2002-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22/**
23* Event information as shown in a floating window from a secondlife:// url.
24* Just a wrapper for LLPanelEvent.
25*/
26
27#ifndef LL_LLFLOATEREVENT_H
28#define LL_LLFLOATEREVENT_H
29
30#include "llfloater.h"
31
32class LLPanelEvent;
33
34class LLFloaterEventInfo : public LLFloater
35{
36public:
37 LLFloaterEventInfo(const std::string& name, const U32 event_id );
38 /*virtual*/ ~LLFloaterEventInfo();
39
40 void displayEventInfo(const U32 event_id);
41
42 static LLFloaterEventInfo* show(const U32 event_id);
43
44 static void* createEventDetail(void* userdata);
45
46private:
47 U32 mEventID; // for which event is this window?
48 LLPanelEvent* mPanelEventp;
49
50};
51
52#endif // LL_LLFLOATEREVENT_H
diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp
index 3ddf968..eb3b692 100644
--- a/linden/indra/newview/llfloatergroupinfo.cpp
+++ b/linden/indra/newview/llfloatergroupinfo.cpp
@@ -1,6 +1,8 @@
1/** 1/**
2 * @file llfloatergroupinfo.cpp 2 * @file llfloatergroupinfo.cpp
3 * @brief LLFloaterGroupInfo class implementation 3 * @brief LLFloaterGroupInfo class implementation
4 * Floater used both for display of group information and for
5 * creating new groups.
4 * 6 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$ 7 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 8 *
@@ -29,23 +31,18 @@
29 * $/LicenseInfo$ 31 * $/LicenseInfo$
30 */ 32 */
31 33
32/**
33 * Floater used both for display of group information and for
34 * creating new groups.
35 *
36 * Help, I'm trapped in a software factory!
37 */
38
39#include "llviewerprecompiledheaders.h" 34#include "llviewerprecompiledheaders.h"
40 35
41#include "llfloatergroupinfo.h" 36#include "llfloatergroupinfo.h"
42 37
43#include "llagent.h" 38#include "llagent.h"
44#include "llcachename.h" 39#include "llcommandhandler.h"
45#include "llcommandhandler.h" 40#include "llcommandhandler.h"
46#include "llpanelgroup.h" 41#include "llpanelgroup.h"
47#include "llviewermessage.h" // for inventory_offer_callback 42#include "llviewermessage.h" // for inventory_offer_callback
43//#include "llviewerwindow.h"
48 44
45#include "llcachename.h"
49 46
50const char FLOATER_TITLE[] = "Group Information"; 47const char FLOATER_TITLE[] = "Group Information";
51const LLRect FGI_RECT(0, 530, 420, 0); 48const LLRect FGI_RECT(0, 530, 420, 0);
diff --git a/linden/indra/newview/llfloaterhtml.cpp b/linden/indra/newview/llfloaterhtml.cpp
index ebcf29f..86caaf5 100644
--- a/linden/indra/newview/llfloaterhtml.cpp
+++ b/linden/indra/newview/llfloaterhtml.cpp
@@ -84,10 +84,9 @@ LLFloaterHtml::LLFloaterHtml()
84 // open links in internal browser 84 // open links in internal browser
85 mWebBrowser->setOpenInExternalBrowser( false ); 85 mWebBrowser->setOpenInExternalBrowser( false );
86 86
87// *FIX: code in merge sl-search-8 87 // don't automatically open secondlife links since we want to catch
88// // don't automatically open secondlife links since we want to catch 88 // special ones that do other stuff (like open F1 Help)
89// // special ones that do other stuff (like open F1 Help) 89 mWebBrowser->setOpenSLURLsInMap( false );
90// mWebBrowser->setOpenSLURLsInMap( false );
91 } 90 }
92#endif // LL_LIBXUL_ENABLED 91#endif // LL_LIBXUL_ENABLED
93} 92}
@@ -116,7 +115,7 @@ void LLFloaterHtml::draw()
116 bool enable_forward = mWebBrowser->canNavigateForward(); 115 bool enable_forward = mWebBrowser->canNavigateForward();
117 childSetEnabled( "forward_btn", enable_forward ); 116 childSetEnabled( "forward_btn", enable_forward );
118 }; 117 };
119#endif 118#endif // LL_LIBXUL_ENABLED
120 119
121 LLFloater::draw(); 120 LLFloater::draw();
122} 121}
@@ -180,7 +179,7 @@ void LLFloaterHtml::onClickBack( void* data )
180 self->mWebBrowser->navigateBack(); 179 self->mWebBrowser->navigateBack();
181 }; 180 };
182 }; 181 };
183#endif 182#endif // LL_LIBXUL_ENABLED
184} 183}
185 184
186//////////////////////////////////////////////////////////////////////////////// 185////////////////////////////////////////////////////////////////////////////////
@@ -204,7 +203,7 @@ void LLFloaterHtml::onClickHome( void* data )
204 self->mWebBrowser->navigateTo( "http://google.com" ); 203 self->mWebBrowser->navigateTo( "http://google.com" );
205 } 204 }
206 }; 205 };
207#endif 206#endif // LL_LIBXUL_ENABLED
208 }; 207 };
209} 208}
210 209
@@ -220,7 +219,7 @@ void LLFloaterHtml::onClickForward( void* data )
220 { 219 {
221 self->mWebBrowser->navigateForward(); 220 self->mWebBrowser->navigateForward();
222 }; 221 };
223#endif 222#endif // LL_LIBXUL_ENABLED
224 }; 223 };
225} 224}
226 225
@@ -228,17 +227,17 @@ void LLFloaterHtml::onClickForward( void* data )
228// static 227// static
229void LLFloaterHtml::onCommitUrlEdit(LLUICtrl* ctrl, void* user_data) 228void LLFloaterHtml::onCommitUrlEdit(LLUICtrl* ctrl, void* user_data)
230{ 229{
230#if LL_LIBXUL_ENABLED
231 LLFloaterHtml* self = (LLFloaterHtml*)user_data; 231 LLFloaterHtml* self = (LLFloaterHtml*)user_data;
232 232
233 LLLineEditor* editor = (LLLineEditor*)ctrl; 233 LLLineEditor* editor = (LLLineEditor*)ctrl;
234 std::string url = editor->getText(); 234 std::string url = editor->getText();
235 235
236#if LL_LIBXUL_ENABLED
237 if ( self->mWebBrowser ) 236 if ( self->mWebBrowser )
238 { 237 {
239 self->mWebBrowser->navigateTo( url ); 238 self->mWebBrowser->navigateTo( url );
240 }; 239 };
241#endif 240#endif // LL_LIBXUL_ENABLED
242} 241}
243 242
244//////////////////////////////////////////////////////////////////////////////// 243////////////////////////////////////////////////////////////////////////////////
@@ -256,7 +255,7 @@ void LLFloaterHtml::onClickGo( void* data )
256 { 255 {
257 self->mWebBrowser->navigateTo( url ); 256 self->mWebBrowser->navigateTo( url );
258 }; 257 };
259#endif 258#endif // LL_LIBXUL_ENABLED
260 }; 259 };
261 }; 260 };
262} 261}
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index 10afce8..70de21d 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -49,14 +49,13 @@ class LLFloaterHtmlHelp :
49 public LLWebBrowserCtrlObserver 49 public LLWebBrowserCtrlObserver
50{ 50{
51public: 51public:
52 LLFloaterHtmlHelp(std::string start_url = ""); 52 LLFloaterHtmlHelp(std::string start_url, std::string title);
53 virtual ~LLFloaterHtmlHelp(); 53 virtual ~LLFloaterHtmlHelp();
54 54
55 virtual void onClose( bool app_quitting ); 55 virtual void onClose( bool app_quitting );
56 virtual void draw(); 56 virtual void draw();
57 57
58 static void show(); 58 static void show(std::string url, std::string title);
59 static void show(std::string url);
60 static void onClickBack( void* data ); 59 static void onClickBack( void* data );
61 static void onClickHome( void* data ); 60 static void onClickHome( void* data );
62 static void onClickForward( void* data ); 61 static void onClickForward( void* data );
@@ -88,7 +87,7 @@ BOOL LLFloaterHtmlHelp::sFloaterOpened = FALSE;
88 87
89//////////////////////////////////////////////////////////////////////////////// 88////////////////////////////////////////////////////////////////////////////////
90// 89//
91LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url) 90LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title)
92: LLFloater( "HTML Help" ), 91: LLFloater( "HTML Help" ),
93 mWebBrowser( 0 ), 92 mWebBrowser( 0 ),
94 mStatusTextContents( "" ), 93 mStatusTextContents( "" ),
@@ -102,10 +101,12 @@ LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url)
102 childSetAction("back_btn", onClickBack, this); 101 childSetAction("back_btn", onClickBack, this);
103 childSetAction("home_btn", onClickHome, this); 102 childSetAction("home_btn", onClickHome, this);
104 childSetAction("forward_btn", onClickForward, this); 103 childSetAction("forward_btn", onClickForward, this);
105 childSetAction("close_btn", onClickClose, this);
106 104
107 setDefaultBtn("close_btn"); 105 if (!title.empty())
108 106 {
107 setTitle(title);
108 }
109
109 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_help_browser" ); 110 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_help_browser" );
110 if ( mWebBrowser ) 111 if ( mWebBrowser )
111 { 112 {
@@ -168,7 +169,7 @@ void LLFloaterHtmlHelp::draw()
168 169
169//////////////////////////////////////////////////////////////////////////////// 170////////////////////////////////////////////////////////////////////////////////
170// 171//
171void LLFloaterHtmlHelp::show(std::string url) 172void LLFloaterHtmlHelp::show(std::string url, std::string title)
172{ 173{
173 gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, (void*) NULL); 174 gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, (void*) NULL);
174 175
@@ -188,7 +189,7 @@ void LLFloaterHtmlHelp::show(std::string url)
188 return; 189 return;
189 } 190 }
190 191
191 LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url); 192 LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url, title);
192 193
193 // reposition floater from saved settings 194 // reposition floater from saved settings
194 LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" ); 195 LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" );
@@ -313,9 +314,9 @@ LLViewerHtmlHelp::~LLViewerHtmlHelp()
313 LLUI::setHtmlHelp(NULL); 314 LLUI::setHtmlHelp(NULL);
314} 315}
315 316
316void LLViewerHtmlHelp::show(std::string url) 317void LLViewerHtmlHelp::show(std::string url, std::string title)
317{ 318{
318 LLFloaterHtmlHelp::show(url); 319 LLFloaterHtmlHelp::show(url, title);
319} 320}
320 321
321BOOL LLViewerHtmlHelp::getFloaterOpened() 322BOOL LLViewerHtmlHelp::getFloaterOpened()
diff --git a/linden/indra/newview/llfloaterhtmlhelp.h b/linden/indra/newview/llfloaterhtmlhelp.h
index c9a6d5b..28f3061 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.h
+++ b/linden/indra/newview/llfloaterhtmlhelp.h
@@ -42,7 +42,7 @@ public:
42 LLViewerHtmlHelp(); 42 LLViewerHtmlHelp();
43 virtual ~LLViewerHtmlHelp(); 43 virtual ~LLViewerHtmlHelp();
44 44
45 /*virtual*/ void show(std::string start_url = std::string()); 45 /*virtual*/ void show(std::string start_url = "", std::string title = "");
46 /*virtual*/ BOOL getFloaterOpened(); 46 /*virtual*/ BOOL getFloaterOpened();
47}; 47};
48 48
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp
index 43c39aa..283b3f4 100644
--- a/linden/indra/newview/llfloaterland.cpp
+++ b/linden/indra/newview/llfloaterland.cpp
@@ -355,7 +355,6 @@ BOOL LLPanelLandGeneral::postBuild()
355 childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe); 355 childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe);
356 childSetUserData("Name", this); 356 childSetUserData("Name", this);
357 357
358
359 mEditDesc = LLUICtrlFactory::getTextEditorByName(this, "Description"); 358 mEditDesc = LLUICtrlFactory::getTextEditorByName(this, "Description");
360 mEditDesc->setCommitOnFocusLost(TRUE); 359 mEditDesc->setCommitOnFocusLost(TRUE);
361 mEditDesc->setCommitCallback(onCommitAny); 360 mEditDesc->setCommitCallback(onCommitAny);
@@ -1865,13 +1864,11 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
1865 mLocationText(NULL), 1864 mLocationText(NULL),
1866 mSetBtn(NULL), 1865 mSetBtn(NULL),
1867 mClearBtn(NULL), 1866 mClearBtn(NULL),
1868 mAllowPublishCtrl(NULL),
1869 mMatureCtrl(NULL), 1867 mMatureCtrl(NULL),
1870 mPushRestrictionCtrl(NULL), 1868 mPushRestrictionCtrl(NULL),
1871 mPublishHelpButton(NULL), 1869 mPublishHelpButton(NULL),
1872 mParcel(parcel) 1870 mParcel(parcel)
1873{ 1871{
1874
1875} 1872}
1876 1873
1877 1874
@@ -1932,7 +1929,7 @@ BOOL LLPanelLandOptions::postBuild()
1932 mPublishHelpButton->setClickedCallback(onClickPublishHelp, this); 1929 mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
1933 1930
1934 1931
1935 if (gAgent.mAccess < SIM_ACCESS_MATURE) 1932 if (gAgent.isTeen())
1936 { 1933 {
1937 // Disable these buttons if they are PG (Teen) users 1934 // Disable these buttons if they are PG (Teen) users
1938 mPublishHelpButton->setVisible(FALSE); 1935 mPublishHelpButton->setVisible(FALSE);
@@ -2147,7 +2144,7 @@ void LLPanelLandOptions::refresh()
2147 mMatureCtrl->setEnabled( can_change_identity ); 2144 mMatureCtrl->setEnabled( can_change_identity );
2148 mPublishHelpButton->setEnabled( can_change_identity ); 2145 mPublishHelpButton->setEnabled( can_change_identity );
2149 2146
2150 if (gAgent.mAccess < SIM_ACCESS_MATURE) 2147 if (gAgent.isTeen())
2151 { 2148 {
2152 // Disable these buttons if they are PG (Teen) users 2149 // Disable these buttons if they are PG (Teen) users
2153 mPublishHelpButton->setVisible(FALSE); 2150 mPublishHelpButton->setVisible(FALSE);
diff --git a/linden/indra/newview/llfloaterland.h b/linden/indra/newview/llfloaterland.h
index 9eb9172..d8b7ecf 100644
--- a/linden/indra/newview/llfloaterland.h
+++ b/linden/indra/newview/llfloaterland.h
@@ -42,17 +42,18 @@
42typedef std::set<LLUUID, lluuid_less> uuid_list_t; 42typedef std::set<LLUUID, lluuid_less> uuid_list_t;
43const F32 CACHE_REFRESH_TIME = 2.5f; 43const F32 CACHE_REFRESH_TIME = 2.5f;
44 44
45class LLTextBox; 45class LLButton;
46class LLCheckBoxCtrl; 46class LLCheckBoxCtrl;
47class LLRadioGroup; 47class LLRadioGroup;
48class LLComboBox; 48class LLComboBox;
49class LLButton;
50class LLNameListCtrl; 49class LLNameListCtrl;
51class LLSpinCtrl; 50class LLSpinCtrl;
52class LLLineEditor; 51class LLLineEditor;
53class LLRadioGroup; 52class LLRadioGroup;
54class LLParcelSelectionObserver; 53class LLParcelSelectionObserver;
55class LLTabContainer; 54class LLTabContainer;
55class LLTextBox;
56class LLTextEditor;
56class LLTextureCtrl; 57class LLTextureCtrl;
57class LLViewerTextEditor; 58class LLViewerTextEditor;
58class LLParcelSelection; 59class LLParcelSelection;
@@ -347,7 +348,6 @@ protected:
347 LLButton* mSetBtn; 348 LLButton* mSetBtn;
348 LLButton* mClearBtn; 349 LLButton* mClearBtn;
349 350
350 LLCheckBoxCtrl *mAllowPublishCtrl;
351 LLCheckBoxCtrl *mMatureCtrl; 351 LLCheckBoxCtrl *mMatureCtrl;
352 LLCheckBoxCtrl *mPushRestrictionCtrl; 352 LLCheckBoxCtrl *mPushRestrictionCtrl;
353 LLButton *mPublishHelpButton; 353 LLButton *mPublishHelpButton;
diff --git a/linden/indra/newview/llfloaterlandmark.cpp b/linden/indra/newview/llfloaterlandmark.cpp
new file mode 100644
index 0000000..14277c6
--- /dev/null
+++ b/linden/indra/newview/llfloaterlandmark.cpp
@@ -0,0 +1,471 @@
1/**
2 * @file lllandmark.cpp
3 * @author Richard Nelson, James Cook, Sam Kolb
4 * @brief LLLandmarkCtrl class implementation including related functions
5 *
6 * $LicenseInfo:firstyear=2002&license=internal$
7 *
8 * Copyright (c) 2002-2007, Linden Research, Inc.
9 *
10 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
11 * this source code is governed by the Linden Lab Source Code Disclosure
12 * Agreement ("Agreement") previously entered between you and Linden
13 * Lab. By accessing, using, copying, modifying or distributing this
14 * software, you acknowledge that you have been informed of your
15 * obligations under the Agreement and agree to abide by those obligations.
16 *
17 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
18 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
19 * COMPLETENESS OR PERFORMANCE.
20 * $/LicenseInfo$
21 */
22
23#include "llviewerprecompiledheaders.h"
24
25#include "llfloaterlandmark.h"
26
27#include "llagent.h"
28#include "llviewerimagelist.h"
29#include "llcheckboxctrl.h"
30#include "llcombobox.h"
31#include "llbutton.h"
32#include "lldraghandle.h"
33#include "llfocusmgr.h"
34#include "llviewerimage.h"
35#include "llviewerparcelmgr.h"
36#include "llfolderview.h"
37#include "llinventory.h"
38#include "llinventorymodel.h"
39#include "llinventoryview.h"
40#include "lllineeditor.h"
41#include "llui.h"
42#include "llviewerinventory.h"
43#include "llpermissions.h"
44#include "llsaleinfo.h"
45#include "llassetstorage.h"
46#include "lltextbox.h"
47#include "llparcel.h"
48#include "llresizehandle.h"
49#include "llscrollcontainer.h"
50#include "lltoolmgr.h"
51#include "lltoolpipette.h"
52
53#include "lltool.h"
54#include "llviewerwindow.h"
55#include "llviewerobject.h"
56#include "llviewercontrol.h"
57#include "llglheaders.h"
58#include "llvieweruictrlfactory.h"
59
60#include "roles_constants.h"
61
62
63
64static const S32 CLOSE_BTN_WIDTH = 100;
65const S32 PIPETTE_BTN_WIDTH = 32;
66static const S32 HPAD = 4;
67static const S32 VPAD = 4;
68static const S32 LINE = 16;
69static const S32 SMALL_BTN_WIDTH = 64;
70static const S32 TEX_PICKER_MIN_WIDTH =
71 (HPAD +
72 CLOSE_BTN_WIDTH +
73 HPAD +
74 CLOSE_BTN_WIDTH +
75 HPAD +
76 SMALL_BTN_WIDTH +
77 HPAD +
78 SMALL_BTN_WIDTH +
79 HPAD +
80 30 +
81 RESIZE_HANDLE_WIDTH * 2);
82static const S32 CLEAR_BTN_WIDTH = 50;
83static const S32 TEX_PICKER_MIN_HEIGHT = 290;
84static const S32 FOOTER_HEIGHT = 100;
85static const S32 BORDER_PAD = HPAD;
86static const S32 TEXTURE_INVENTORY_PADDING = 30;
87static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;
88static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;
89static const F32 CONTEXT_FADE_TIME = 0.08f;
90
91//static const char CURRENT_IMAGE_NAME[] = "Current Landmark";
92//static const char WHITE_IMAGE_NAME[] = "Blank Landmark";
93//static const char NO_IMAGE_NAME[] = "None";
94
95
96LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
97 :
98 mTentativeLabel(NULL),
99 mResolutionLabel(NULL),
100 mIsDirty( FALSE ),
101 mActive( TRUE ),
102 mSearchEdit(NULL),
103 mContextConeOpacity(0.f)
104{
105 gUICtrlFactory->buildFloater(this,"floater_landmark_ctrl.xml");
106
107 mTentativeLabel = LLUICtrlFactory::getTextBoxByName(this,"Multiple");
108
109 mResolutionLabel = LLUICtrlFactory::getTextBoxByName(this,"unknown");
110
111
112 childSetCommitCallback("show_folders_check", onShowFolders, this);
113 childSetVisible("show_folders_check", FALSE);
114
115 mSearchEdit = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR);
116 mSearchEdit->setSearchCallback(onSearchEdit, this);
117
118 mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("inventory panel", WIDGET_TYPE_INVENTORY_PANEL);
119
120 if(mInventoryPanel)
121 {
122 U32 filter_types = 0x0;
123 filter_types |= 0x1 << LLInventoryType::IT_LANDMARK;
124 // filter_types |= 0x1 << LLInventoryType::IT_SNAPSHOT;
125
126 mInventoryPanel->setFilterTypes(filter_types);
127 //mInventoryPanel->setFilterPermMask(getFilterPermMask()); //Commented out due to no-copy texture loss.
128 mInventoryPanel->setSelectCallback(onSelectionChange, this);
129 mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
130 mInventoryPanel->setAllowMultiSelect(FALSE);
131
132 // store this filter as the default one
133 mInventoryPanel->getRootFolder()->getFilter()->markDefault();
134
135 // Commented out to stop opening all folders with textures
136 mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_LANDMARK);
137
138 // don't put keyboard focus on selected item, because the selection callback
139 // will assume that this was user input
140 mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO);
141 }
142
143 mSavedFolderState = new LLSaveFolderState();
144 mNoCopyLandmarkSelected = FALSE;
145
146 childSetAction("Close", LLFloaterLandmark::onBtnClose,this);
147 childSetAction("New", LLFloaterLandmark::onBtnNew,this);
148 childSetAction("NewFolder", LLFloaterLandmark::onBtnNewFolder,this);
149 childSetAction("Edit", LLFloaterLandmark::onBtnEdit,this);
150 childSetAction("Rename", LLFloaterLandmark::onBtnRename,this);
151 childSetAction("Delete", LLFloaterLandmark::onBtnDelete,this);
152
153 setCanMinimize(FALSE);
154
155 mSavedFolderState->setApply(FALSE);
156}
157
158LLFloaterLandmark::~LLFloaterLandmark()
159{
160 delete mSavedFolderState;
161}
162
163void LLFloaterLandmark::setActive( BOOL active )
164{
165 mActive = active;
166}
167
168// virtual
169BOOL LLFloaterLandmark::handleDragAndDrop(
170 S32 x, S32 y, MASK mask,
171 BOOL drop,
172 EDragAndDropType cargo_type, void *cargo_data,
173 EAcceptance *accept,
174 LLString& tooltip_msg)
175{
176 BOOL handled = FALSE;
177
178 if (cargo_type == DAD_LANDMARK)
179 {
180 LLInventoryItem *item = (LLInventoryItem *)cargo_data;
181
182 BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
183 BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
184 BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
185 gAgent.getID());
186
187 PermissionMask item_perm_mask = 0;
188 if (copy) item_perm_mask |= PERM_COPY;
189 if (mod) item_perm_mask |= PERM_MODIFY;
190 if (xfer) item_perm_mask |= PERM_TRANSFER;
191
192 //PermissionMask filter_perm_mask = getFilterPermMask(); Commented out due to no-copy texture loss.
193 PermissionMask filter_perm_mask = mImmediateFilterPermMask;
194 if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask )
195 {
196
197 *accept = ACCEPT_YES_SINGLE;
198 }
199 else
200 {
201 *accept = ACCEPT_NO;
202 }
203 }
204 else
205 {
206 *accept = ACCEPT_NO;
207 }
208
209 handled = TRUE;
210 lldebugst(LLERR_USER_INPUT) << "dragAndDrop handled by LLFloaterLandmark " << getName() << llendl;
211
212 return handled;
213}
214
215BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
216{
217 LLFolderView* root_folder = mInventoryPanel->getRootFolder();
218
219 if (root_folder && mSearchEdit)
220 {
221 if (!called_from_parent && mSearchEdit->hasFocus() &&
222 (key == KEY_RETURN || key == KEY_DOWN) &&
223 mask == MASK_NONE)
224 {
225 if (!root_folder->getCurSelectedItem())
226 {
227 LLFolderViewItem* itemp = root_folder->getItemByID(gAgent.getInventoryRootID());
228 if (itemp)
229 {
230 root_folder->setSelection(itemp, FALSE, FALSE);
231 }
232 }
233 root_folder->scrollToShowSelection();
234
235 // move focus to inventory proper
236 root_folder->setFocus(TRUE);
237
238 return TRUE;
239 }
240
241 if (root_folder->hasFocus() && key == KEY_UP)
242 {
243 mSearchEdit->focusFirstItem(TRUE);
244 }
245 }
246
247 return LLFloater::handleKeyHere(key, mask, called_from_parent);
248}
249
250// virtual
251void LLFloaterLandmark::onClose(bool app_quitting)
252{
253 destroy();
254}
255
256
257
258const LLUUID& LLFloaterLandmark::findItemID(const LLUUID& asset_id, BOOL copyable_only)
259{
260 LLViewerInventoryCategory::cat_array_t cats;
261 LLViewerInventoryItem::item_array_t items;
262 LLAssetIDMatches asset_id_matches(asset_id);
263 gInventory.collectDescendentsIf(LLUUID::null,
264 cats,
265 items,
266 LLInventoryModel::INCLUDE_TRASH,
267 asset_id_matches);
268
269 if (items.count())
270 {
271 // search for copyable version first
272 for (S32 i = 0; i < items.count(); i++)
273 {
274 LLInventoryItem* itemp = items[i];
275 LLPermissions item_permissions = itemp->getPermissions();
276 if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
277 {
278 return itemp->getUUID();
279 }
280 }
281 // otherwise just return first instance, unless copyable requested
282 if (copyable_only)
283 {
284 return LLUUID::null;
285 }
286 else
287 {
288 return items[0]->getUUID();
289 }
290 }
291
292 return LLUUID::null;
293}
294
295// static
296void LLFloaterLandmark::onBtnClose(void* userdata)
297{
298 LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
299 self->mIsDirty = FALSE;
300 self->close();
301}
302
303// static
304void LLFloaterLandmark::onBtnEdit(void* userdata)
305{
306 LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
307 // There isn't one, so make a new preview
308 LLViewerInventoryItem* itemp = gInventory.getItem(self->mImageAssetID);
309 if(itemp)
310 {
311 open_landmark(itemp, itemp->getName(), TRUE);
312 }
313}
314// static
315void LLFloaterLandmark::onBtnNew(void* userdata)
316{
317 LLViewerRegion* agent_region = gAgent.getRegion();
318 if(!agent_region)
319 {
320 llwarns << "No agent region" << llendl;
321 return;
322 }
323 LLParcel* agent_parcel = gParcelMgr->getAgentParcel();
324 if (!agent_parcel)
325 {
326 llwarns << "No agent parcel" << llendl;
327 return;
328 }
329 if (!agent_parcel->getAllowLandmark()
330 && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK))
331 {
332 gViewerWindow->alertXml("CannotCreateLandmarkNotOwner");
333 return;
334 }
335
336 LLUUID folder_id;
337 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
338 std::string pos_string;
339 gAgent.buildLocationString(pos_string);
340
341 create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
342 folder_id, LLTransactionID::tnull,
343 pos_string, pos_string, // name, desc
344 LLAssetType::AT_LANDMARK,
345 LLInventoryType::IT_LANDMARK,
346 NOT_WEARABLE, PERM_ALL,
347 NULL);
348}
349// static
350void LLFloaterLandmark::onBtnNewFolder(void* userdata)
351{
352
353}
354// static
355void LLFloaterLandmark::onBtnDelete(void* userdata)
356{
357 LLFloaterLandmark* self = (LLFloaterLandmark*)userdata;
358
359 LLViewerInventoryItem* item = gInventory.getItem(self->mImageAssetID);
360 if(item)
361 {
362 // Move the item to the trash
363 LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
364 if (item->getParentUUID() != trash_id)
365 {
366 LLInventoryModel::update_list_t update;
367 LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
368 update.push_back(old_folder);
369 LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1);
370 update.push_back(new_folder);
371 gInventory.accountForUpdate(update);
372
373 LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
374 new_item->setParent(trash_id);
375 // no need to restamp it though it's a move into trash because
376 // it's a brand new item already.
377 new_item->updateParentOnServer(FALSE);
378 gInventory.updateItem(new_item);
379 gInventory.notifyObservers();
380 }
381 }
382
383 // Delete the item entirely
384 /*
385 item->removeFromServer();
386 gInventory.deleteObject(item->getUUID());
387 gInventory.notifyObservers();
388 */
389
390
391}
392
393// static
394void LLFloaterLandmark::onBtnRename(void* userdata)
395{
396
397}
398
399// static
400void LLFloaterLandmark::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data)
401{
402 LLFloaterLandmark* self = (LLFloaterLandmark*)data;
403 if (items.size())
404 {
405 LLFolderViewItem* first_item = items.front();
406 LLInventoryItem* itemp = gInventory.getItem(first_item->getListener()->getUUID());
407 self->mNoCopyLandmarkSelected = FALSE;
408 if (itemp)
409 {
410 if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
411 {
412 self->mNoCopyLandmarkSelected = TRUE;
413 }
414 self->mImageAssetID = itemp->getUUID();
415 self->mIsDirty = TRUE;
416 }
417 }
418}
419
420// static
421void LLFloaterLandmark::onShowFolders(LLUICtrl* ctrl, void *user_data)
422{
423 LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
424 LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
425
426 if (check_box->get())
427 {
428 picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
429 }
430 else
431 {
432 picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NO_FOLDERS);
433 }
434}
435
436void LLFloaterLandmark::onSearchEdit(const LLString& search_string, void* user_data )
437{
438 LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
439
440 std::string upper_case_search_string = search_string;
441 LLString::toUpper(upper_case_search_string);
442
443 if (upper_case_search_string.empty())
444 {
445 if (picker->mInventoryPanel->getFilterSubString().empty())
446 {
447 // current filter and new filter empty, do nothing
448 return;
449 }
450
451 picker->mSavedFolderState->setApply(TRUE);
452 picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
453 // add folder with current item to list of previously opened folders
454 LLOpenFoldersWithSelection opener;
455 picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener);
456 picker->mInventoryPanel->getRootFolder()->scrollToShowSelection();
457
458 }
459 else if (picker->mInventoryPanel->getFilterSubString().empty())
460 {
461 // first letter in search term, save existing folder open state
462 if (!picker->mInventoryPanel->getRootFolder()->isFilterModified())
463 {
464 picker->mSavedFolderState->setApply(FALSE);
465 picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
466 }
467 }
468
469 picker->mInventoryPanel->setFilterSubString(upper_case_search_string);
470}
471
diff --git a/linden/indra/newview/llfloaterlandmark.h b/linden/indra/newview/llfloaterlandmark.h
new file mode 100644
index 0000000..ad52596
--- /dev/null
+++ b/linden/indra/newview/llfloaterlandmark.h
@@ -0,0 +1,107 @@
1/**
2 * @file lltexturectrl.h
3 * @author Richard Nelson, James Cook
4 * @brief LLTextureCtrl class header file including related functions
5 *
6 * $LicenseInfo:firstyear=2002&license=internal$
7 *
8 * Copyright (c) 2002-2007, Linden Research, Inc.
9 *
10 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
11 * this source code is governed by the Linden Lab Source Code Disclosure
12 * Agreement ("Agreement") previously entered between you and Linden
13 * Lab. By accessing, using, copying, modifying or distributing this
14 * software, you acknowledge that you have been informed of your
15 * obligations under the Agreement and agree to abide by those obligations.
16 *
17 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
18 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
19 * COMPLETENESS OR PERFORMANCE.
20 * $/LicenseInfo$
21 */
22
23#ifndef LL_LLFLOATERLANDMARK_H
24#define LL_LLFLOATERLANDMARK_H
25
26#include "llcoord.h"
27#include "llfloater.h"
28#include "llstring.h"
29#include "lluictrl.h"
30#include "llpermissionsflags.h"
31
32class LLButton;
33class LLFloaterTexturePicker;
34class LLInventoryItem;
35class LLTextBox;
36class LLViewBorder;
37class LLFolderViewItem;
38class LLSearchEditor;
39class LLInventoryPanel;
40class LLSaveFolderState;
41
42// used for setting drag & drop callbacks.
43typedef BOOL (*drag_n_drop_callback)(LLUICtrl*, LLInventoryItem*, void*);
44
45
46//////////////////////////////////////////////////////////////////////////////////////////
47// LLFloaterLandmark
48
49class LLFloaterLandmark: public LLFloater, public LLUISingleton<LLFloaterLandmark>
50{
51public:
52 LLFloaterLandmark(const LLSD& data);
53 virtual ~LLFloaterLandmark();
54
55 // LLView overrides
56 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
57 BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
58 EAcceptance *accept,
59 LLString& tooltip_msg);
60 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
61
62 // LLFloater overrides
63 virtual void onClose(bool app_quitting);
64
65 const LLUUID& getAssetID() { return mImageAssetID; }
66 const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only);
67
68 void setDirty( BOOL b ) { mIsDirty = b; }
69 BOOL isDirty() { return mIsDirty; }
70 void setActive( BOOL active );
71
72 static void onBtnClose( void* userdata );
73 static void onBtnNew( void* userdata );
74 static void onBtnEdit( void* userdata );
75 static void onBtnDelete( void* userdata );
76 static void onBtnNewFolder( void* userdata );
77 static void onBtnRename( void* userdata );
78 static void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data);
79 static void onShowFolders(LLUICtrl* ctrl, void* userdata);
80 static void onSearchEdit(const LLString& search_string, void* user_data );
81
82protected:
83 LLPointer<LLViewerImage> mLandmarkp;
84
85 LLUUID mImageAssetID; // Currently selected texture
86
87 LLUUID mWhiteImageAssetID;
88 LLUUID mSpecialCurrentImageAssetID; // Used when the asset id has no corresponding texture in the user's inventory.
89 LLUUID mOriginalImageAssetID;
90
91 LLTextBox* mTentativeLabel;
92 LLTextBox* mResolutionLabel;
93
94 LLString mPendingName;
95 BOOL mIsDirty;
96 BOOL mActive;
97
98 LLSearchEditor* mSearchEdit;
99 LLInventoryPanel* mInventoryPanel;
100 PermissionMask mImmediateFilterPermMask;
101 PermissionMask mNonImmediateFilterPermMask;
102 BOOL mNoCopyLandmarkSelected;
103 F32 mContextConeOpacity;
104 LLSaveFolderState* mSavedFolderState;
105};
106
107#endif // LL_FLOATERLANDMARK_H
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp
index 952c56a..a158000 100644
--- a/linden/indra/newview/llfloatermap.cpp
+++ b/linden/indra/newview/llfloatermap.cpp
@@ -57,7 +57,7 @@
57#include "llspinctrl.h" 57#include "llspinctrl.h"
58#include "llstatgraph.h" 58#include "llstatgraph.h"
59#include "llstatusbar.h" 59#include "llstatusbar.h"
60#include "lltextbox.h" 60//#include "lltextbox.h"
61#include "llui.h" 61#include "llui.h"
62#include "llviewermenu.h" 62#include "llviewermenu.h"
63#include "llviewerparceloverlay.h" 63#include "llviewerparceloverlay.h"
diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h
index 24f7b9f..369ac32 100644
--- a/linden/indra/newview/llfloatermap.h
+++ b/linden/indra/newview/llfloatermap.h
@@ -35,11 +35,6 @@
35#include "llfloater.h" 35#include "llfloater.h"
36 36
37class LLNetMap; 37class LLNetMap;
38class LLSliderCtrl;
39class LLStatGraph;
40class LLTextBox;
41class LLUICtrl;
42class LLViewerImage;
43 38
44// 39//
45// Classes 40// Classes
diff --git a/linden/indra/newview/llfloaterparcel.cpp b/linden/indra/newview/llfloaterparcel.cpp
new file mode 100644
index 0000000..a63987a
--- /dev/null
+++ b/linden/indra/newview/llfloaterparcel.cpp
@@ -0,0 +1,133 @@
1/**
2 * @file llfloaterparcel.cpp
3 * @brief LLFloaterParcel class implementation
4 * Parcel information as shown in a floating window from secondlife:// command
5 * handler.
6 *
7 * $LicenseInfo:firstyear=2002&license=internal$
8 *
9 * Copyright (c) 2002-2007, Linden Research, Inc.
10 *
11 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
12 * this source code is governed by the Linden Lab Source Code Disclosure
13 * Agreement ("Agreement") previously entered between you and Linden
14 * Lab. By accessing, using, copying, modifying or distributing this
15 * software, you acknowledge that you have been informed of your
16 * obligations under the Agreement and agree to abide by those obligations.
17 *
18 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
19 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
20 * COMPLETENESS OR PERFORMANCE.
21 * $/LicenseInfo$
22 */
23#include "llviewerprecompiledheaders.h"
24
25#include "llfloaterparcel.h"
26
27// viewer project includes
28#include "llcommandhandler.h"
29#include "llpanelplace.h"
30#include "llvieweruictrlfactory.h"
31
32// linden library includes
33#include "lluuid.h"
34
35//-----------------------------------------------------------------------------
36// Globals
37//-----------------------------------------------------------------------------
38
39LLMap< const LLUUID, LLFloaterParcelInfo* > gPlaceInfoInstances;
40
41class LLParcelHandler : public LLCommandHandler
42{
43public:
44 LLParcelHandler() : LLCommandHandler("parcel") { }
45 bool handle(const std::vector<std::string>& params)
46 {
47 if (params.size() < 2)
48 {
49 return false;
50 }
51 LLUUID parcel_id;
52 if (!parcel_id.set(params[0], FALSE))
53 {
54 return false;
55 }
56 if (params[1] == "about")
57 {
58 LLFloaterParcelInfo::show(parcel_id);
59 return true;
60 }
61 return false;
62 }
63};
64LLParcelHandler gParcelHandler;
65
66//-----------------------------------------------------------------------------
67// Member functions
68//-----------------------------------------------------------------------------
69
70//----------------------------------------------------------------------------
71
72void* LLFloaterParcelInfo::createPanelPlace(void* data)
73{
74 LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data;
75 self->mPanelParcelp = new LLPanelPlace(); // allow edit self
76 gUICtrlFactory->buildPanel(self->mPanelParcelp, "panel_place.xml");
77 return self->mPanelParcelp;
78}
79
80//----------------------------------------------------------------------------
81
82
83LLFloaterParcelInfo::LLFloaterParcelInfo(const std::string& name, const LLUUID &parcel_id)
84: LLFloater(name),
85 mParcelID( parcel_id )
86{
87 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this);
88 gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
89 gPlaceInfoInstances.addData(parcel_id, this);
90}
91
92// virtual
93LLFloaterParcelInfo::~LLFloaterParcelInfo()
94{
95 // child views automatically deleted
96 gPlaceInfoInstances.removeData(mParcelID);
97
98}
99
100void LLFloaterParcelInfo::displayParcelInfo(const LLUUID& parcel_id)
101{
102 mPanelParcelp->setParcelID(parcel_id);
103}
104
105// static
106LLFloaterParcelInfo* LLFloaterParcelInfo::show(const LLUUID &parcel_id)
107{
108 if (parcel_id.isNull())
109 {
110 return NULL;
111 }
112
113 LLFloaterParcelInfo *floater;
114 if (gPlaceInfoInstances.checkData(parcel_id))
115 {
116 // ...bring that window to front
117 floater = gPlaceInfoInstances.getData(parcel_id);
118 floater->open(); /*Flawfinder: ignore*/
119 floater->setFrontmost(true);
120 }
121 else
122 {
123 floater = new LLFloaterParcelInfo("parcelinfo", parcel_id );
124 floater->center();
125 floater->open(); /*Flawfinder: ignore*/
126 floater->displayParcelInfo(parcel_id);
127 floater->setFrontmost(true);
128 }
129
130 return floater;
131}
132
133
diff --git a/linden/indra/newview/llfloaterparcel.h b/linden/indra/newview/llfloaterparcel.h
new file mode 100644
index 0000000..e0e8b9a
--- /dev/null
+++ b/linden/indra/newview/llfloaterparcel.h
@@ -0,0 +1,53 @@
1/**
2 * @file llfloaterparcelinfo.h
3 * @brief LLFloaterParcelInfo class definition
4 *
5 * $LicenseInfo:firstyear=2002&license=internal$
6 *
7 * Copyright (c) 2002-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22/**
23 * Parcel information as shown in a floating window from a sl-url.
24 * Just a wrapper for LLPanelPlace, shared with the Find directory.
25 */
26
27#ifndef LL_FLOATERPARCELINFO_H
28#define LL_FLOATERPARCELINFO_H
29
30#include "llfloater.h"
31
32class LLPanelPlace;
33
34class LLFloaterParcelInfo
35: public LLFloater
36{
37public:
38 static void* createPanelPlace(void* data);
39
40 LLFloaterParcelInfo(const std::string& name, const LLUUID &parcel_id );
41 /*virtual*/ ~LLFloaterParcelInfo();
42
43 void displayParcelInfo(const LLUUID& parcel_id);
44
45 static LLFloaterParcelInfo* show(const LLUUID& parcel_id);
46
47private:
48 LLUUID mParcelID; // for which parcel is this window?
49 LLPanelPlace* mPanelParcelp;
50};
51
52
53#endif
diff --git a/linden/indra/newview/llfloaterpostcard.cpp b/linden/indra/newview/llfloaterpostcard.cpp
index 8dcdb99..cab9d37 100644
--- a/linden/indra/newview/llfloaterpostcard.cpp
+++ b/linden/indra/newview/llfloaterpostcard.cpp
@@ -116,7 +116,7 @@ BOOL LLFloaterPostcard::postBuild()
116 childDisable("from_form"); 116 childDisable("from_form");
117 childSetAction("publish_help_btn", onClickPublishHelp, this); 117 childSetAction("publish_help_btn", onClickPublishHelp, this);
118 118
119 if (gAgent.mAccess < SIM_ACCESS_MATURE) 119 if (gAgent.isTeen())
120 { 120 {
121 // Disable these buttons if they are PG (Teen) users 121 // Disable these buttons if they are PG (Teen) users
122 childDisable("allow_publish_check"); 122 childDisable("allow_publish_check");
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp
index f061018..100ae0c 100644
--- a/linden/indra/newview/llfloaterpreference.cpp
+++ b/linden/indra/newview/llfloaterpreference.cpp
@@ -54,6 +54,7 @@
54#include "llpaneldebug.h" 54#include "llpaneldebug.h"
55#include "llpanelgeneral.h" 55#include "llpanelgeneral.h"
56#include "llpanelinput.h" 56#include "llpanelinput.h"
57#include "llpanelLCD.h"
57#include "llpanelmsgs.h" 58#include "llpanelmsgs.h"
58#include "llpanelweb.h" 59#include "llpanelweb.h"
59#include "llprefschat.h" 60#include "llprefschat.h"
@@ -80,6 +81,14 @@ const S32 PREF_FLOATER_MIN_HEIGHT = 2 * SCROLLBAR_SIZE + 2 * LLPANEL_BORDER_WIDT
80 81
81LLFloaterPreference* LLFloaterPreference::sInstance = NULL; 82LLFloaterPreference* LLFloaterPreference::sInstance = NULL;
82 83
84#if LL_WINDOWS
85// for Logitech LCD keyboards / speakers
86#ifndef LL_LOGITECH_LCD_H
87#include "lllogitechlcd.h"
88#endif
89extern llLCD *gLcdScreen;
90#endif
91
83// Must be done at run time, not compile time. JC 92// Must be done at run time, not compile time. JC
84S32 pref_min_width() 93S32 pref_min_width()
85{ 94{
@@ -108,7 +117,8 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainerCommon* tab_container, LLButton
108 mDisplayPanel(NULL), 117 mDisplayPanel(NULL),
109 mDisplayPanel2(NULL), 118 mDisplayPanel2(NULL),
110 mAudioPanel(NULL), 119 mAudioPanel(NULL),
111 mMsgPanel(NULL) 120 mMsgPanel(NULL),
121 mLCDPanel(NULL)
112{ 122{
113 mGeneralPanel = new LLPanelGeneral(); 123 mGeneralPanel = new LLPanelGeneral();
114 mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer); 124 mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
@@ -156,6 +166,20 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainerCommon* tab_container, LLButton
156 mTabContainer->addTabPanel(mPrefsIM->getPanel(), mPrefsIM->getPanel()->getLabel(), FALSE, onTabChanged, mTabContainer); 166 mTabContainer->addTabPanel(mPrefsIM->getPanel(), mPrefsIM->getPanel()->getLabel(), FALSE, onTabChanged, mTabContainer);
157 mPrefsIM->getPanel()->setDefaultBtn(default_btn); 167 mPrefsIM->getPanel()->setDefaultBtn(default_btn);
158 168
169#if LL_WINDOWS && LL_LCD_COMPILE
170
171 // only add this option if we actually have a logitech keyboard / speaker set
172 if (gLcdScreen->Enabled())
173 {
174 mLCDPanel = new LLPanelLCD();
175 mTabContainer->addTabPanel(mLCDPanel, mLCDPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
176 mLCDPanel->setDefaultBtn(default_btn);
177 }
178
179#else
180 mLCDPanel = NULL;
181#endif
182
159 mMsgPanel = new LLPanelMsgs(); 183 mMsgPanel = new LLPanelMsgs();
160 mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer); 184 mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
161 mMsgPanel->setDefaultBtn(default_btn); 185 mMsgPanel->setDefaultBtn(default_btn);
@@ -240,6 +264,14 @@ void LLPreferenceCore::apply()
240 #if LL_LIBXUL_ENABLED 264 #if LL_LIBXUL_ENABLED
241 mWebPanel->apply(); 265 mWebPanel->apply();
242 #endif 266 #endif
267#if LL_WINDOWS && LL_LCD_COMPILE
268 // only add this option if we actually have a logitech keyboard / speaker set
269 if (gLcdScreen->Enabled())
270 {
271 mLCDPanel->apply();
272 }
273#endif
274// mWebPanel->apply();
243} 275}
244 276
245 277
@@ -259,6 +291,14 @@ void LLPreferenceCore::cancel()
259 #if LL_LIBXUL_ENABLED 291 #if LL_LIBXUL_ENABLED
260 mWebPanel->cancel(); 292 mWebPanel->cancel();
261 #endif 293 #endif
294#if LL_WINDOWS && LL_LCD_COMPILE
295 // only add this option if we actually have a logitech keyboard / speaker set
296 if (gLcdScreen->Enabled())
297 {
298 mLCDPanel->cancel();
299 }
300#endif
301// mWebPanel->cancel();
262} 302}
263 303
264// static 304// static
diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h
index db77ebd..a4c43fc 100644
--- a/linden/indra/newview/llfloaterpreference.h
+++ b/linden/indra/newview/llfloaterpreference.h
@@ -43,6 +43,7 @@
43 43
44class LLPanelGeneral; 44class LLPanelGeneral;
45class LLPanelInput; 45class LLPanelInput;
46class LLPanelLCD;
46class LLPanelDisplay; 47class LLPanelDisplay;
47class LLPanelDisplay2; 48class LLPanelDisplay2;
48class LLPanelDisplay3; 49class LLPanelDisplay3;
@@ -89,8 +90,9 @@ private:
89 LLPrefsChat *mPrefsChat; 90 LLPrefsChat *mPrefsChat;
90 LLPrefsVoice *mPrefsVoice; 91 LLPrefsVoice *mPrefsVoice;
91 LLPrefsIM *mPrefsIM; 92 LLPrefsIM *mPrefsIM;
92 LLPanelMsgs *mMsgPanel;
93 LLPanelWeb *mWebPanel; 93 LLPanelWeb *mWebPanel;
94 LLPanelMsgs *mMsgPanel;
95 LLPanelLCD *mLCDPanel;
94}; 96};
95 97
96// Floater to control preferences (display, audio, bandwidth, general. 98// Floater to control preferences (display, audio, bandwidth, general.
diff --git a/linden/indra/newview/llfloaterurldisplay.cpp b/linden/indra/newview/llfloaterurldisplay.cpp
new file mode 100644
index 0000000..82db380
--- /dev/null
+++ b/linden/indra/newview/llfloaterurldisplay.cpp
@@ -0,0 +1,84 @@
1/**
2 * @file llpreviewlandmark.cpp
3 * @brief LLFloaterURLDisplayList class implementation
4 *
5 * $LicenseInfo:firstyear=2002&license=internal$
6 *
7 * Copyright (c) 2002-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#include "llviewerprecompiledheaders.h"
23
24#include "llfloaterurldisplay.h"
25
26#include "llpanelplace.h"
27#include "llvieweruictrlfactory.h"
28
29#include "v3dmath.h"
30
31////////////////////////////////////////////////////////////////////////////
32// LLFloaterURLDisplay
33
34
35LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd)
36{
37 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this);
38 gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
39 this->setVisible(false);
40}
41
42LLFloaterURLDisplay::~LLFloaterURLDisplay()
43{
44}
45
46void LLFloaterURLDisplay::displayParcelInfo(U64 region_handle, const LLVector3& pos_local)
47{
48 mRegionHandle = region_handle;
49 mRegionPosition = pos_local;
50 LLVector3d pos_global = from_region_handle(region_handle);
51 pos_global += (LLVector3d)pos_local;
52
53 LLUUID region_id; // don't know this
54 LLUUID landmark_asset_id; // don't know this either
55 mPlacePanel->displayParcelInfo(pos_local, landmark_asset_id, region_id, pos_global);
56
57 this->setVisible(true);
58 this->setFrontmost(true);
59}
60
61void LLFloaterURLDisplay::setSnapshotDisplay(const LLUUID& snapshot_id)
62{
63 mPlacePanel->setSnapshot(snapshot_id);
64}
65
66void LLFloaterURLDisplay::setName(const std::string& name)
67{
68 mPlacePanel->setName(name);
69}
70
71void LLFloaterURLDisplay::setLocationString(const std::string& name)
72{
73 mPlacePanel->setLocationString(name);
74}
75
76// static
77void* LLFloaterURLDisplay::createPlaceDetail(void* userdata)
78{
79 LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata;
80 self->mPlacePanel = new LLPanelPlace();
81 gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml");
82
83 return self->mPlacePanel;
84}
diff --git a/linden/indra/newview/llfloaterurldisplay.h b/linden/indra/newview/llfloaterurldisplay.h
new file mode 100644
index 0000000..5ee4473
--- /dev/null
+++ b/linden/indra/newview/llfloaterurldisplay.h
@@ -0,0 +1,61 @@
1/**
2 * @file llfloaterurldisplay.h
3 * @brief LLFloaterURLDisplay class implementation
4 *
5 * $LicenseInfo:firstyear=2006&license=viewergpl$
6 *
7 * Copyright (c) 2006-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLFLOATERURLDISPLAY_H
33#define LL_LLFLOATERURLDISPLAY_H
34
35#include "llfloater.h"
36#include "v3math.h"
37
38class LLPanelPlace;
39class LLSD;
40class LLUUID;
41
42class LLFloaterURLDisplay : public LLFloater, public LLUISingleton<LLFloaterURLDisplay>
43{
44public:
45 LLFloaterURLDisplay(const LLSD& sd);
46 virtual ~LLFloaterURLDisplay();
47
48 void displayParcelInfo(U64 region_handle, const LLVector3& pos);
49 void setSnapshotDisplay(const LLUUID& snapshot_id);
50 void setName(const std::string& name);
51 void setLocationString(const std::string& name);
52
53 static void* createPlaceDetail(void* userdata);
54
55private:
56 LLVector3 mRegionPosition;
57 U64 mRegionHandle;
58 LLPanelPlace* mPlacePanel;
59};
60
61#endif // LL_LLFLOATERURLDISPLAY_H
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp
index bdb7f09..b411bb2 100644
--- a/linden/indra/newview/llfloaterworldmap.cpp
+++ b/linden/indra/newview/llfloaterworldmap.cpp
@@ -236,7 +236,7 @@ BOOL LLFloaterWorldMap::postBuild()
236 childSetKeystrokeCallback("location", (void (*)(LLLineEditor*,void*))updateSearchEnabled, NULL); 236 childSetKeystrokeCallback("location", (void (*)(LLLineEditor*,void*))updateSearchEnabled, NULL);
237 237
238 childSetCommitCallback("search_results", onCommitSearchResult, this); 238 childSetCommitCallback("search_results", onCommitSearchResult, this);
239 childSetDoubleClickCallback("search_results", onTeleportBtn); 239 childSetDoubleClickCallback("search_results", onClickTeleportBtn);
240 childSetCommitCallback("spin x", onCommitLocation, this); 240 childSetCommitCallback("spin x", onCommitLocation, this);
241 childSetCommitCallback("spin y", onCommitLocation, this); 241 childSetCommitCallback("spin y", onCommitLocation, this);
242 childSetCommitCallback("spin z", onCommitLocation, this); 242 childSetCommitCallback("spin z", onCommitLocation, this);
@@ -252,7 +252,7 @@ BOOL LLFloaterWorldMap::postBuild()
252 252
253 childSetAction("Go Home", onGoHome, this); 253 childSetAction("Go Home", onGoHome, this);
254 254
255 childSetAction("Teleport", onTeleportBtn, this); 255 childSetAction("Teleport", onClickTeleportBtn, this);
256 256
257 childSetAction("Show Destination", onShowTargetBtn, this); 257 childSetAction("Show Destination", onShowTargetBtn, this);
258 childSetAction("Show My Location", onShowAgentBtn, this); 258 childSetAction("Show My Location", onShowAgentBtn, this);
@@ -264,7 +264,7 @@ BOOL LLFloaterWorldMap::postBuild()
264 264
265 setDefaultBtn(NULL); 265 setDefaultBtn(NULL);
266 266
267 if ( gAgent.mAccess <= SIM_ACCESS_PG ) 267 if ( gAgent.isTeen() )
268 { 268 {
269 // Hide Mature Events controls 269 // Hide Mature Events controls
270 childHide("events_mature_icon"); 270 childHide("events_mature_icon");
@@ -1288,7 +1288,7 @@ void LLFloaterWorldMap::onShowAgentBtn(void* data)
1288} 1288}
1289 1289
1290// static 1290// static
1291void LLFloaterWorldMap::onTeleportBtn(void* data) 1291void LLFloaterWorldMap::onClickTeleportBtn(void* data)
1292{ 1292{
1293 LLFloaterWorldMap* self = (LLFloaterWorldMap*)data; 1293 LLFloaterWorldMap* self = (LLFloaterWorldMap*)data;
1294 self->teleport(); 1294 self->teleport();
diff --git a/linden/indra/newview/llfloaterworldmap.h b/linden/indra/newview/llfloaterworldmap.h
index 1757f86..b98bbbb 100644
--- a/linden/indra/newview/llfloaterworldmap.h
+++ b/linden/indra/newview/llfloaterworldmap.h
@@ -108,6 +108,9 @@ public:
108 // Catch changes in the sim list 108 // Catch changes in the sim list
109 void updateSims(bool found_null_sim); 109 void updateSims(bool found_null_sim);
110 110
111 // teleport to the tracked item, if there is one
112 void teleport();
113
111protected: 114protected:
112 static void onPanBtn( void* userdata ); 115 static void onPanBtn( void* userdata );
113 116
@@ -123,7 +126,7 @@ protected:
123 126
124 static void onClearBtn(void*); 127 static void onClearBtn(void*);
125 static void onFlyBtn(void*); 128 static void onFlyBtn(void*);
126 static void onTeleportBtn(void*); 129 static void onClickTeleportBtn(void*);
127 static void onShowTargetBtn(void*); 130 static void onShowTargetBtn(void*);
128 static void onShowAgentBtn(void*); 131 static void onShowAgentBtn(void*);
129 static void onCopySLURL(void*); 132 static void onCopySLURL(void*);
@@ -136,9 +139,6 @@ protected:
136 // fly to the tracked item, if there is one 139 // fly to the tracked item, if there is one
137 void fly(); 140 void fly();
138 141
139 // teleport to the tracked item, if there is one
140 void teleport();
141
142 void buildLandmarkIDLists(); 142 void buildLandmarkIDLists();
143 static void onGoToLandmarkDialog(S32 option,void* userdata); 143 static void onGoToLandmarkDialog(S32 option,void* userdata);
144 void flyToLandmark(); 144 void flyToLandmark();
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index a68b937..c6a2710 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -1736,7 +1736,7 @@ bool LLFolderViewFolder::isTrash()
1736{ 1736{
1737 if (mAmTrash == LLFolderViewFolder::UNKNOWN) 1737 if (mAmTrash == LLFolderViewFolder::UNKNOWN)
1738 { 1738 {
1739 mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH; 1739 mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
1740 } 1740 }
1741 return mAmTrash == LLFolderViewFolder::TRASH; 1741 return mAmTrash == LLFolderViewFolder::TRASH;
1742} 1742}
diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp
index df902fb..01ffb02 100644
--- a/linden/indra/newview/llgivemoney.cpp
+++ b/linden/indra/newview/llgivemoney.cpp
@@ -239,8 +239,8 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
239 msg->getS32Fast(_PREHASH_ButtonData,_PREHASH_PayButton,pay_button,i); 239 msg->getS32Fast(_PREHASH_ButtonData,_PREHASH_PayButton,pay_button,i);
240 if (pay_button > 0) 240 if (pay_button > 0)
241 { 241 {
242 LLString button_str; 242 LLString button_str = "L$";
243 gResMgr->getMonetaryString( button_str, pay_button ); 243 button_str += gResMgr->getMonetaryString( pay_button );
244 244
245 self->mQuickPayButton[i]->setLabelSelected(button_str); 245 self->mQuickPayButton[i]->setLabelSelected(button_str);
246 self->mQuickPayButton[i]->setLabelUnselected(button_str); 246 self->mQuickPayButton[i]->setLabelUnselected(button_str);
@@ -260,8 +260,8 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
260 } 260 }
261 261
262 // build a string containing the maximum value and calc nerw button width from it. 262 // build a string containing the maximum value and calc nerw button width from it.
263 LLString balance_str; 263 LLString balance_str = "L$";
264 gResMgr->getMonetaryString( balance_str, max_pay_amount ); 264 balance_str += gResMgr->getMonetaryString( max_pay_amount );
265 const LLFontGL* font = gResMgr->getRes(LLFONT_SANSSERIF); 265 const LLFontGL* font = gResMgr->getRes(LLFONT_SANSSERIF);
266 S32 new_button_width = font->getWidth( LLString(balance_str)); 266 S32 new_button_width = font->getWidth( LLString(balance_str));
267 new_button_width += ( 12 + 12 ); // padding 267 new_button_width += ( 12 + 12 ); // padding
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 3a947bc..b259b80 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -79,6 +79,7 @@
79const S32 LINE_HEIGHT = 16; 79const S32 LINE_HEIGHT = 16;
80const S32 MIN_WIDTH = 200; 80const S32 MIN_WIDTH = 200;
81const S32 MIN_HEIGHT = 130; 81const S32 MIN_HEIGHT = 130;
82const U32 DEFAULT_RETRIES_COUNT = 3;
82 83
83// 84//
84// Statics 85// Statics
@@ -502,6 +503,8 @@ void LLVoiceChannel::initClass()
502LLVoiceChannelGroup::LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name) : 503LLVoiceChannelGroup::LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name) :
503 LLVoiceChannel(session_id, session_name) 504 LLVoiceChannel(session_id, session_name)
504{ 505{
506 mRetries = DEFAULT_RETRIES_COUNT;
507 mIsRetrying = FALSE;
505} 508}
506 509
507LLVoiceChannelGroup::~LLVoiceChannelGroup() 510LLVoiceChannelGroup::~LLVoiceChannelGroup()
@@ -548,18 +551,92 @@ void LLVoiceChannelGroup::getChannelInfo()
548 } 551 }
549} 552}
550 553
554void LLVoiceChannelGroup::setChannelInfo(
555 const LLString& uri,
556 const LLString& credentials)
557{
558 setURI(uri);
559
560 mCredentials = credentials;
561
562 if (mState == STATE_NO_CHANNEL_INFO)
563 {
564 if(!mURI.empty() && !mCredentials.empty())
565 {
566 setState(STATE_READY);
567
568 // if we are supposed to be active, reconnect
569 // this will happen on initial connect, as we request credentials on first use
570 if (sCurrentVoiceChannel == this)
571 {
572 // just in case we got new channel info while active
573 // should move over to new channel
574 activate();
575 }
576 }
577 else
578 {
579 //*TODO: notify user
580 llwarns << "Received invalid credentials for channel " << mSessionName << llendl;
581 deactivate();
582 }
583 }
584 else if ( mIsRetrying )
585 {
586 // we have the channel info, just need to use it now
587 LLVoiceClient::getInstance()->setNonSpatialChannel(
588 mURI,
589 mCredentials);
590 }
591}
592
593void LLVoiceChannelGroup::handleStatusChange(EStatusType type)
594{
595 // status updates
596 switch(type)
597 {
598 case STATUS_JOINED:
599 mRetries = 3;
600 mIsRetrying = FALSE;
601 default:
602 break;
603 }
604
605 LLVoiceChannel::handleStatusChange(type);
606}
607
551void LLVoiceChannelGroup::handleError(EStatusType status) 608void LLVoiceChannelGroup::handleError(EStatusType status)
552{ 609{
553 std::string notify; 610 std::string notify;
554 switch(status) 611 switch(status)
555 { 612 {
556 case ERROR_CHANNEL_LOCKED: 613 case ERROR_CHANNEL_LOCKED:
557 case ERROR_CHANNEL_FULL: 614 case ERROR_CHANNEL_FULL:
558 notify = "VoiceChannelFull"; 615 notify = "VoiceChannelFull";
559 break; 616 break;
560 case ERROR_UNKNOWN: 617 case ERROR_NOT_AVAILABLE:
618 //clear URI and credentials
619 //set the state to be no info
620 //and activate
621 if ( mRetries > 0 )
622 {
623 mRetries--;
624 mIsRetrying = TRUE;
625 mIgnoreNextSessionLeave = TRUE;
626
627 getChannelInfo();
628 return;
629 }
630 else
631 {
632 notify = "VoiceChannelJoinFailed";
633 mRetries = DEFAULT_RETRIES_COUNT;
634 mIsRetrying = FALSE;
635 }
636
561 break; 637 break;
562 default: 638 case ERROR_UNKNOWN:
639 default:
563 break; 640 break;
564 } 641 }
565 642
@@ -570,10 +647,27 @@ void LLVoiceChannelGroup::handleError(EStatusType status)
570 // echo to im window 647 // echo to im window
571 gIMMgr->addMessage(mSessionID, LLUUID::null, SYSTEM_FROM, LLNotifyBox::getTemplateMessage(notify, mNotifyArgs).c_str()); 648 gIMMgr->addMessage(mSessionID, LLUUID::null, SYSTEM_FROM, LLNotifyBox::getTemplateMessage(notify, mNotifyArgs).c_str());
572 } 649 }
573 650
574 LLVoiceChannel::handleError(status); 651 LLVoiceChannel::handleError(status);
575} 652}
576 653
654void LLVoiceChannelGroup::setState(EState state)
655{
656 switch(state)
657 {
658 case STATE_RINGING:
659 if ( !mIsRetrying )
660 {
661 gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
662 }
663
664 mState = state;
665 break;
666 default:
667 LLVoiceChannel::setState(state);
668 }
669}
670
577// 671//
578// LLVoiceChannelProximal 672// LLVoiceChannelProximal
579// 673//
@@ -710,7 +804,7 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type)
710 break; 804 break;
711 } 805 }
712 806
713 LLVoiceChannelGroup::handleStatusChange(type); 807 LLVoiceChannel::handleStatusChange(type);
714} 808}
715 809
716void LLVoiceChannelP2P::handleError(EStatusType type) 810void LLVoiceChannelP2P::handleError(EStatusType type)
@@ -724,7 +818,7 @@ void LLVoiceChannelP2P::handleError(EStatusType type)
724 break; 818 break;
725 } 819 }
726 820
727 LLVoiceChannelGroup::handleError(type); 821 LLVoiceChannel::handleError(type);
728} 822}
729 823
730void LLVoiceChannelP2P::activate() 824void LLVoiceChannelP2P::activate()
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index 631dc5c..c1ad18d 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -62,13 +62,15 @@ public:
62 LLVoiceChannel(const LLUUID& session_id, const LLString& session_name); 62 LLVoiceChannel(const LLUUID& session_id, const LLString& session_name);
63 virtual ~LLVoiceChannel(); 63 virtual ~LLVoiceChannel();
64 64
65 void setChannelInfo(const LLString& uri, const LLString& credentials);
66 /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); 65 /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
67 66
68 virtual void handleStatusChange(EStatusType status); 67 virtual void handleStatusChange(EStatusType status);
69 virtual void handleError(EStatusType status); 68 virtual void handleError(EStatusType status);
70 virtual void deactivate(); 69 virtual void deactivate();
71 virtual void activate(); 70 virtual void activate();
71 virtual void setChannelInfo(
72 const LLString& uri,
73 const LLString& credentials);
72 virtual void getChannelInfo(); 74 virtual void getChannelInfo();
73 virtual BOOL isActive(); 75 virtual BOOL isActive();
74 virtual BOOL callStarted(); 76 virtual BOOL callStarted();
@@ -82,7 +84,7 @@ public:
82 static void initClass(); 84 static void initClass();
83 85
84protected: 86protected:
85 void setState(EState state); 87 virtual void setState(EState state);
86 void setURI(LLString uri); 88 void setURI(LLString uri);
87 89
88 LLString mURI; 90 LLString mURI;
@@ -109,10 +111,21 @@ public:
109 LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name); 111 LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name);
110 virtual ~LLVoiceChannelGroup(); 112 virtual ~LLVoiceChannelGroup();
111 113
114 /*virtual*/ void handleStatusChange(EStatusType status);
112 /*virtual*/ void handleError(EStatusType status); 115 /*virtual*/ void handleError(EStatusType status);
113 /*virtual*/ void activate(); 116 /*virtual*/ void activate();
114 /*virtual*/ void deactivate(); 117 /*virtual*/ void deactivate();
118 /*vritual*/ void setChannelInfo(
119 const LLString& uri,
120 const LLString& credentials);
115 /*virtual*/ void getChannelInfo(); 121 /*virtual*/ void getChannelInfo();
122
123protected:
124 virtual void setState(EState state);
125
126private:
127 U32 mRetries;
128 BOOL mIsRetrying;
116}; 129};
117 130
118class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoiceChannelProximal> 131class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoiceChannelProximal>
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index dee1ed2..a6e2a13 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -310,6 +310,7 @@ LLIMMgr::LLIMMgr() :
310 delete dummy_floater; 310 delete dummy_floater;
311 311
312 mPendingVoiceInvitations = LLSD::emptyMap(); 312 mPendingVoiceInvitations = LLSD::emptyMap();
313 mPendingAgentListUpdates = LLSD::emptyMap();
313} 314}
314 315
315LLIMMgr::~LLIMMgr() 316LLIMMgr::~LLIMMgr()
@@ -725,15 +726,41 @@ public:
725 726
726 if (floaterp) 727 if (floaterp)
727 { 728 {
729 //we've accepted our invitation
730 //and received a list of agents that were
731 //currently in the session when the reply was sent
732 //to us. Now, it is possible that there were some agents
733 //to slip in/out between when that message was sent to us
734 //and now.
735
736 //the agent list updates we've received have been
737 //accurate from the time we were added to the session
738 //but unfortunately, our base that we are receiving here
739 //may not be the most up to date. It was accurate at
740 //some point in time though.
728 floaterp->setSpeakersList(content["agents"]); 741 floaterp->setSpeakersList(content["agents"]);
729 742
743 //we now have our base of users in the session
744 //that was accurate at some point, but maybe not now
745 //so now we apply all of the udpates we've received
746 //in case of race conditions
747
748 //reapplying a user entrance will do nothing
749 //reapplying a user leaving will not have the user
750 //in our base. So it's all good
751 floaterp->updateSpeakersList(
752 gIMMgr->getPendingAgentListUpdates(mSessionID));
753
730 if ( mIsVoiceInvitiation ) 754 if ( mIsVoiceInvitiation )
731 { 755 {
732 floaterp->requestAutoConnect(); 756 floaterp->requestAutoConnect();
733 LLFloaterIMPanel::onClickStartCall(floaterp); 757 LLFloaterIMPanel::onClickStartCall(floaterp);
758 // always open IM window when connecting to voice
759 LLFloaterChatterBox::showInstance(TRUE);
734 } 760 }
735 } 761 }
736 762
763 gIMMgr->clearPendingAgentListUpdates(mSessionID);
737 if ( mIsVoiceInvitiation ) 764 if ( mIsVoiceInvitiation )
738 { 765 {
739 gIMMgr->clearPendingVoiceInviation(mSessionID); 766 gIMMgr->clearPendingVoiceInviation(mSessionID);
@@ -779,6 +806,8 @@ void LLIMMgr::inviteUserResponse(S32 option, void* user_data)
779 { 806 {
780 im_floater->requestAutoConnect(); 807 im_floater->requestAutoConnect();
781 LLFloaterIMPanel::onClickStartCall(im_floater); 808 LLFloaterIMPanel::onClickStartCall(im_floater);
809 // always open IM window when connecting to voice
810 LLFloaterChatterBox::showInstance(TRUE);
782 } 811 }
783 812
784 gIMMgr->clearPendingVoiceInviation(invitep->mSessionID); 813 gIMMgr->clearPendingVoiceInviation(invitep->mSessionID);
@@ -911,6 +940,41 @@ void LLIMMgr::clearPendingVoiceInviation(const LLUUID& session_id)
911 } 940 }
912} 941}
913 942
943LLSD LLIMMgr::getPendingAgentListUpdates(const LLUUID& session_id)
944{
945 if ( mPendingAgentListUpdates.has(session_id.asString()) )
946 {
947 return mPendingAgentListUpdates[session_id.asString()];
948 }
949 else
950 {
951 return LLSD();
952 }
953}
954
955void LLIMMgr::addPendingAgentListUpdates(
956 const LLUUID& session_id,
957 const LLSD& updates)
958{
959 LLSD::map_const_iterator iter;
960
961 for ( iter = updates.beginMap();
962 iter != updates.endMap();
963 iter++)
964 {
965 //we only want to include the last update for a given agent
966 mPendingAgentListUpdates[session_id.asString()][iter->first] =
967 iter->second;
968 }
969}
970
971void LLIMMgr::clearPendingAgentListUpdates(const LLUUID& session_id)
972{
973 if ( mPendingAgentListUpdates.has(session_id.asString()) )
974 {
975 mPendingAgentListUpdates.erase(session_id.asString());
976 }
977}
914 978
915// create a floater and update internal representation for 979// create a floater and update internal representation for
916// consistency. Returns the pointer, caller (the class instance since 980// consistency. Returns the pointer, caller (the class instance since
@@ -1078,7 +1142,12 @@ public:
1078 if (floaterp) 1142 if (floaterp)
1079 { 1143 {
1080 floaterp->setSpeakersList(body["agents"]); 1144 floaterp->setSpeakersList(body["agents"]);
1145
1146 //aply updates we've possibly received previously
1147 floaterp->updateSpeakersList(
1148 gIMMgr->getPendingAgentListUpdates(session_id));
1081 } 1149 }
1150 gIMMgr->clearPendingAgentListUpdates(session_id);
1082 } 1151 }
1083 else 1152 else
1084 { 1153 {
@@ -1191,6 +1260,15 @@ public:
1191 { 1260 {
1192 floaterp->updateSpeakersList(input["body"]["updates"]); 1261 floaterp->updateSpeakersList(input["body"]["updates"]);
1193 } 1262 }
1263 else
1264 {
1265 //we don't have a floater yet..something went wrong
1266 //we are probably receiving an update here before
1267 //a start or an acceptance of an invitation. Race condition.
1268 gIMMgr->addPendingAgentListUpdates(
1269 input["body"]["session_id"].asUUID(),
1270 input["body"]["updates"]);
1271 }
1194 } 1272 }
1195}; 1273};
1196 1274
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h
index 5f7829c..f5356ef 100644
--- a/linden/indra/newview/llimview.h
+++ b/linden/indra/newview/llimview.h
@@ -148,7 +148,13 @@ public:
148 static LLUUID computeSessionID(EInstantMessage dialog, const LLUUID& other_participant_id); 148 static LLUUID computeSessionID(EInstantMessage dialog, const LLUUID& other_participant_id);
149 149
150 void clearPendingVoiceInviation(const LLUUID& session_id); 150 void clearPendingVoiceInviation(const LLUUID& session_id);
151 151
152 LLSD getPendingAgentListUpdates(const LLUUID& session_id);
153 void addPendingAgentListUpdates(
154 const LLUUID& sessioN_id,
155 const LLSD& updates);
156 void clearPendingAgentListUpdates(const LLUUID& session_id);
157
152private: 158private:
153 class LLIMSessionInvite; 159 class LLIMSessionInvite;
154 160
@@ -188,6 +194,7 @@ private:
188 BOOL mIMReceived; 194 BOOL mIMReceived;
189 195
190 LLSD mPendingVoiceInvitations; 196 LLSD mPendingVoiceInvitations;
197 LLSD mPendingAgentListUpdates;
191}; 198};
192 199
193 200
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index 505364f..f777e09 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -1845,7 +1845,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
1845 else if(isAgentInventory()) // do not allow creating in library 1845 else if(isAgentInventory()) // do not allow creating in library
1846 { 1846 {
1847 // only mature accounts can create undershirts/underwear 1847 // only mature accounts can create undershirts/underwear
1848 /*if (gAgent.mAccess >= SIM_ACCESS_MATURE) 1848 /*if (!gAgent.isTeen())
1849 { 1849 {
1850 sub_menu->append(new LLMenuItemCallGL("New Undershirt", 1850 sub_menu->append(new LLMenuItemCallGL("New Undershirt",
1851 &createNewUndershirt, 1851 &createNewUndershirt,
@@ -2524,6 +2524,14 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
2524 } 2524 }
2525 } 2525 }
2526 } 2526 }
2527 if ("about" == action)
2528 {
2529 LLViewerInventoryItem* item = getItem();
2530 if(item)
2531 {
2532 open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE);
2533 }
2534 }
2527 else LLItemBridge::performAction(folder, model, action); 2535 else LLItemBridge::performAction(folder, model, action);
2528} 2536}
2529 2537
@@ -2555,12 +2563,35 @@ void open_landmark(LLViewerInventoryItem* inv_item,
2555 } 2563 }
2556} 2564}
2557 2565
2566static void open_landmark_callback(S32 option, void* data)
2567{
2568 LLUUID* asset_idp = (LLUUID*)data;
2569 if (option == 0)
2570 {
2571 // HACK: This is to demonstrate teleport on double click for landmarks
2572 gAgent.teleportViaLandmark( *asset_idp );
2573
2574 // we now automatically track the landmark you're teleporting to
2575 // because you'll probably arrive at a telehub instead
2576 if( gFloaterWorldMap )
2577 {
2578 gFloaterWorldMap->trackLandmark( *asset_idp );
2579 }
2580 }
2581 delete asset_idp;
2582}
2583
2558void LLLandmarkBridge::openItem() 2584void LLLandmarkBridge::openItem()
2559{ 2585{
2560 LLViewerInventoryItem* item = getItem(); 2586 LLViewerInventoryItem* item = getItem();
2561 if( item ) 2587 if( item )
2562 { 2588 {
2563 open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE); 2589 // Opening (double-clicking) a landmark immediately teleports,
2590 // but warns you the first time.
2591 // open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE);
2592 LLUUID* asset_idp = new LLUUID(item->getAssetUUID());
2593 LLAlertDialog::showXml("TeleportFromLandmark",
2594 open_landmark_callback, (void*)asset_idp);
2564 } 2595 }
2565} 2596}
2566 2597
@@ -4463,7 +4494,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
4463 EWearableType type = wearable->getType(); 4494 EWearableType type = wearable->getType();
4464 4495
4465 if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&& 4496 if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&&
4466 //!((gAgent.mAccess >= SIM_ACCESS_MATURE) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) 4497 //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
4467 { 4498 {
4468 gAgent.removeWearable( type ); 4499 gAgent.removeWearable( type );
4469 } 4500 }
diff --git a/linden/indra/newview/lllcd.cpp b/linden/indra/newview/lllcd.cpp
new file mode 100644
index 0000000..f6fec7d
--- /dev/null
+++ b/linden/indra/newview/lllcd.cpp
@@ -0,0 +1,703 @@
1/**
2 * @file lllcd.cpp
3 * @brief Lcd panel class
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32
33#include "llviewerprecompiledheaders.h"
34#include "llcontrol.h"
35#include "llstatusbar.h"
36#include "llviewerregion.h"
37#include "llviewerstats.h"
38#include "llvieweruictrlfactory.h"
39
40#if LL_LCD_COMPILE
41
42extern LLControlGroup gSavedSettings;
43
44#define ICON_WIDTH 28
45
46#if LL_WINDOWS
47// for Logitech LCD keyboards / speakers
48#include "EZ_LCD.h"
49#include "lllogitechlcd.h"
50#include "lllcd.h"
51
52// not happy about this, but there's no local class to put it in.
53LLPanel *bogus = NULL;
54
55// oh yeah baby! Construct those LCD page group handlers - make them all and we just turn off displaying them according to the preferences set up
56void CreateLCDDebugWindows()
57{
58 if (gLcdScreen->Enabled())
59 {
60 // load up the text so we are sure it's externalized and localized correctly.
61 bogus = new LLPanel();
62 gUICtrlFactory->buildPanel(bogus, "lcd_text.xml");
63
64 llLCDPageGroup *pageGroup = NULL;
65 pageGroup = new llDefaultPageGroup(gLcdScreen->mLCD, llLCD::kLCDDefault, gLcdScreen->mSLIcon);
66 // push this new group onto the array
67 gLcdScreen->mPageGroupArray.push_back(pageGroup);
68
69 pageGroup = new llChatPageGroup(gLcdScreen->mLCD, llLCD::kLCDChat, gLcdScreen->mSLIcon);
70 // push this new group onto the array
71 gLcdScreen->mPageGroupArray.push_back(pageGroup);
72
73 pageGroup = new llIMPageGroup(gLcdScreen->mLCD, llLCD::kLCDIM, gLcdScreen->mSLIcon);
74 // push this new group onto the array
75 gLcdScreen->mPageGroupArray.push_back(pageGroup);
76
77 pageGroup = new llDebugPageGroup(gLcdScreen->mLCD, llLCD::kLCDDebug, gLcdScreen->mSLIcon);
78 // push this new group onto the array
79 gLcdScreen->mPageGroupArray.push_back(pageGroup);
80
81 pageGroup = new llLindenPageGroup(gLcdScreen->mLCD, llLCD::kLCDLinden, gLcdScreen->mSLIcon);
82 // push this new group onto the array
83 gLcdScreen->mPageGroupArray.push_back(pageGroup);
84
85 pageGroup = new llRegionPageGroup(gLcdScreen->mLCD, llLCD::kLCDRegion, gLcdScreen->mSLIcon);
86 // push this new group onto the array
87 gLcdScreen->mPageGroupArray.push_back(pageGroup);
88
89 pageGroup = new llDebugConsolePageGroup(gLcdScreen->mLCD, llLCD::kLCDDebugConsole, gLcdScreen->mSLIcon);
90 // push this new group onto the array
91 gLcdScreen->mPageGroupArray.push_back(pageGroup);
92 }
93}
94
95// functions that allow the chat and IM handler to insert new lines directly into the LCD page group handlers
96void AddNewIMToLCD(const LLString &newLine)
97{
98 if (gLcdScreen->Enabled())
99 {
100 llIMPageGroup *imGroup = (llIMPageGroup *)gLcdScreen->mPageGroupArray[2];
101 imGroup->InsertText(newLine);
102 }
103}
104
105void AddNewChatToLCD(const LLString &newLine)
106{
107 if (gLcdScreen->Enabled())
108 {
109 llChatPageGroup *chatGroup = (llChatPageGroup *)gLcdScreen->mPageGroupArray[1];
110 chatGroup->InsertText(newLine);
111 }
112}
113
114void AddNewDebugConsoleToLCD(const LLWString &newLine)
115{
116 if (gLcdScreen->Enabled())
117 {
118 llDebugConsolePageGroup *debugGroup = (llDebugConsolePageGroup *)gLcdScreen->mPageGroupArray[6];
119 debugGroup->InsertText(newLine);
120 }
121}
122
123/////////////////////////////////////
124//
125// Debug Console Page group class
126//
127/////////////////////////////////////
128
129void llDebugConsolePageGroup::UpdateDetails()
130{
131 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
132 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(wstring_to_utf16str(mLine1).c_str()));
133 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(wstring_to_utf16str(mLine2).c_str()));
134 mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(wstring_to_utf16str(mLine3).c_str()));
135}
136
137void llDebugConsolePageGroup::GetDisplayable()
138{
139 mDisplayPage = gSavedSettings.getBOOL("DisplayDebugConsole");
140}
141
142void llDebugConsolePageGroup::InsertText(const LLWString &newLine)
143{
144 mLine1 = mLine2;
145 mLine2 = mLine3;
146 mLine3 = newLine;
147}
148
149llDebugConsolePageGroup::llDebugConsolePageGroup(CEzLcd *LCD, int type, HICON SLIcon)
150:llLCDPageGroup(LCD, type, SLIcon)
151{
152 // create a new specific pagea
153 llLCDSpecificPage newPage;
154 newPage.mPageIndex = mLCD->AddNewPage() - 1;
155 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
156
157 // add in all the display parts for this specific page
158
159 // add in the icon - all pages have this - we don't need to track this because we never update it
160 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
161 mLCD->SetOrigin(m_rightIcon, 0, 0);
162
163 // add Title
164 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
165 mLCD->SetOrigin(title, 32, 0);
166 mLCD->SetText(title, _T("Debug Console"));
167
168 // add line
169 HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
170 mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
171 mLCD->SetText(chatLine, _T(""));
172 newPage.mDisplayItemArray.push_back(chatLine);
173
174 // add line
175 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
176 mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
177 mLCD->SetText(chatLine, _T(""));
178 newPage.mDisplayItemArray.push_back(chatLine);
179
180 // add line
181 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
182 mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
183 mLCD->SetText(chatLine, _T(""));
184 newPage.mDisplayItemArray.push_back(chatLine);
185
186 // and then insert it
187 mPageArray.push_back(newPage);
188}
189
190/////////////////////////////////////
191//
192// Network Comms Page group class
193//
194/////////////////////////////////////
195
196void llDebugPageGroup::UpdateDetails()
197{
198 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
199 LLString ping = llformat("1000");
200 LLString packetsIn = llformat("0");
201 LLString packetsOut = llformat("0");
202 LLString packetLoss = llformat("0");
203 LLString fps = llformat("0");
204 LLString simfps = llformat("0");
205 // region name
206 if (gStatusBar)
207 {
208 ping = llformat("%d", gStatusBar->mRegionDetails.mPing);
209 }
210
211 if (gViewerStats)
212 {
213 packetLoss = llformat("%.1f%%", gViewerStats->mPacketsLostPercentStat.getCurrent());
214 simfps = llformat("%d", (int)gViewerStats->mSimFPS.getCurrent());
215 fps = llformat("%.1f%", gViewerStats->mFPSStat.getMeanPerSec());
216 packetsIn = llformat("%d", (int)gViewerStats->mSimInPPS.getCurrent());
217 packetsOut = llformat("%d", (int)gViewerStats->mSimOutPPS.getCurrent());
218 }
219
220 // fps
221 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(fps).c_str()));
222 // simfps
223 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(simfps).c_str()));
224 // packets in
225 mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(packetsIn).c_str()));
226 // packets out
227 mLCD->SetText(mPageArray[0].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(packetsOut).c_str()));
228 // packet loss
229 mLCD->SetText(mPageArray[0].mDisplayItemArray[4], (LPCTSTR)(utf8str_to_utf16str(packetLoss).c_str()));
230 // ping
231 mLCD->SetText(mPageArray[0].mDisplayItemArray[5], (LPCTSTR)(utf8str_to_utf16str(ping).c_str()));
232}
233
234void llDebugPageGroup::GetDisplayable()
235{
236 mDisplayPage = gSavedSettings.getBOOL("DisplayDebug");
237}
238
239llDebugPageGroup::llDebugPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
240:llLCDPageGroup(LCD, type, SLIcon)
241{
242 // create a new specific page
243 llLCDSpecificPage newPage;
244 newPage.mPageIndex = mLCD->AddNewPage() - 1;
245 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
246
247 // add in all the display parts for this specific page
248
249 // add in the icon - all pages have this - we don't need to track this because we never update it
250 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
251 mLCD->SetOrigin(m_rightIcon, 0, 0);
252
253 // add Title
254 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
255 mLCD->SetOrigin(title, 32, 0);
256 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("DebugInfo")).c_str()));
257
258 HANDLE fpsStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
259 mLCD->SetOrigin(fpsStatic, ICON_WIDTH, 11);
260 mLCD->SetText(fpsStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("FPS")).c_str()));
261
262 HANDLE fps = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
263 mLCD->SetOrigin(fps, ICON_WIDTH+25, 11);
264 mLCD->SetText(fps, _T(""));
265 newPage.mDisplayItemArray.push_back(fps);
266
267 HANDLE simfpsStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 35);
268 mLCD->SetOrigin(simfpsStatic, ICON_WIDTH+37+25, 11);
269 mLCD->SetText(simfpsStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("SimFPS")).c_str()));
270
271 HANDLE simfps = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
272 mLCD->SetOrigin(simfps, ICON_WIDTH+37+27+37, 11);
273 mLCD->SetText(simfps, _T(""));
274 newPage.mDisplayItemArray.push_back(simfps);
275
276 HANDLE packetsinStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
277 mLCD->SetOrigin(packetsinStatic, ICON_WIDTH, 22);
278 mLCD->SetText(packetsinStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Pin")).c_str()));
279
280 HANDLE packetsin = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
281 mLCD->SetOrigin(packetsin, ICON_WIDTH+32, 22);
282 mLCD->SetText(packetsin, _T(""));
283 newPage.mDisplayItemArray.push_back(packetsin);
284
285 HANDLE packetsoutStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
286 mLCD->SetOrigin(packetsoutStatic, ICON_WIDTH+37+25, 22);
287 mLCD->SetText(packetsoutStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Pout")).c_str()));
288
289 HANDLE packetsout = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
290 mLCD->SetOrigin(packetsout, ICON_WIDTH+37+27+37, 22);
291 mLCD->SetText(packetsout, _T(""));
292 newPage.mDisplayItemArray.push_back(packetsout);
293
294 HANDLE packetlossStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
295 mLCD->SetOrigin(packetlossStatic, ICON_WIDTH, 33);
296 mLCD->SetText(packetlossStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("PLoss")).c_str()));
297
298 HANDLE packetloss = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 35);
299 mLCD->SetOrigin(packetloss, ICON_WIDTH+33, 33);
300 mLCD->SetText(packetloss, _T(""));
301 newPage.mDisplayItemArray.push_back(packetloss);
302
303 HANDLE pingStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 20);
304 mLCD->SetOrigin(pingStatic, ICON_WIDTH+32+38, 33);
305 mLCD->SetText(pingStatic,(LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Ping")).c_str()));
306
307 HANDLE ping = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
308 mLCD->SetOrigin(ping, ICON_WIDTH+37+27+37, 33);
309 mLCD->SetText(ping, _T(""));
310 newPage.mDisplayItemArray.push_back(ping);
311
312 // and then insert it
313 mPageArray.push_back(newPage);
314}
315
316/////////////////////////////////////
317//
318// Linden Account group class
319//
320/////////////////////////////////////
321
322void llLindenPageGroup::UpdateDetails()
323{
324 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
325 LLString time = llformat("Unknown");
326 LLString balance = llformat("Unknown");
327 // region name
328 if (gStatusBar)
329 {
330 time = gStatusBar->mRegionDetails.mTime;
331 balance = llformat("%d", gStatusBar->mRegionDetails.mBalance);
332 }
333
334 // time name
335 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(time).c_str()));
336 // balance
337 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(balance).c_str()));
338}
339
340void llLindenPageGroup::GetDisplayable()
341{
342 mDisplayPage = gSavedSettings.getBOOL("DisplayLinden");
343}
344
345llLindenPageGroup::llLindenPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
346:llLCDPageGroup(LCD, type, SLIcon)
347{
348 // create a new specific page
349 llLCDSpecificPage newPage;
350 newPage.mPageIndex = mLCD->AddNewPage() - 1;
351 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
352
353 // add in all the display parts for this specific page
354
355 // add in the icon - all pages have this - we don't need to track this because we never update it
356 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
357 mLCD->SetOrigin(m_rightIcon, 0, 0);
358
359 // add Title
360 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
361 mLCD->SetOrigin(title, 32, 0);
362 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("AccountDetails")).c_str()));
363
364 HANDLE timeStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
365 mLCD->SetOrigin(timeStatic, ICON_WIDTH, 11);
366 mLCD->SetText(timeStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Time")).c_str()));
367
368 HANDLE time = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 32);
369 mLCD->SetOrigin(time, ICON_WIDTH+32, 11);
370 mLCD->SetText(time, _T(""));
371 newPage.mDisplayItemArray.push_back(time);
372
373 HANDLE balanceStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
374 mLCD->SetOrigin(balanceStatic, ICON_WIDTH, 22);
375 mLCD->SetText(balanceStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LBal")).c_str()));
376
377 HANDLE balance = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 35);
378 mLCD->SetOrigin(balance, ICON_WIDTH+35, 22);
379 mLCD->SetText(balance, _T(""));
380 newPage.mDisplayItemArray.push_back(balance);
381
382 // and then insert it
383 mPageArray.push_back(newPage);
384}
385
386/////////////////////////////////////
387//
388// Region Group page
389//
390/////////////////////////////////////
391
392void llRegionPageGroup::UpdateDetails()
393{
394 LLString pos = llformat("Unknown");
395 LLString parcel = llformat("Unknown");
396 LLString region = llformat("Unknown");
397 LLString owner = llformat("Unknown");
398 LLString forsale = bogus->childGetText("No");
399 LLString rtype = llformat("Unknown");
400 LLString sqm = llformat("0");
401 LLString traffic = llformat("0");
402
403 // region name
404 if (gStatusBar)
405 {
406 pos = llformat(" %d, %d, %d", gStatusBar->mRegionDetails.mX, gStatusBar->mRegionDetails.mY, gStatusBar->mRegionDetails.mZ);
407 parcel = llformat("%s", gStatusBar->mRegionDetails.mParcelName);
408 region = gStatusBar->mRegionDetails.mRegionName;
409 rtype = llformat("%s", gStatusBar->mRegionDetails.mAccesString);
410 sqm = llformat("%d", gStatusBar->mRegionDetails.mArea);
411 if (gStatusBar->mRegionDetails.mForSale)
412 {
413 forsale = bogus->childGetText("Yes");
414 }
415 owner = llformat("%s", gStatusBar->mRegionDetails.mOwner);
416 traffic = llformat("%d", (int)gStatusBar->mRegionDetails.mTraffic);
417 }
418
419 // update first page
420 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
421 // region name
422 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(region).c_str()));
423 // parcel name
424 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(parcel).c_str()));
425 // position name
426 mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(pos).c_str()));
427 // Sqm
428 mLCD->SetText(mPageArray[0].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(sqm).c_str()));
429
430 // update second page
431 mLCD->ModifyControlsOnPage(mPageArray[1].mPageIndex);
432 // owner
433 mLCD->SetText(mPageArray[1].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(owner).c_str()));
434 // access type
435 mLCD->SetText(mPageArray[1].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(rtype).c_str()));
436 // forsale
437 mLCD->SetText(mPageArray[1].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(forsale).c_str()));
438 // traffic
439 mLCD->SetText(mPageArray[1].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(traffic).c_str()));
440
441}
442
443void llRegionPageGroup::GetDisplayable()
444{
445 mDisplayPage = gSavedSettings.getBOOL("DisplayRegion");
446}
447
448llRegionPageGroup::llRegionPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
449:llLCDPageGroup(LCD, type, SLIcon)
450{
451 // create a new specific page
452 llLCDSpecificPage newPage;
453 newPage.mPageIndex = mLCD->AddNewPage() - 1;
454 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
455
456 // add in all the display parts for this specific page
457
458 // add in the icon - all pages have this - we don't need to track this because we never update it
459 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
460 mLCD->SetOrigin(m_rightIcon, 0, 0);
461
462 // add Title
463 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
464 mLCD->SetOrigin(title, 32, 0);
465 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LocationDetails1")).c_str()));
466
467 HANDLE regionNameStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
468 mLCD->SetOrigin(regionNameStatic, ICON_WIDTH, 11);
469 mLCD->SetText(regionNameStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Region")).c_str()));
470
471 HANDLE regionName = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 30 - 2);
472 mLCD->SetOrigin(regionName, ICON_WIDTH+32, 11);
473 mLCD->SetText(regionName, _T(""));
474 newPage.mDisplayItemArray.push_back(regionName);
475
476 HANDLE parcelStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
477 mLCD->SetOrigin(parcelStatic, ICON_WIDTH, 22);
478 mLCD->SetText(parcelStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Parcel")).c_str()));
479
480 HANDLE parcel = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160 - ICON_WIDTH - 30 - 2);
481 mLCD->SetOrigin(parcel, ICON_WIDTH+32, 22);
482 mLCD->SetText(parcel, _T(""));
483 newPage.mDisplayItemArray.push_back(parcel);
484
485 HANDLE positionStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
486 mLCD->SetOrigin(positionStatic, 0, 33);
487 mLCD->SetText(positionStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Parcel")).c_str()));
488
489 HANDLE position = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 60);
490 mLCD->SetOrigin(position, 20, 33);
491 mLCD->SetText(position, _T("100, 100, 100"));
492 newPage.mDisplayItemArray.push_back(position);
493
494 HANDLE sqmStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
495 mLCD->SetOrigin(sqmStatic, 90, 33);
496 mLCD->SetText(sqmStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Sqm")).c_str()));
497
498 HANDLE sqm = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
499 mLCD->SetOrigin(sqm, 90 + 20, 33);
500 mLCD->SetText(sqm, _T("1000"));
501 newPage.mDisplayItemArray.push_back(sqm);
502
503 // and then insert it
504 mPageArray.push_back(newPage);
505
506 // create a new specific page
507 llLCDSpecificPage newPage2;
508 newPage2.mPageIndex = mLCD->AddNewPage() - 1;
509 mLCD->ModifyControlsOnPage(newPage2.mPageIndex);
510
511 // add in all the display parts for this specific page
512
513 // add in the icon - all pages have this - we don't need to track this because we never update it
514 m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
515 mLCD->SetOrigin(m_rightIcon, 0, 0);
516
517 // add Title
518 title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
519 mLCD->SetOrigin(title, 32, 0);
520 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LocationDetails2")).c_str()));
521
522 HANDLE ownerStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
523 mLCD->SetOrigin(ownerStatic, ICON_WIDTH, 11);
524 mLCD->SetText(ownerStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Owner")).c_str()));
525
526 HANDLE owner = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - 30 - ICON_WIDTH - 2);
527 mLCD->SetOrigin(owner, ICON_WIDTH+32, 11);
528 mLCD->SetText(owner, _T(""));
529 newPage2.mDisplayItemArray.push_back(owner);
530
531 HANDLE typeStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
532 mLCD->SetOrigin(typeStatic, ICON_WIDTH, 22);
533 mLCD->SetText(typeStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Type")).c_str()));
534
535 HANDLE rtype = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - 30 - ICON_WIDTH - 2);
536 mLCD->SetOrigin(rtype, ICON_WIDTH+32, 22);
537 mLCD->SetText(rtype, _T(""));
538 newPage2.mDisplayItemArray.push_back(rtype);
539
540 HANDLE forsaleStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
541 mLCD->SetOrigin(forsaleStatic, 0, 33);
542 mLCD->SetText(forsaleStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Forsale")).c_str()));
543
544 HANDLE forsale = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
545 mLCD->SetOrigin(forsale, 42, 33);
546 mLCD->SetText(forsale, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("No")).c_str()));
547 newPage2.mDisplayItemArray.push_back(forsale);
548
549 HANDLE trafficStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 50);
550 mLCD->SetOrigin(trafficStatic, 70, 33);
551 mLCD->SetText(trafficStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Traffic")).c_str()));
552
553 HANDLE traffic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
554 mLCD->SetOrigin(traffic, 122, 33);
555 mLCD->SetText(traffic, _T("200"));
556 newPage2.mDisplayItemArray.push_back(traffic);
557
558 // and then insert it
559 mPageArray.push_back(newPage2);
560}
561
562/////////////////////////////////////
563//
564// Chat group Page class
565//
566/////////////////////////////////////
567
568void llChatPageGroup::UpdateDetails()
569{
570 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
571 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(mLine1).c_str()));
572 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(mLine2).c_str()));
573 mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(mLine3).c_str()));
574}
575
576void llChatPageGroup::GetDisplayable()
577{
578 mDisplayPage = gSavedSettings.getBOOL("DisplayChat");
579}
580
581void llChatPageGroup::InsertText(const LLString &newLine)
582{
583 mLine1 = mLine2;
584 mLine2 = mLine3;
585 mLine3 = newLine;
586}
587
588llChatPageGroup::llChatPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
589:llLCDPageGroup(LCD, type, SLIcon)
590{
591 mLine1 = llformat("");
592 mLine2 = llformat("");
593 mLine3 = llformat("");
594 // create a new specific page
595 llLCDSpecificPage newPage;
596 newPage.mPageIndex = mLCD->AddNewPage() - 1;
597 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
598
599 // add in all the display parts for this specific page
600
601 // add in the icon - all pages have this - we don't need to track this because we never update it
602 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
603 mLCD->SetOrigin(m_rightIcon, 0, 0);
604
605 // add Title
606 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
607 mLCD->SetOrigin(title, 32, 0);
608 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Last3ChatLines")).c_str()));
609
610 // add line
611 HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
612 mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
613 mLCD->SetText(chatLine, _T(""));
614 newPage.mDisplayItemArray.push_back(chatLine);
615
616 // add line
617 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
618 mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
619 mLCD->SetText(chatLine, _T(""));
620 newPage.mDisplayItemArray.push_back(chatLine);
621
622 // add line
623 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
624 mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
625 mLCD->SetText(chatLine, _T(""));
626 newPage.mDisplayItemArray.push_back(chatLine);
627
628 // and then insert it
629 mPageArray.push_back(newPage);
630}
631
632/////////////////////////////////////
633//
634// IM Page Group class
635//
636/////////////////////////////////////
637
638void llIMPageGroup::UpdateDetails()
639{
640 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
641 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(mLine1).c_str()));
642 mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(mLine2).c_str()));
643 mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(mLine3).c_str()));
644}
645
646void llIMPageGroup::GetDisplayable()
647{
648 mDisplayPage = gSavedSettings.getBOOL("DisplayIM");
649}
650
651void llIMPageGroup::InsertText(const LLString &newLine)
652{
653 mLine1 = mLine2;
654 mLine2 = mLine3;
655 mLine3 = newLine;
656}
657
658llIMPageGroup::llIMPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
659:llLCDPageGroup(LCD, type, SLIcon)
660{
661 mLine1 = llformat("");
662 mLine2 = llformat("");
663 mLine3 = llformat("");
664 // create a new specific page
665 llLCDSpecificPage newPage;
666 newPage.mPageIndex = mLCD->AddNewPage() - 1;
667 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
668
669 // add in all the display parts for this specific page
670
671 // add in the icon - all pages have this - we don't need to track this because we never update it
672 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
673 mLCD->SetOrigin(m_rightIcon, 0, 0);
674
675 // add Title
676 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
677 mLCD->SetOrigin(title, 32, 0);
678 mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Last3IMLines")).c_str()));
679
680 // add line
681 HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
682 mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
683 mLCD->SetText(chatLine, _T(""));
684 newPage.mDisplayItemArray.push_back(chatLine);
685
686 // add line
687 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
688 mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
689 mLCD->SetText(chatLine, _T(""));
690 newPage.mDisplayItemArray.push_back(chatLine);
691
692 // add line
693 chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
694 mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
695 mLCD->SetText(chatLine, _T(""));
696 newPage.mDisplayItemArray.push_back(chatLine);
697
698 // and then insert it
699 mPageArray.push_back(newPage);
700}
701
702#endif //LL_WINDOWS
703#endif //LL_LCD_COMPILE \ No newline at end of file
diff --git a/linden/indra/newview/lllcd.h b/linden/indra/newview/lllcd.h
new file mode 100644
index 0000000..e6583c7
--- /dev/null
+++ b/linden/indra/newview/lllcd.h
@@ -0,0 +1,110 @@
1/**
2 * @file lllcd.h
3 * @brief Description of the LCDdisplay class.
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31#define LL_LLLCD_H
32
33#ifndef LL_LOGITECH_LCD_H
34#include "lllogitechlcd.h"
35#endif
36
37
38// class that defines the specific Debug page group of pages
39class llDebugPageGroup : public llLCDPageGroup
40{
41public:
42 llDebugPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
43 virtual void UpdateDetails();
44 virtual void GetDisplayable();
45};
46
47// class that defines the specific Debug Console group of pages
48class llDebugConsolePageGroup : public llLCDPageGroup
49{
50public:
51 llDebugConsolePageGroup(CEzLcd *LCD, int type, HICON SLIcon);
52 virtual void UpdateDetails();
53 virtual void GetDisplayable();
54 void InsertText(const LLWString &newLine);
55private:
56 LLWString mLine1;
57 LLWString mLine2;
58 LLWString mLine3;
59};
60
61// class that defines the specific Linden Account group of pages
62class llLindenPageGroup : public llLCDPageGroup
63{
64public:
65 llLindenPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
66 virtual void UpdateDetails();
67 virtual void GetDisplayable();
68};
69
70// class that defines the specific Chat group of pages
71class llChatPageGroup : public llLCDPageGroup
72{
73public:
74 llChatPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
75 virtual void UpdateDetails();
76 virtual void GetDisplayable();
77 void InsertText(const LLString &newLine);
78private:
79 LLString mLine1;
80 LLString mLine2;
81 LLString mLine3;
82};
83
84// class that defines the specific IM group of pages
85class llIMPageGroup : public llLCDPageGroup
86{
87public:
88 llIMPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
89 virtual void UpdateDetails();
90 virtual void GetDisplayable();
91 void InsertText(const LLString &newLine);
92private:
93 LLString mLine1;
94 LLString mLine2;
95 LLString mLine3;
96};
97
98// class that defines the specific Region group of pages
99class llRegionPageGroup : public llLCDPageGroup
100{
101public:
102 llRegionPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
103 virtual void UpdateDetails();
104 virtual void GetDisplayable();
105};
106
107class llLCD;
108extern llLCD *gLcdScreen;
109
110//#endif
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index d8131c2..bcdb6c6 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -42,6 +42,7 @@
42#include "llfocusmgr.h" 42#include "llfocusmgr.h"
43#include "llimview.h" 43#include "llimview.h"
44#include "llmediaengine.h" 44#include "llmediaengine.h"
45#include "llmediaremotectrl.h"
45#include "llpanelaudiovolume.h" 46#include "llpanelaudiovolume.h"
46#include "llparcel.h" 47#include "llparcel.h"
47#include "lltextbox.h" 48#include "lltextbox.h"
@@ -124,7 +125,7 @@ LLOverlayBar::LLOverlayBar(const std::string& name, const LLRect& rect)
124 setMouseOpaque(FALSE); 125 setMouseOpaque(FALSE);
125 setIsChrome(TRUE); 126 setIsChrome(TRUE);
126 127
127 isBuilt = FALSE; 128 mBuilt = false;
128 129
129 LLCallbackMap::map_t factory_map; 130 LLCallbackMap::map_t factory_map;
130 factory_map["master_volume"] = LLCallbackMap(LLOverlayBar::createMasterRemote, this); 131 factory_map["master_volume"] = LLCallbackMap(LLOverlayBar::createMasterRemote, this);
@@ -141,7 +142,7 @@ LLOverlayBar::LLOverlayBar(const std::string& name, const LLRect& rect)
141 childSetAction("Stand Up",onClickStandUp,this); 142 childSetAction("Stand Up",onClickStandUp,this);
142 143
143 mIsFocusRoot = TRUE; 144 mIsFocusRoot = TRUE;
144 isBuilt = true; 145 mBuilt = true;
145 146
146 // make overlay bar conform to window size 147 // make overlay bar conform to window size
147 setRect(rect); 148 setRect(rect);
@@ -168,7 +169,7 @@ void LLOverlayBar::reshape(S32 width, S32 height, BOOL called_from_parent)
168{ 169{
169 LLView::reshape(width, height, called_from_parent); 170 LLView::reshape(width, height, called_from_parent);
170 171
171 if (isBuilt) 172 if (mBuilt)
172 { 173 {
173 layoutButtons(); 174 layoutButtons();
174 } 175 }
diff --git a/linden/indra/newview/lloverlaybar.h b/linden/indra/newview/lloverlaybar.h
index d8b9ba1..2293463 100644
--- a/linden/indra/newview/lloverlaybar.h
+++ b/linden/indra/newview/lloverlaybar.h
@@ -33,13 +33,13 @@
33#define LL_LLOVERLAYBAR_H 33#define LL_LLOVERLAYBAR_H
34 34
35#include "llpanel.h" 35#include "llpanel.h"
36#include "llmediaremotectrl.h"
37 36
38// "Constants" loaded from settings.xml at start time 37// "Constants" loaded from settings.xml at start time
39extern S32 STATUS_BAR_HEIGHT; 38extern S32 STATUS_BAR_HEIGHT;
40 39
41class LLButton; 40class LLButton;
42class LLLineEditor; 41class LLLineEditor;
42class LLMediaRemoteCtrl;
43class LLMessageSystem; 43class LLMessageSystem;
44class LLTextBox; 44class LLTextBox;
45class LLTextEditor; 45class LLTextEditor;
@@ -102,7 +102,7 @@ protected:
102 LLMediaRemoteCtrl* mMusicRemote; 102 LLMediaRemoteCtrl* mMusicRemote;
103 LLMediaRemoteCtrl* mMediaRemote; 103 LLMediaRemoteCtrl* mMediaRemote;
104 LLVoiceRemoteCtrl* mVoiceRemote; 104 LLVoiceRemoteCtrl* mVoiceRemote;
105 BOOL isBuilt; 105 bool mBuilt; // dialog constructed yet?
106 enum { STOPPED=0, PLAYING=1, PAUSED=2 }; 106 enum { STOPPED=0, PLAYING=1, PAUSED=2 };
107 BOOL mMediaState; 107 BOOL mMediaState;
108 BOOL mMusicState; 108 BOOL mMusicState;
diff --git a/linden/indra/newview/llpanelLCD.cpp b/linden/indra/newview/llpanelLCD.cpp
new file mode 100644
index 0000000..960a321
--- /dev/null
+++ b/linden/indra/newview/llpanelLCD.cpp
@@ -0,0 +1,131 @@
1/**
2 * @file llpanellcd.cpp
3 * @brief lcd options panel
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "llviewerprecompiledheaders.h"
33
34#include "llpanelLCD.h"
35
36// linden library includes
37#include "llerror.h"
38#include "llrect.h"
39#include "llfontgl.h"
40#include "message.h"
41#include "llvieweruictrlfactory.h"
42
43// project includes
44#include "llviewerwindow.h"
45#include "llcheckboxctrl.h"
46#include "llradiogroup.h"
47#include "llresmgr.h"
48#include "lltextbox.h"
49#include "llui.h"
50#include "viewer.h"
51
52//Ventrella
53#include "llagent.h"
54//end Ventrella
55
56// for Logitech LCD keyboards / speakers
57#ifndef LL_LCD_H
58#include "lllcd.h"
59#endif
60
61
62//
63// Globals
64//
65
66//
67// Static functions
68//
69
70
71LLPanelLCD::LLPanelLCD()
72{
73 gUICtrlFactory->buildPanel(this, "panel_preferences_lcd.xml");
74}
75
76BOOL LLPanelLCD::postBuild()
77{
78 requires("LCDDestination", WIDGET_TYPE_RADIO_GROUP);
79 requires("DisplayLinden", WIDGET_TYPE_CHECKBOX);
80 requires("DisplayDebug", WIDGET_TYPE_CHECKBOX);
81 requires("DisplayDebugConsole", WIDGET_TYPE_CHECKBOX);
82 requires("DisplayRegion", WIDGET_TYPE_CHECKBOX);
83 requires("DisplayChat", WIDGET_TYPE_CHECKBOX);
84 requires("DisplayIM", WIDGET_TYPE_CHECKBOX);
85
86 if (!checkRequirements())
87 {
88 return FALSE;
89 }
90
91 refresh();
92
93 return TRUE;
94}
95
96
97LLPanelLCD::~LLPanelLCD()
98{
99 // Children all cleaned up by default view destructor.
100}
101
102void LLPanelLCD::refresh()
103{
104 mLCDDestination = gSavedSettings.getS32("LCDDestination");
105 mDisplayChat = gSavedSettings.getBOOL("DisplayChat");
106 mDisplayIM = gSavedSettings.getBOOL("DisplayIM");
107 mDisplayRegion = gSavedSettings.getBOOL("DisplayRegion");
108 mDisplayDebug = gSavedSettings.getBOOL("DisplayDebug");
109 mDisplayDebugConsole = gSavedSettings.getBOOL("DisplayDebugConsole");
110 mDisplayLinden = gSavedSettings.getBOOL("DisplayLinden");
111
112 LLPanel::refresh();
113}
114
115void LLPanelLCD::apply()
116{
117 // nothing really to do here.
118}
119
120
121void LLPanelLCD::cancel()
122{
123 // doing this to restore situation when we entered this function
124 gSavedSettings.setS32("LCDDestination", mLCDDestination);
125 gSavedSettings.setBOOL("DisplayChat", mDisplayChat);
126 gSavedSettings.setBOOL("DisplayIM", mDisplayIM);
127 gSavedSettings.setBOOL("DisplayRegion", mDisplayRegion);
128 gSavedSettings.setBOOL("DisplayDebug", mDisplayDebug);
129 gSavedSettings.setBOOL("DisplayDebugConsole", mDisplayDebugConsole);
130 gSavedSettings.setBOOL("DisplayLinden", mDisplayLinden);
131} \ No newline at end of file
diff --git a/linden/indra/newview/llpanelLCD.h b/linden/indra/newview/llpanelLCD.h
new file mode 100644
index 0000000..60c3b9d
--- /dev/null
+++ b/linden/indra/newview/llpanelLCD.h
@@ -0,0 +1,62 @@
1/**
2 * @file llpanelLCD.h
3 * @brief lcd options panel
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_PANEL_LCD_H
33#define LL_PANEL_LCD_H
34
35#include "llpanel.h"
36
37class LLCheckBoxCtrl;
38
39
40class LLPanelLCD : public LLPanel
41{
42public:
43 LLPanelLCD();
44 virtual ~LLPanelLCD();
45
46 virtual BOOL postBuild();
47 virtual void refresh();
48 void apply();
49 void cancel();
50
51protected:
52 S32 mLCDDestination;
53 BOOL mDisplayChat;
54 BOOL mDisplayRegion;
55 BOOL mDisplayDebug;
56 BOOL mDisplayDebugConsole;
57 BOOL mDisplayLinden;
58 BOOL mDisplayIM;
59
60};
61
62#endif
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index 1e93c12..cb75f16 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -47,9 +47,11 @@
47#include "llbutton.h" 47#include "llbutton.h"
48#include "llcheckboxctrl.h" 48#include "llcheckboxctrl.h"
49#include "llclassifiedflags.h" 49#include "llclassifiedflags.h"
50#include "llclassifiedstatsresponder.h"
50#include "llviewercontrol.h" 51#include "llviewercontrol.h"
51#include "lllineeditor.h" 52#include "lllineeditor.h"
52#include "llfloateravatarinfo.h" 53#include "llfloateravatarinfo.h"
54#include "llfloaterclassified.h"
53#include "lltabcontainervertical.h" 55#include "lltabcontainervertical.h"
54#include "lltextbox.h" 56#include "lltextbox.h"
55#include "llcombobox.h" 57#include "llcombobox.h"
@@ -62,6 +64,7 @@
62#include "llworldmap.h" 64#include "llworldmap.h"
63#include "llfloaterworldmap.h" 65#include "llfloaterworldmap.h"
64#include "llviewergenericmessage.h" // send_generic_message 66#include "llviewergenericmessage.h" // send_generic_message
67#include "llviewerregion.h"
65#include "llviewerwindow.h" // for window width, height 68#include "llviewerwindow.h" // for window width, height
66#include "viewer.h" // app_abort_quit() 69#include "viewer.h" // app_abort_quit()
67 70
@@ -98,9 +101,10 @@ static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
98//static 101//static
99std::list<LLPanelClassified*> LLPanelClassified::sAllPanels; 102std::list<LLPanelClassified*> LLPanelClassified::sAllPanels;
100 103
101LLPanelClassified::LLPanelClassified(BOOL in_finder) 104LLPanelClassified::LLPanelClassified(BOOL in_finder, bool from_search)
102: LLPanel("Classified Panel"), 105: LLPanel("Classified Panel"),
103 mInFinder(in_finder), 106 mInFinder(in_finder),
107 mFromSearch(from_search),
104 mDirty(false), 108 mDirty(false),
105 mForceClose(false), 109 mForceClose(false),
106 mLocationChanged(false), 110 mLocationChanged(false),
@@ -225,7 +229,7 @@ BOOL LLPanelClassified::postBuild()
225 mMatureCheck = LLViewerUICtrlFactory::getCheckBoxByName(this, "classified_mature_check"); 229 mMatureCheck = LLViewerUICtrlFactory::getCheckBoxByName(this, "classified_mature_check");
226 mMatureCheck->setCommitCallback(onCommitAny); 230 mMatureCheck->setCommitCallback(onCommitAny);
227 mMatureCheck->setCallbackUserData(this); 231 mMatureCheck->setCallbackUserData(this);
228 if (gAgent.mAccess < SIM_ACCESS_MATURE) 232 if (gAgent.isTeen())
229 { 233 {
230 // Teens don't get to set mature flag. JC 234 // Teens don't get to set mature flag. JC
231 mMatureCheck->setVisible(FALSE); 235 mMatureCheck->setVisible(FALSE);
@@ -364,7 +368,11 @@ void LLPanelClassified::setClassifiedID(const LLUUID& id)
364 mClassifiedID = id; 368 mClassifiedID = id;
365} 369}
366 370
367 371void LLPanelClassified::setClickThroughText(const std::string& text)
372{
373 if(mClickThroughText)
374 this->mClickThroughText->setText(text);
375}
368//static 376//static
369void LLPanelClassified::setClickThrough(const LLUUID& classified_id, 377void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
370 S32 teleport, 378 S32 teleport,
@@ -380,6 +388,16 @@ void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
380 continue; 388 continue;
381 } 389 }
382 390
391 // We need to see if we should use the new stat table or the old.
392 // If the SearchStatRequest capability exists, then the data will come
393 // from the new table.
394 std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
395
396 if (!url.empty())
397 {
398 return;
399 }
400
383 if (self->mClickThroughText) 401 if (self->mClickThroughText)
384 { 402 {
385 std::string msg = llformat("Clicks: %d teleport, %d map, %d profile", 403 std::string msg = llformat("Clicks: %d teleport, %d map, %d profile",
@@ -421,6 +439,18 @@ void LLPanelClassified::sendClassifiedInfoRequest()
421 439
422 mDataRequested = TRUE; 440 mDataRequested = TRUE;
423 mRequestedID = mClassifiedID; 441 mRequestedID = mClassifiedID;
442
443 // While we're at it let's get the stats from the new table if that
444 // capability exists.
445 std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
446 LLSD body;
447 body["classified_id"] = mClassifiedID;
448
449 if (!url.empty())
450 {
451 llinfos << "Classified stat request via capability" << llendl;
452 LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(this->getHandle()));
453 }
424 } 454 }
425} 455}
426 456
@@ -900,6 +930,19 @@ void LLPanelClassified::sendClassifiedClickMessage(const char* type)
900 strings.push_back(type); 930 strings.push_back(type);
901 LLUUID no_invoice; 931 LLUUID no_invoice;
902 send_generic_message("classifiedclick", strings, no_invoice); 932 send_generic_message("classifiedclick", strings, no_invoice);
933
934 // New classified click-through handling
935 LLSD body;
936 body["type"] = type;
937 body["from_search"] = mFromSearch;
938 body["classified_id"] = mClassifiedID;
939 std::string url = gAgent.getRegion()->getCapability("SearchStatTracking");
940
941 if (!url.empty())
942 {
943 llinfos << "LLPanelClassified::sendClassifiedClickMessage via capability" << llendl;
944 LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
945 }
903} 946}
904 947
905//////////////////////////////////////////////////////////////////////////////////////////// 948////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h
index 56c2fbd..6ebac4c 100644
--- a/linden/indra/newview/llpanelclassified.h
+++ b/linden/indra/newview/llpanelclassified.h
@@ -57,7 +57,7 @@ class LLMessageSystem;
57class LLPanelClassified : public LLPanel 57class LLPanelClassified : public LLPanel
58{ 58{
59public: 59public:
60 LLPanelClassified(BOOL in_finder); 60 LLPanelClassified(BOOL in_finder, bool from_search = false);
61 /*virtual*/ ~LLPanelClassified(); 61 /*virtual*/ ~LLPanelClassified();
62 62
63 void reset(); 63 void reset();
@@ -79,6 +79,7 @@ public:
79 void initNewClassified(); 79 void initNewClassified();
80 80
81 void setClassifiedID(const LLUUID& id); 81 void setClassifiedID(const LLUUID& id);
82 void setClickThroughText(const std::string& text);
82 static void setClickThrough(const LLUUID& classified_id, 83 static void setClickThrough(const LLUUID& classified_id,
83 S32 teleport, S32 map, S32 profile); 84 S32 teleport, S32 map, S32 profile);
84 85
@@ -118,6 +119,7 @@ protected:
118 119
119protected: 120protected:
120 BOOL mInFinder; 121 BOOL mInFinder;
122 bool mFromSearch;
121 BOOL mDirty; 123 BOOL mDirty;
122 bool mForceClose; 124 bool mForceClose;
123 bool mLocationChanged; 125 bool mLocationChanged;
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index 3e79c9d..c4e33cb 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -297,13 +297,7 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
297 // Start with everyone invisible 297 // Start with everyone invisible
298 if (self->mFloaterDirectory) 298 if (self->mFloaterDirectory)
299 { 299 {
300 if (self->mFloaterDirectory->mPanelAvatarp) self->mFloaterDirectory->mPanelAvatarp->setVisible(FALSE); 300 self->mFloaterDirectory->hideAllDetailPanels();
301 if (self->mFloaterDirectory->mPanelEventp) self->mFloaterDirectory->mPanelEventp->setVisible(FALSE);
302 if (self->mFloaterDirectory->mPanelGroupp) self->mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
303 if (self->mFloaterDirectory->mPanelGroupHolderp) self->mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
304 if (self->mFloaterDirectory->mPanelPlacep) self->mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
305 if (self->mFloaterDirectory->mPanelPlaceSmallp) self->mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
306 if (self->mFloaterDirectory->mPanelClassifiedp) self->mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
307 } 301 }
308 302
309 if (FALSE == list->getCanSelect()) 303 if (FALSE == list->getCanSelect())
@@ -317,62 +311,70 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
317 return; 311 return;
318 } 312 }
319 313
320 LLUUID id = list->getCurrentID(); 314 LLSD item_id = list->getCurrentID();
321 S32 type = self->mResultsContents[id_str]["type"]; 315 S32 type = self->mResultsContents[id_str]["type"];
322 LLString name = self->mResultsContents[id_str]["name"].asString(); 316 if (type == EVENT_CODE)
323 317 {
318 // all but events use the UUID above
319 item_id = self->mResultsContents[id_str]["event_id"];
320 }
321
322 //LLString name = self->mResultsContents[id_str]["name"].asString();
323 self->showDetailPanel(type, item_id);
324}
325
326void LLPanelDirBrowser::showDetailPanel(S32 type, LLSD id)
327{
324 switch(type) 328 switch(type)
325 { 329 {
326 // These are both people searches. Let the panel decide if they are online or offline. 330 case AVATAR_CODE:
327 case ONLINE_CODE: 331 if (mFloaterDirectory && mFloaterDirectory->mPanelAvatarp)
328 case OFFLINE_CODE:
329 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelAvatarp)
330 { 332 {
331 self->mFloaterDirectory->mPanelAvatarp->setVisible(TRUE); 333 mFloaterDirectory->mPanelAvatarp->setVisible(TRUE);
332 self->mFloaterDirectory->mPanelAvatarp->setAvatarID(id, name, ONLINE_STATUS_NO); 334 mFloaterDirectory->mPanelAvatarp->setAvatarID(id.asUUID(), "", ONLINE_STATUS_NO);
333 } 335 }
334 break; 336 break;
335 case EVENT_CODE: 337 case EVENT_CODE:
336 { 338 {
337 U32 event_id = (U32)self->mResultsContents[id_str]["event_id"].asInteger(); 339 U32 event_id = (U32)id.asInteger();
338 self->showEvent(event_id); 340 showEvent(event_id);
339 } 341 }
340 break; 342 break;
341 case GROUP_CODE: 343 case GROUP_CODE:
342 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelGroupHolderp) 344 if (mFloaterDirectory && mFloaterDirectory->mPanelGroupHolderp)
343 { 345 {
344 self->mFloaterDirectory->mPanelGroupHolderp->setVisible(TRUE); 346 mFloaterDirectory->mPanelGroupHolderp->setVisible(TRUE);
345 } 347 }
346 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelGroupp) 348 if (mFloaterDirectory && mFloaterDirectory->mPanelGroupp)
347 { 349 {
348 self->mFloaterDirectory->mPanelGroupp->setVisible(TRUE); 350 mFloaterDirectory->mPanelGroupp->setVisible(TRUE);
349 self->mFloaterDirectory->mPanelGroupp->setGroupID(id); 351 mFloaterDirectory->mPanelGroupp->setGroupID(id.asUUID());
350 } 352 }
351 break; 353 break;
352 case CLASSIFIED_CODE: 354 case CLASSIFIED_CODE:
353 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelClassifiedp) 355 if (mFloaterDirectory && mFloaterDirectory->mPanelClassifiedp)
354 { 356 {
355 self->mFloaterDirectory->mPanelClassifiedp->setVisible(TRUE); 357 mFloaterDirectory->mPanelClassifiedp->setVisible(TRUE);
356 self->mFloaterDirectory->mPanelClassifiedp->setClassifiedID(id); 358 mFloaterDirectory->mPanelClassifiedp->setClassifiedID(id.asUUID());
357 self->mFloaterDirectory->mPanelClassifiedp->sendClassifiedInfoRequest(); 359 mFloaterDirectory->mPanelClassifiedp->sendClassifiedInfoRequest();
358 } 360 }
359 break; 361 break;
360 case FOR_SALE_CODE: 362 case FOR_SALE_CODE:
361 case AUCTION_CODE: 363 case AUCTION_CODE:
362 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelPlaceSmallp) 364 if (mFloaterDirectory && mFloaterDirectory->mPanelPlaceSmallp)
363 { 365 {
364 self->mFloaterDirectory->mPanelPlaceSmallp->setVisible(TRUE); 366 mFloaterDirectory->mPanelPlaceSmallp->setVisible(TRUE);
365 self->mFloaterDirectory->mPanelPlaceSmallp->setParcelID(id); 367 mFloaterDirectory->mPanelPlaceSmallp->resetLocation();
366 self->mFloaterDirectory->mPanelPlaceSmallp->sendParcelInfoRequest(); 368 mFloaterDirectory->mPanelPlaceSmallp->setParcelID(id.asUUID());
367 } 369 }
368 break; 370 break;
369 case PLACE_CODE: 371 case PLACE_CODE:
370 case POPULAR_CODE: 372 case POPULAR_CODE:
371 if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelPlacep) 373 if (mFloaterDirectory && mFloaterDirectory->mPanelPlacep)
372 { 374 {
373 self->mFloaterDirectory->mPanelPlacep->setVisible(TRUE); 375 mFloaterDirectory->mPanelPlacep->setVisible(TRUE);
374 self->mFloaterDirectory->mPanelPlacep->setParcelID(id); 376 mFloaterDirectory->mPanelPlacep->resetLocation();
375 self->mFloaterDirectory->mPanelPlacep->sendParcelInfoRequest(); 377 mFloaterDirectory->mPanelPlacep->setParcelID(id.asUUID());
376 } 378 }
377 break; 379 break;
378 default: 380 default:
@@ -389,12 +391,7 @@ void LLPanelDirBrowser::showEvent(const U32 event_id)
389 // Start with everyone invisible 391 // Start with everyone invisible
390 if (mFloaterDirectory) 392 if (mFloaterDirectory)
391 { 393 {
392 if (mFloaterDirectory->mPanelAvatarp) mFloaterDirectory->mPanelAvatarp->setVisible(FALSE); 394 mFloaterDirectory->hideAllDetailPanels();
393 if (mFloaterDirectory->mPanelGroupp) mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
394 if (mFloaterDirectory->mPanelGroupHolderp) mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
395 if (mFloaterDirectory->mPanelPlacep) mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
396 if (mFloaterDirectory->mPanelPlaceSmallp) mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
397 if (mFloaterDirectory->mPanelClassifiedp) mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
398 if (mFloaterDirectory->mPanelEventp) 395 if (mFloaterDirectory->mPanelEventp)
399 { 396 {
400 mFloaterDirectory->mPanelEventp->setVisible(TRUE); 397 mFloaterDirectory->mPanelEventp->setVisible(TRUE);
@@ -436,9 +433,6 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
436 433
437 rows = self->showNextButton(rows); 434 rows = self->showNextButton(rows);
438 435
439 LLString online_type = llformat("%d", ONLINE_CODE);
440 LLString offline_type = llformat("%d", OFFLINE_CODE);
441
442 for (S32 i = 0; i < rows; i++) 436 for (S32 i = 0; i < rows; i++)
443 { 437 {
444 msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_FirstName, DB_FIRST_NAME_BUF_SIZE, first_name, i); 438 msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_FirstName, DB_FIRST_NAME_BUF_SIZE, first_name, i);
@@ -467,7 +461,7 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
467 row["columns"][0]["type"] = "icon"; 461 row["columns"][0]["type"] = "icon";
468 row["columns"][0]["value"] = image_id; 462 row["columns"][0]["value"] = image_id;
469 463
470 content["type"] = OFFLINE_CODE; 464 content["type"] = AVATAR_CODE;
471 465
472 LLString fullname = LLString(first_name) + " " + LLString(last_name); 466 LLString fullname = LLString(first_name) + " " + LLString(last_name);
473 row["columns"][1]["column"] = "name"; 467 row["columns"][1]["column"] = "name";
@@ -1183,13 +1177,7 @@ void LLPanelDirBrowser::setupNewSearch()
1183 mHaveSearchResults = FALSE; 1177 mHaveSearchResults = FALSE;
1184 1178
1185 // Set all panels to be invisible 1179 // Set all panels to be invisible
1186 if (mFloaterDirectory->mPanelAvatarp) mFloaterDirectory->mPanelAvatarp->setVisible(FALSE); 1180 mFloaterDirectory->hideAllDetailPanels();
1187 if (mFloaterDirectory->mPanelEventp) mFloaterDirectory->mPanelEventp->setVisible(FALSE);
1188 if (mFloaterDirectory->mPanelGroupp) mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
1189 if (mFloaterDirectory->mPanelGroupHolderp) mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
1190 if (mFloaterDirectory->mPanelPlacep) mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
1191 if (mFloaterDirectory->mPanelPlaceSmallp) mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
1192 if (mFloaterDirectory->mPanelClassifiedp) mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
1193 1181
1194 updateResultCount(); 1182 updateResultCount();
1195} 1183}
@@ -1237,11 +1225,6 @@ void LLPanelDirBrowser::addHelpText(const char* text)
1237} 1225}
1238 1226
1239 1227
1240BOOL enable_never(void*)
1241{
1242 return FALSE;
1243}
1244
1245void LLPanelDirBrowser::onKeystrokeName(LLLineEditor* line, void* data) 1228void LLPanelDirBrowser::onKeystrokeName(LLLineEditor* line, void* data)
1246{ 1229{
1247 LLPanelDirBrowser *self = (LLPanelDirBrowser*)data; 1230 LLPanelDirBrowser *self = (LLPanelDirBrowser*)data;
@@ -1270,7 +1253,7 @@ S32 LLPanelDirBrowser::showNextButton(S32 rows)
1270{ 1253{
1271 // HACK: This hack doesn't work for llpaneldirfind (ALL) 1254 // HACK: This hack doesn't work for llpaneldirfind (ALL)
1272 // because other data is being returned as well. 1255 // because other data is being returned as well.
1273 if ( getName() != "all_panel") 1256 if ( getName() != "find_all_old_panel")
1274 { 1257 {
1275 // HACK: The (mResultsPerPage)+1th entry indicates there are 'more' 1258 // HACK: The (mResultsPerPage)+1th entry indicates there are 'more'
1276 bool show_next = (mResultsReceived > mResultsPerPage); 1259 bool show_next = (mResultsReceived > mResultsPerPage);
diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h
index aa19721..c589c81 100644
--- a/linden/indra/newview/llpaneldirbrowser.h
+++ b/linden/indra/newview/llpaneldirbrowser.h
@@ -38,10 +38,8 @@
38 38
39#include "llpanel.h" 39#include "llpanel.h"
40 40
41#include "llmemory.h" // LLPointer
42#include "lluuid.h" 41#include "lluuid.h"
43#include "llframetimer.h" 42#include "llframetimer.h"
44#include "llviewerimage.h"
45#include "llmap.h" 43#include "llmap.h"
46 44
47class LLMessageSystem; 45class LLMessageSystem;
@@ -78,6 +76,10 @@ public:
78 U32 getSelectedEventID() const; 76 U32 getSelectedEventID() const;
79 void getSelectedInfo(LLUUID* id, S32 *type); 77 void getSelectedInfo(LLUUID* id, S32 *type);
80 78
79 void showDetailPanel(S32 type, LLSD item_id);
80 // type is EVENT_CODE, PLACE_CODE, etc. from below.
81 // item_id is integer for events, UUID for all others.
82
81 // from llpaneldirbase 83 // from llpaneldirbase
82 void setupNewSearch(); 84 void setupNewSearch();
83 85
@@ -156,10 +158,13 @@ protected:
156}; 158};
157 159
158// Codes used for sorting by type. 160// Codes used for sorting by type.
161const S32 INVALID_CODE = -1;
159const S32 EVENT_CODE = 0; 162const S32 EVENT_CODE = 0;
160const S32 PLACE_CODE = 1; 163const S32 PLACE_CODE = 1;
161const S32 ONLINE_CODE = 2; 164// We no longer show online vs. offline in search result icons.
162const S32 OFFLINE_CODE = 3; 165//const S32 ONLINE_CODE = 2;
166//const S32 OFFLINE_CODE = 3;
167const S32 AVATAR_CODE = 3;
163const S32 GROUP_CODE = 4; 168const S32 GROUP_CODE = 4;
164const S32 CLASSIFIED_CODE = 5; 169const S32 CLASSIFIED_CODE = 5;
165const S32 FOR_SALE_CODE = 6; // for sale place 170const S32 FOR_SALE_CODE = 6; // for sale place
diff --git a/linden/indra/newview/llpaneldirclassified.cpp b/linden/indra/newview/llpaneldirclassified.cpp
index 50bdfda..f3d464c 100644
--- a/linden/indra/newview/llpaneldirclassified.cpp
+++ b/linden/indra/newview/llpaneldirclassified.cpp
@@ -79,7 +79,7 @@ BOOL LLPanelDirClassified::postBuild()
79 LLPanelDirBrowser::postBuild(); 79 LLPanelDirBrowser::postBuild();
80 80
81 // Teens don't get mature checkbox 81 // Teens don't get mature checkbox
82 if (gAgent.mAccess < SIM_ACCESS_MATURE) 82 if (gAgent.isTeen())
83 { 83 {
84 childSetValue("incmature", FALSE); 84 childSetValue("incmature", FALSE);
85 childHide("incmature"); 85 childHide("incmature");
@@ -174,7 +174,7 @@ void LLPanelDirClassified::performQuery()
174 BOOL filter_mature = !childGetValue("incmature").asBoolean(); 174 BOOL filter_mature = !childGetValue("incmature").asBoolean();
175 BOOL filter_auto_renew = FALSE; 175 BOOL filter_auto_renew = FALSE;
176 U32 query_flags = pack_classified_flags(filter_mature, filter_auto_renew); 176 U32 query_flags = pack_classified_flags(filter_mature, filter_auto_renew);
177 //if (gAgent.mAccess <= SIM_ACCESS_PG) query_flags |= DFQ_PG_SIMS_ONLY; 177 //if (gAgent.isTeen()) query_flags |= DFQ_PG_SIMS_ONLY;
178 178
179 U32 category = childGetValue("Category").asInteger(); 179 U32 category = childGetValue("Category").asInteger();
180 180
diff --git a/linden/indra/newview/llpaneldirevents.cpp b/linden/indra/newview/llpaneldirevents.cpp
index 861c54d..d8a4652 100644
--- a/linden/indra/newview/llpaneldirevents.cpp
+++ b/linden/indra/newview/llpaneldirevents.cpp
@@ -111,7 +111,7 @@ void LLPanelDirEvents::draw()
111void LLPanelDirEvents::refresh() 111void LLPanelDirEvents::refresh()
112{ 112{
113 // You only have a choice if you are mature 113 // You only have a choice if you are mature
114 childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE); 114 childSetVisible("incmature", !gAgent.isTeen());
115 115
116 BOOL godlike = gAgent.isGodlike(); 116 BOOL godlike = gAgent.isGodlike();
117 childSetVisible("Delete", godlike); 117 childSetVisible("Delete", godlike);
@@ -182,7 +182,7 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
182 setupNewSearch(); 182 setupNewSearch();
183 183
184 U32 scope = DFQ_DATE_EVENTS; 184 U32 scope = DFQ_DATE_EVENTS;
185 if ( gAgent.mAccess <= SIM_ACCESS_PG) scope |= DFQ_PG_SIMS_ONLY; 185 if ( gAgent.isTeen()) scope |= DFQ_PG_SIMS_ONLY;
186 if ( !childGetValue("incmature").asBoolean() ) scope |= DFQ_PG_EVENTS_ONLY; 186 if ( !childGetValue("incmature").asBoolean() ) scope |= DFQ_PG_EVENTS_ONLY;
187 187
188 std::ostringstream params; 188 std::ostringstream params;
diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp
index 73643bf..50bdc9e 100644
--- a/linden/indra/newview/llpaneldirfind.cpp
+++ b/linden/indra/newview/llpaneldirfind.cpp
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llpaneldirfind.cpp 2 * @file llpaneldirfind.cpp
3 * @brief The "Find All" panel in the Find directory. 3 * @brief The "All" panel in the Search directory.
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -44,29 +44,356 @@
44#include "llagent.h" 44#include "llagent.h"
45#include "llbutton.h" 45#include "llbutton.h"
46#include "llcheckboxctrl.h" 46#include "llcheckboxctrl.h"
47#include "lllineeditor.h"
47#include "llcombobox.h" 48#include "llcombobox.h"
48#include "llviewercontrol.h" 49#include "llviewercontrol.h"
49#include "lllineeditor.h"
50#include "llmenucommands.h" 50#include "llmenucommands.h"
51#include "llmenugl.h" 51#include "llmenugl.h"
52#include "llscrolllistctrl.h"
53#include "lltextbox.h" 52#include "lltextbox.h"
54#include "lluiconstants.h" 53#include "lluiconstants.h"
55#include "llviewerimagelist.h" 54#include "llviewerimagelist.h"
56#include "llviewermessage.h" 55#include "llviewermessage.h"
57#include "llfloateravatarinfo.h" 56#include "llfloateravatarinfo.h"
58#include "lldir.h" 57#include "lldir.h"
58#include "llviewercontrol.h"
59#include "llviewerregion.h" // for region name for search urls
59#include "llvieweruictrlfactory.h" 60#include "llvieweruictrlfactory.h"
60#include "llfloaterdirectory.h" 61#include "llfloaterdirectory.h"
61#include "llpaneldirbrowser.h" 62#include "llpaneldirbrowser.h"
62 63
63LLPanelDirFind::LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater) 64#include <boost/tokenizer.hpp>
65
66//---------------------------------------------------------------------------
67// LLPanelDirFindAll - Google search appliance based search
68//---------------------------------------------------------------------------
69
70class LLPanelDirFindAll
71: public LLPanelDirBrowser,
72 public LLWebBrowserCtrlObserver
73{
74public:
75 LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater);
76 /*virtual*/ ~LLPanelDirFindAll();
77
78 /*virtual*/ BOOL postBuild();
79 /*virtual*/ void draw();
80
81 void search(const std::string& search_text);
82 void focus();
83 void navigateToDefaultPage();
84
85private:
86 static void onClickBack( void* data );
87 static void onClickForward( void* data );
88 static void onClickHome( void* data );
89 static void onClickSearch( void* data );
90 static void onCommitSearch(LLUICtrl*, void* data);
91 static void onKeystrokeSearchEditor(LLLineEditor* line, void* data);
92
93 /*virtual*/ void onNavigateBegin( const EventType& eventIn );
94 /*virtual*/ void onNavigateComplete( const EventType& eventIn );
95 // Used to update progress indicator
96
97private:
98#if LL_LIBXUL_ENABLED
99 LLWebBrowserCtrl* mWebBrowser;
100#endif // LL_LIBXUL_ENABLED
101};
102
103
104LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater)
105: LLPanelDirBrowser(name, floater)
106#if LL_LIBXUL_ENABLED
107 ,mWebBrowser(NULL)
108#endif // LL_LIBXUL_ENABLED
109{
110 mMinSearchChars = 3;
111}
112
113BOOL LLPanelDirFindAll::postBuild()
114{
115 LLPanelDirBrowser::postBuild();
116
117 childSetAction("back_btn", onClickBack, this);
118 childSetAction("home_btn", onClickHome, this);
119 childSetAction("forward_btn", onClickForward, this);
120 childSetCommitCallback("search_editor", onCommitSearch, this);
121 childSetAction("search_btn", onClickSearch, this);
122
123 if (gAgent.isTeen())
124 {
125 childSetVisible("mature_check", false);
126 }
127
128 // we don't record the last search query (yet) so search text will be empty -> disable search
129 childDisable("search_btn");
130
131 childSetKeystrokeCallback("search_editor", onKeystrokeSearchEditor, this);
132
133#if LL_LIBXUL_ENABLED
134 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "find_browser");
135 if (mWebBrowser)
136 {
137 // new pages appear in same window as the results page now
138 mWebBrowser->setOpenInInternalBrowser( false );
139 mWebBrowser->setOpenInExternalBrowser( false );
140
141 // Track updates for progress display.
142 mWebBrowser->addObserver(this);
143
144 navigateToDefaultPage();
145 }
146#endif // LL_LIBXUL_ENABLED
147
148 return TRUE;
149}
150
151LLPanelDirFindAll::~LLPanelDirFindAll()
152{
153#if LL_LIBXUL_ENABLED
154 if (mWebBrowser) mWebBrowser->remObserver(this);
155#endif // LL_LIBXUL_ENABLED
156}
157
158// virtual
159void LLPanelDirFindAll::draw()
160{
161 // enable/disable buttons depending on state
162#if LL_LIBXUL_ENABLED
163 if ( mWebBrowser )
164 {
165 bool enable_back = mWebBrowser->canNavigateBack();
166 childSetEnabled( "back_btn", enable_back );
167
168 bool enable_forward = mWebBrowser->canNavigateForward();
169 childSetEnabled( "forward_btn", enable_forward );
170 }
171#endif // LL_LIBXUL_ENABLED
172
173 LLPanelDirBrowser::draw();
174}
175
176void LLPanelDirFindAll::search(const std::string& search_text)
177{
178 if (!search_text.empty())
179 {
180 // Replace spaces with "+" for use by Google search appliance
181 // Yes, this actually works for double-spaces
182 // " foo bar" becomes "+foo++bar" and works fine. JC
183 std::string query = search_text;
184 std::string::iterator it = query.begin();
185 for ( ; it != query.end(); ++it )
186 {
187 if ( std::isspace( *it ) )
188 {
189 *it = '+';
190 }
191 }
192
193 std::string url = gSavedSettings.getString("SearchQueryURL");
194 std::string substring = "[QUERY]";
195 url.replace(url.find(substring), substring.length(), query);
196
197 // replace the collection name with the one selected from the combo box
198 std::string selected_collection = childGetValue( "Category" ).asString();
199 substring = "[COLLECTION]";
200 url.replace(url.find(substring), substring.length(), selected_collection);
201
202 // if the mature checkbox is unchecked, modify query to remove
203 // terms with given phrase from the result set
204 substring = "[MATURE]";
205 if ( childGetValue( "mature_check" ).asBoolean() == false )
206 {
207 url.replace(url.find(substring), substring.length(), "N");
208 }
209 else
210 {
211 url.replace(url.find(substring), substring.length(), "Y");
212 }
213
214 substring = "[TEEN]";
215 const char* teen = (gAgent.isTeen() ? "Y" : "N");
216 url.replace(url.find(substring), substring.length(), teen);
217
218 // Include region and x/y position, not for the GSA, but
219 // just to get logs on the web server for search_proxy.php
220 // showing where people were standing when they searched.
221 std::string region_name;
222 LLViewerRegion* region = gAgent.getRegion();
223 if (region)
224 {
225 region_name = region->getName();
226 }
227 // take care of spaces in names
228 region_name = LLURI::escape(region_name);
229 substring = "[REGION]";
230 url.replace(url.find(substring), substring.length(), region_name);
231
232 LLVector3 pos_region = gAgent.getPositionAgent();
233 std::string x = llformat("%.0f", pos_region.mV[VX]);
234 substring = "[X]";
235 url.replace(url.find(substring), substring.length(), x);
236 std::string y = llformat("%.0f", pos_region.mV[VY]);
237 substring = "[Y]";
238 url.replace(url.find(substring), substring.length(), y);
239 std::string z = llformat("%.0f", pos_region.mV[VZ]);
240 substring = "[Z]";
241 url.replace(url.find(substring), substring.length(), z);
242
243 llinfos << "url " << url << llendl;
244
245#if LL_LIBXUL_ENABLED
246 if (mWebBrowser)
247 {
248 mWebBrowser->navigateTo(url);
249 }
250#endif // LL_LIBXUL_ENABLED
251 }
252 else
253 {
254 // empty search text
255 navigateToDefaultPage();
256 }
257
258 childSetText("search_editor", search_text);
259}
260
261void LLPanelDirFindAll::focus()
262{
263 childSetFocus("search_editor");
264}
265
266void LLPanelDirFindAll::navigateToDefaultPage()
267{
268 std::string start_url = gSavedSettings.getString("SearchDefaultURL");
269
270 std::string substring = "[MATURE]";
271 if ( childGetValue( "mature_check" ).asBoolean() == false )
272 {
273 start_url.replace( start_url.find( substring ), substring.length(), "N" );
274 }
275 else
276 {
277 start_url.replace( start_url.find( substring ), substring.length(), "Y" );
278 }
279 llinfos << "SEARCH> browsing to default url: " << start_url << llendl;
280
281#if LL_LIBXUL_ENABLED
282 if (mWebBrowser)
283 {
284 mWebBrowser->navigateTo( start_url );
285 }
286#endif //LL_LIBXUL_ENABLED
287}
288
289// static - only enable search if there is at least 1 character
290void LLPanelDirFindAll::onKeystrokeSearchEditor(LLLineEditor* line, void* data)
291{
292 LLPanelDirBrowser *self = (LLPanelDirBrowser*)data;
293 if (line->getLength() > 0 )
294 {
295 self->childEnable("search_btn");
296 }
297 else
298 {
299 self->childDisable("search_btn");
300 }
301}
302
303// static
304void LLPanelDirFindAll::onClickBack( void* data )
305{
306#if LL_LIBXUL_ENABLED
307 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
308 if ( self->mWebBrowser )
309 {
310 self->mWebBrowser->navigateBack();
311 }
312#endif // LL_LIBXUL_ENABLED
313}
314
315// static
316void LLPanelDirFindAll::onClickForward( void* data )
317{
318#if LL_LIBXUL_ENABLED
319 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
320 if ( self->mWebBrowser )
321 {
322 self->mWebBrowser->navigateForward();
323 }
324#endif // LL_LIBXUL_ENABLED
325}
326
327// static
328void LLPanelDirFindAll::onClickHome( void* data )
329{
330#if LL_LIBXUL_ENABLED
331 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
332 if ( self->mWebBrowser )
333 {
334 self->mWebBrowser->navigateHome();
335 }
336#endif // LL_LIBXUL_ENABLED
337}
338
339// static
340void LLPanelDirFindAll::onCommitSearch(LLUICtrl*, void* data)
341{
342 onClickSearch(data);
343}
344
345// static
346void LLPanelDirFindAll::onClickSearch(void* data)
347{
348 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
349 LLString search_text = self->childGetText("search_editor");
350 self->search(search_text);
351}
352
353void LLPanelDirFindAll::onNavigateBegin( const EventType& eventIn )
354{
355 childSetText("status_text", childGetText("loading_text"));
356}
357
358void LLPanelDirFindAll::onNavigateComplete( const EventType& eventIn )
359{
360 childSetText("status_text", childGetText("done_text"));
361}
362
363//---------------------------------------------------------------------------
364// LLPanelDirFindAllInterface
365//---------------------------------------------------------------------------
366
367// static
368LLPanelDirFindAll* LLPanelDirFindAllInterface::create(LLFloaterDirectory* floater)
369{
370 return new LLPanelDirFindAll("find_all_panel", floater);
371}
372
373// static
374void LLPanelDirFindAllInterface::search(LLPanelDirFindAll* panel,
375 const std::string& search_text)
376{
377 panel->search(search_text);
378}
379
380// static
381void LLPanelDirFindAllInterface::focus(LLPanelDirFindAll* panel)
382{
383 panel->focus();
384}
385
386//---------------------------------------------------------------------------
387// LLPanelDirFindAllOld - deprecated if new Google search works out. JC
388//---------------------------------------------------------------------------
389
390LLPanelDirFindAllOld::LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater)
64 : LLPanelDirBrowser(name, floater) 391 : LLPanelDirBrowser(name, floater)
65{ 392{
66 mMinSearchChars = 3; 393 mMinSearchChars = 3;
67} 394}
68 395
69BOOL LLPanelDirFind::postBuild() 396BOOL LLPanelDirFindAllOld::postBuild()
70{ 397{
71 LLPanelDirBrowser::postBuild(); 398 LLPanelDirBrowser::postBuild();
72 399
@@ -79,32 +406,32 @@ BOOL LLPanelDirFind::postBuild()
79 return TRUE; 406 return TRUE;
80} 407}
81 408
409LLPanelDirFindAllOld::~LLPanelDirFindAllOld()
410{
411 // Children all cleaned up by default view destructor.
412}
413
82// virtual 414// virtual
83void LLPanelDirFind::draw() 415void LLPanelDirFindAllOld::draw()
84{ 416{
85 // You only have a choice if you are mature 417 // You only have a choice if you are mature
86 childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE); 418 childSetVisible("incmature", !gAgent.isTeen());
87 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll")); 419 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll"));
88 420
89 LLPanelDirBrowser::draw(); 421 LLPanelDirBrowser::draw();
90} 422}
91 423
92LLPanelDirFind::~LLPanelDirFind()
93{
94 // Children all cleaned up by default view destructor.
95}
96
97// static 424// static
98void LLPanelDirFind::onCommitScope(LLUICtrl* ctrl, void* data) 425void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data)
99{ 426{
100 LLPanelDirFind* self = (LLPanelDirFind*)data; 427 LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data;
101 self->setFocus(TRUE); 428 self->setFocus(TRUE);
102} 429}
103 430
104// static 431// static
105void LLPanelDirFind::onClickSearch(void *userdata) 432void LLPanelDirFindAllOld::onClickSearch(void *userdata)
106{ 433{
107 LLPanelDirFind *self = (LLPanelDirFind *)userdata; 434 LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata;
108 435
109 if (self->childGetValue("name").asString().length() < self->mMinSearchChars) 436 if (self->childGetValue("name").asString().length() < self->mMinSearchChars)
110 { 437 {
@@ -121,7 +448,7 @@ void LLPanelDirFind::onClickSearch(void *userdata)
121 scope |= DFQ_GROUPS; // groups 448 scope |= DFQ_GROUPS; // groups
122 449
123 BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") || 450 BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") ||
124 gAgent.mAccess <= SIM_ACCESS_PG || 451 gAgent.isTeen() ||
125 !self->childGetValue("incmature").asBoolean() ); 452 !self->childGetValue("incmature").asBoolean() );
126 453
127 if ( filter_mature ) 454 if ( filter_mature )
diff --git a/linden/indra/newview/llpaneldirfind.h b/linden/indra/newview/llpaneldirfind.h
index 57bdadb..baff473 100644
--- a/linden/indra/newview/llpaneldirfind.h
+++ b/linden/indra/newview/llpaneldirfind.h
@@ -34,17 +34,27 @@
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirbrowser.h"
36 36
37// UI class forward declarations 37class LLUICtrl;
38class LLLineEditor; 38class LLLineEditor;
39class LLPanelDirFindAll;
40class LLFloaterDirectory;
39 41
42class LLPanelDirFindAllInterface
43{
44public:
45 static LLPanelDirFindAll* create(LLFloaterDirectory* floater);
46 static void search(LLPanelDirFindAll* panel, const std::string& search_text);
47 static void focus(LLPanelDirFindAll* panel);
48};
40 49
41class LLPanelDirFind : public LLPanelDirBrowser 50
51class LLPanelDirFindAllOld : public LLPanelDirBrowser
42{ 52{
43public: 53public:
44 LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater); 54 LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater);
45 virtual ~LLPanelDirFind(); 55 /*virtual*/ ~LLPanelDirFindAllOld();
46 56
47 virtual BOOL postBuild(); 57 /*virtual*/ BOOL postBuild();
48 58
49 /*virtual*/ void draw(); 59 /*virtual*/ void draw();
50 60
@@ -53,6 +63,4 @@ public:
53 static void onKeystrokeName(LLLineEditor* line, void* data); 63 static void onKeystrokeName(LLLineEditor* line, void* data);
54}; 64};
55 65
56BOOL enable_never(void*);
57
58#endif 66#endif
diff --git a/linden/indra/newview/llpaneldirgroups.cpp b/linden/indra/newview/llpaneldirgroups.cpp
index e9bcb53..3f6d795 100644
--- a/linden/indra/newview/llpaneldirgroups.cpp
+++ b/linden/indra/newview/llpaneldirgroups.cpp
@@ -71,7 +71,7 @@ LLPanelDirGroups::~LLPanelDirGroups()
71void LLPanelDirGroups::draw() 71void LLPanelDirGroups::draw()
72{ 72{
73 // You only have a choice if you are mature 73 // You only have a choice if you are mature
74 childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE); 74 childSetVisible("incmature", !gAgent.isTeen());
75 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups")); 75 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups"));
76 76
77 LLPanelDirBrowser::draw(); 77 LLPanelDirBrowser::draw();
@@ -93,7 +93,7 @@ void LLPanelDirGroups::performQuery()
93 93
94 // Check group mature filter. 94 // Check group mature filter.
95 if ( !gSavedSettings.getBOOL("ShowMatureGroups") 95 if ( !gSavedSettings.getBOOL("ShowMatureGroups")
96 || gAgent.mAccess <= SIM_ACCESS_PG ) 96 || gAgent.isTeen() )
97 { 97 {
98 scope |= DFQ_FILTER_MATURE; 98 scope |= DFQ_FILTER_MATURE;
99 } 99 }
diff --git a/linden/indra/newview/llpaneldirland.cpp b/linden/indra/newview/llpaneldirland.cpp
index 3c8e5cc..df8dfc2 100644
--- a/linden/indra/newview/llpaneldirland.cpp
+++ b/linden/indra/newview/llpaneldirland.cpp
@@ -75,7 +75,7 @@ BOOL LLPanelDirLand::postBuild()
75 75
76 childSetValue("type", gSavedSettings.getString("FindLandType")); 76 childSetValue("type", gSavedSettings.getString("FindLandType"));
77 77
78 if (gAgent.mAccess <= SIM_ACCESS_PG) 78 if (gAgent.isTeen())
79 { 79 {
80 childSetValue("rating", PG_ONLY); 80 childSetValue("rating", PG_ONLY);
81 childDisable("rating"); 81 childDisable("rating");
@@ -156,7 +156,7 @@ void LLPanelDirLand::performQuery()
156 } 156 }
157 157
158 U32 query_flags = 0x0; 158 U32 query_flags = 0x0;
159 if (gAgent.mAccess <= SIM_ACCESS_PG) query_flags |= DFQ_PG_SIMS_ONLY; 159 if (gAgent.isTeen()) query_flags |= DFQ_PG_SIMS_ONLY;
160 160
161 const std::string& rating = childGetValue("rating").asString(); 161 const std::string& rating = childGetValue("rating").asString();
162 if (rating == PG_ONLY) 162 if (rating == PG_ONLY)
diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp
index 5802992..6ba8652 100644
--- a/linden/indra/newview/llpaneldirplaces.cpp
+++ b/linden/indra/newview/llpaneldirplaces.cpp
@@ -89,7 +89,7 @@ LLPanelDirPlaces::~LLPanelDirPlaces()
89void LLPanelDirPlaces::draw() 89void LLPanelDirPlaces::draw()
90{ 90{
91 // You only have a choice if you are mature 91 // You only have a choice if you are mature
92 childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE); 92 childSetVisible("incmature", !gAgent.isTeen());
93 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims")); 93 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
94 94
95 LLPanelDirBrowser::draw(); 95 LLPanelDirBrowser::draw();
@@ -118,7 +118,7 @@ void LLPanelDirPlaces::performQuery()
118 } 118 }
119 119
120 BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims") 120 BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims")
121 || gAgent.mAccess <= SIM_ACCESS_PG; 121 || gAgent.isTeen();
122 122
123 queryCore(name, category, pg_only); 123 queryCore(name, category, pg_only);
124} 124}
diff --git a/linden/indra/newview/llpaneldirpopular.cpp b/linden/indra/newview/llpaneldirpopular.cpp
index 39465d5..1534767 100644
--- a/linden/indra/newview/llpaneldirpopular.cpp
+++ b/linden/indra/newview/llpaneldirpopular.cpp
@@ -77,7 +77,7 @@ LLPanelDirPopular::~LLPanelDirPopular()
77void LLPanelDirPopular::draw() 77void LLPanelDirPopular::draw()
78{ 78{
79 // You only have a choice if you are mature] 79 // You only have a choice if you are mature]
80 childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE); 80 childSetVisible("incmature", !gAgent.isTeen());
81 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims")); 81 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
82 82
83 LLPanelDirBrowser::draw(); 83 LLPanelDirBrowser::draw();
@@ -93,7 +93,7 @@ void LLPanelDirPopular::draw()
93void LLPanelDirPopular::requestPopular() 93void LLPanelDirPopular::requestPopular()
94{ 94{
95 LLMessageSystem* msg = gMessageSystem; 95 LLMessageSystem* msg = gMessageSystem;
96 BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.mAccess <= SIM_ACCESS_PG; 96 BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.isTeen();
97 BOOL pictures_only = childGetValue("incpictures").asBoolean(); 97 BOOL pictures_only = childGetValue("incpictures").asBoolean();
98 98
99 U32 flags = 0x0; 99 U32 flags = 0x0;
diff --git a/linden/indra/newview/llpanelevent.cpp b/linden/indra/newview/llpanelevent.cpp
index a35e8f8..c30e3b4 100644
--- a/linden/indra/newview/llpanelevent.cpp
+++ b/linden/indra/newview/llpanelevent.cpp
@@ -121,7 +121,6 @@ BOOL LLPanelEvent::postBuild()
121 return TRUE; 121 return TRUE;
122} 122}
123 123
124
125void LLPanelEvent::setEventID(const U32 event_id) 124void LLPanelEvent::setEventID(const U32 event_id)
126{ 125{
127 mEventID = event_id; 126 mEventID = event_id;
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index c64bce0..9cdf919 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -43,20 +43,18 @@
43// project includes 43// project includes
44#include "llagent.h" 44#include "llagent.h"
45#include "llviewerwindow.h" 45#include "llviewerwindow.h"
46#include "llcheckboxctrl.h"
47#include "llcolorswatch.h" 46#include "llcolorswatch.h"
48#include "llcombobox.h" 47#include "llcombobox.h"
49#include "llconsole.h" 48#include "llconsole.h"
50#include "llpanellogin.h" 49#include "llpanellogin.h"
51#include "llnetmap.h" 50#include "llnetmap.h"
52#include "llradiogroup.h"
53#include "llresmgr.h" 51#include "llresmgr.h"
54#include "llspinctrl.h" 52#include "llspinctrl.h"
55#include "lltextbox.h" 53#include "lltextbox.h"
56#include "llui.h" 54#include "llui.h"
57#include "llurlsimstring.h" 55#include "llurlsimstring.h"
58#include "llviewercontrol.h" 56#include "llviewercontrol.h"
59#include "viewer.h" 57#include "viewer.h" // gCrashBehavior
60 58
61// 59//
62// Imported globals 60// Imported globals
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index 33dbcd7..3ad65b5 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -161,7 +161,7 @@ BOOL LLPanelGroupGeneral::postBuild()
161 { 161 {
162 mCtrlMature->setCommitCallback(onCommitAny); 162 mCtrlMature->setCommitCallback(onCommitAny);
163 mCtrlMature->setCallbackUserData(this); 163 mCtrlMature->setCallbackUserData(this);
164 mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG ); 164 mCtrlMature->setVisible( !gAgent.isTeen() );
165 } 165 }
166 166
167 mCtrlOpenEnrollment = (LLCheckBoxCtrl*) getChildByName("open_enrollement", recurse); 167 mCtrlOpenEnrollment = (LLCheckBoxCtrl*) getChildByName("open_enrollement", recurse);
@@ -476,7 +476,7 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
476 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); 476 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
477 if (mCtrlMature) 477 if (mCtrlMature)
478 { 478 {
479 if (gAgent.mAccess > SIM_ACCESS_PG) 479 if (!gAgent.isTeen())
480 { 480 {
481 gdatap->mMaturePublish = mCtrlMature->get(); 481 gdatap->mMaturePublish = mCtrlMature->get();
482 } 482 }
@@ -639,7 +639,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
639 { 639 {
640 mCtrlMature->set(gdatap->mMaturePublish); 640 mCtrlMature->set(gdatap->mMaturePublish);
641 mCtrlMature->setEnabled(mAllowEdit && can_change_ident); 641 mCtrlMature->setEnabled(mAllowEdit && can_change_ident);
642 mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG ); 642 mCtrlMature->setVisible( !gAgent.isTeen() );
643 } 643 }
644 if (mCtrlOpenEnrollment) 644 if (mCtrlOpenEnrollment)
645 { 645 {
diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp
index 93a86dc..d08d25e 100644
--- a/linden/indra/newview/llpanelplace.cpp
+++ b/linden/indra/newview/llpanelplace.cpp
@@ -38,6 +38,8 @@
38#include "message.h" 38#include "message.h"
39#include "llui.h" 39#include "llui.h"
40#include "llsecondlifeurls.h" 40#include "llsecondlifeurls.h"
41#include "llremoteparcelrequest.h"
42#include "llfloater.h"
41 43
42#include "llagent.h" 44#include "llagent.h"
43#include "llviewerwindow.h" 45#include "llviewerwindow.h"
@@ -53,6 +55,7 @@
53#include "llvieweruictrlfactory.h" 55#include "llvieweruictrlfactory.h"
54//#include "llviewermenu.h" // create_landmark() 56//#include "llviewermenu.h" // create_landmark()
55#include "llweb.h" 57#include "llweb.h"
58#include "llsdutil.h"
56 59
57//static 60//static
58std::list<LLPanelPlace*> LLPanelPlace::sAllPanels; 61std::list<LLPanelPlace*> LLPanelPlace::sAllPanels;
@@ -60,8 +63,12 @@ std::list<LLPanelPlace*> LLPanelPlace::sAllPanels;
60LLPanelPlace::LLPanelPlace() 63LLPanelPlace::LLPanelPlace()
61: LLPanel("Places Panel"), 64: LLPanel("Places Panel"),
62 mParcelID(), 65 mParcelID(),
66 mRequestedID(),
67 mRegionID(),
63 mPosGlobal(), 68 mPosGlobal(),
64 mAuctionID(0) 69 mPosRegion(),
70 mAuctionID(0),
71 mLandmarkAssetID()
65{ 72{
66 sAllPanels.push_back(this); 73 sAllPanels.push_back(this);
67} 74}
@@ -81,13 +88,13 @@ BOOL LLPanelPlace::postBuild()
81 mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); 88 mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl");
82 mSnapshotCtrl->setEnabled(FALSE); 89 mSnapshotCtrl->setEnabled(FALSE);
83 90
84 mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "name_editor"); 91 mNameEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "name_editor");
85 92
86 mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); 93 mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor");
87 94
88 mInfoEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "info_editor"); 95 mInfoEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "info_editor");
89 96
90 mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor"); 97 mLocationEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "location_editor");
91 98
92 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn"); 99 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn");
93 mTeleportBtn->setClickedCallback(onClickTeleport); 100 mTeleportBtn->setClickedCallback(onClickTeleport);
@@ -108,16 +115,54 @@ BOOL LLPanelPlace::postBuild()
108 // Default to no auction button. We'll show it if we get an auction id 115 // Default to no auction button. We'll show it if we get an auction id
109 mAuctionBtn->setVisible(FALSE); 116 mAuctionBtn->setVisible(FALSE);
110 117
118 // Temporary text to explain why the description panel is blank.
119 // mDescEditor->setText("Parcel information not available without server update");
120
111 return TRUE; 121 return TRUE;
112} 122}
113 123
124void LLPanelPlace::displayItemInfo(const LLInventoryItem* pItem)
125{
126 mNameEditor->setText(pItem->getName());
127 mDescEditor->setText(pItem->getDescription());
128}
114 129
130// Use this for search directory clicks, because we are totally
131// recycling the panel and don't need to use what's there.
132//
133// For SLURL clicks, don't call this, because we need to cache
134// the location info from the user.
135void LLPanelPlace::resetLocation()
136{
137 mParcelID.setNull();
138 mRequestedID.setNull();
139 mRegionID.setNull();
140 mLandmarkAssetID.setNull();
141 mPosGlobal.clearVec();
142 mPosRegion.clearVec();
143 mAuctionID = 0;
144}
115 145
116void LLPanelPlace::setParcelID(const LLUUID& parcel_id) 146void LLPanelPlace::setParcelID(const LLUUID& parcel_id)
117{ 147{
118 mParcelID = parcel_id; 148 mParcelID = parcel_id;
149 sendParcelInfoRequest();
150}
151
152void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id)
153{
154 mSnapshotCtrl->setImageAssetID(snapshot_id);
155}
156
157void LLPanelPlace::setName(const std::string& name)
158{
159 mNameEditor->setText(name);
119} 160}
120 161
162void LLPanelPlace::setLocationString(const std::string& location)
163{
164 mLocationEditor->setText(location);
165}
121 166
122void LLPanelPlace::sendParcelInfoRequest() 167void LLPanelPlace::sendParcelInfoRequest()
123{ 168{
@@ -136,6 +181,20 @@ void LLPanelPlace::sendParcelInfoRequest()
136 } 181 }
137} 182}
138 183
184void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason)
185{
186 // We only really handle 404 and 499 errors
187 LLString error_text;
188 if(status == 404)
189 {
190 error_text = childGetText("server_error_text");
191 }
192 else if(status == 499)
193 {
194 error_text = childGetText("server_forbidden_text");
195 }
196 mDescEditor->setText(error_text);
197}
139 198
140//static 199//static
141void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) 200void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
@@ -184,19 +243,28 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
184 msg->getS32 ("Data", "SalePrice", sale_price); 243 msg->getS32 ("Data", "SalePrice", sale_price);
185 msg->getS32 ("Data", "AuctionID", auction_id); 244 msg->getS32 ("Data", "AuctionID", auction_id);
186 245
187 self->mPosGlobal.setVec(global_x, global_y, global_z);
188 246
189 self->mAuctionID = auction_id; 247 self->mAuctionID = auction_id;
190 248
191 self->mSnapshotCtrl->setImageAssetID(snapshot_id); 249 if(snapshot_id.notNull())
250 {
251 self->mSnapshotCtrl->setImageAssetID(snapshot_id);
252 }
253
254 // Only assign the name and description if they are not empty and there is not a
255 // value present (passed in from a landmark, e.g.)
256 std::string name_str(name);
257 std::string desc_str(desc);
192 258
193 self->mNameEditor->setText(LLString(name)); 259 if(! name_str.empty() && ! self->mNameEditor->getText().empty())
260 self->mNameEditor->setText(name_str);
194 261
195 self->mDescEditor->setText(LLString(desc)); 262 if(! desc_str.empty() && ! self->mDescEditor->getText().empty())
263 self->mDescEditor->setText(desc_str);
196 264
197 LLString info_text; 265 LLString info_text;
198 LLUIString traffic = self->getUIString("traffic_text"); 266 LLUIString traffic = self->getUIString("traffic_text");
199 traffic.setArg("[TRAFFIC]", llformat("%.0f", dwell)); 267 traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell));
200 info_text = traffic; 268 info_text = traffic;
201 LLUIString area = self->getUIString("area_text"); 269 LLUIString area = self->getUIString("area_text");
202 area.setArg("[AREA]", llformat("%d", actual_area)); 270 area.setArg("[AREA]", llformat("%d", actual_area));
@@ -210,14 +278,11 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
210 if (auction_id != 0) 278 if (auction_id != 0)
211 { 279 {
212 LLUIString auction = self->getUIString("auction_text"); 280 LLUIString auction = self->getUIString("auction_text");
213 auction.setArg("[ID]", llformat("%010d", auction_id)); 281 auction.setArg("[ID]", llformat("%010d ", auction_id));
214 info_text += auction; 282 info_text += auction;
215 } 283 }
216 self->mInfoEditor->setText(info_text); 284 self->mInfoEditor->setText(info_text);
217 285
218 S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
219 S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
220 S32 region_z = llround(global_z);
221 286
222 // HACK: Flag 0x1 == mature region, otherwise assume PG 287 // HACK: Flag 0x1 == mature region, otherwise assume PG
223 const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); 288 const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
@@ -226,8 +291,26 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
226 rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); 291 rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
227 } 292 }
228 293
229 LLString location = llformat("%s %d, %d, %d (%s)", 294 // Just use given region position for display
230 sim_name, region_x, region_y, region_z, rating); 295 S32 region_x = llround(self->mPosRegion.mV[0]);
296 S32 region_y = llround(self->mPosRegion.mV[1]);
297 S32 region_z = llround(self->mPosRegion.mV[2]);
298
299 // If the region position is zero, grab position from the global
300 if(self->mPosRegion.isExactlyZero())
301 {
302 region_x = llround(global_x) % REGION_WIDTH_UNITS;
303 region_y = llround(global_y) % REGION_WIDTH_UNITS;
304 region_z = llround(global_z);
305 }
306
307 if(self->mPosGlobal.isExactlyZero())
308 {
309 self->mPosGlobal.setVec(global_x, global_y, global_z);
310 }
311
312 LLString location = llformat("%s %d, %d, %d (%s)",
313 sim_name, region_x, region_y, region_z, rating);
231 self->mLocationEditor->setText(location); 314 self->mLocationEditor->setText(location);
232 315
233 BOOL show_auction = (auction_id > 0); 316 BOOL show_auction = (auction_id > 0);
@@ -236,12 +319,58 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
236} 319}
237 320
238 321
322void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region,
323 const LLUUID& landmark_asset_id,
324 const LLUUID& region_id,
325 const LLVector3d& pos_global)
326{
327 LLSD body;
328 mPosRegion = pos_region;
329 mPosGlobal = pos_global;
330 mLandmarkAssetID = landmark_asset_id;
331 std::string url = gAgent.getRegion()->getCapability("RemoteParcelRequest");
332 if (!url.empty())
333 {
334 body["location"] = ll_sd_from_vector3(pos_region);
335 if (!region_id.isNull())
336 {
337 body["region_id"] = region_id;
338 }
339 if (!pos_global.isExactlyZero())
340 {
341 U64 region_handle = to_region_handle(pos_global);
342 body["region_handle"] = ll_sd_from_U64(region_handle);
343 }
344 LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(this->getHandle()));
345 }
346 else
347 {
348 mDescEditor->setText(childGetText("server_update_text"));
349 }
350 mSnapshotCtrl->setImageAssetID(LLUUID::null);
351}
352
353
239// static 354// static
240void LLPanelPlace::onClickTeleport(void* data) 355void LLPanelPlace::onClickTeleport(void* data)
241{ 356{
242 LLPanelPlace* self = (LLPanelPlace*)data; 357 LLPanelPlace* self = (LLPanelPlace*)data;
243 358
244 if (!self->mPosGlobal.isExactlyZero()) 359 LLView* parent_viewp = self->getParent();
360 if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER)
361 {
362 LLFloater* parent_floaterp = (LLFloater*)parent_viewp;
363 parent_floaterp->close();
364 }
365 // LLFloater* parent_floaterp = (LLFloater*)self->getParent();
366 parent_viewp->setVisible(false);
367 if(self->mLandmarkAssetID.notNull())
368 {
369 gAgent.teleportViaLandmark(self->mLandmarkAssetID);
370 gFloaterWorldMap->trackLandmark(self->mLandmarkAssetID);
371
372 }
373 else if (!self->mPosGlobal.isExactlyZero())
245 { 374 {
246 gAgent.teleportViaLocation(self->mPosGlobal); 375 gAgent.teleportViaLocation(self->mPosGlobal);
247 gFloaterWorldMap->trackLocation(self->mPosGlobal); 376 gFloaterWorldMap->trackLocation(self->mPosGlobal);
@@ -252,6 +381,12 @@ void LLPanelPlace::onClickTeleport(void* data)
252void LLPanelPlace::onClickMap(void* data) 381void LLPanelPlace::onClickMap(void* data)
253{ 382{
254 LLPanelPlace* self = (LLPanelPlace*)data; 383 LLPanelPlace* self = (LLPanelPlace*)data;
384 LLView* parent_viewp = self->getParent();
385 if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER)
386 {
387 LLFloater* parent_floaterp = (LLFloater*)parent_viewp;
388 parent_floaterp->close();
389 }
255 390
256 if (!self->mPosGlobal.isExactlyZero()) 391 if (!self->mPosGlobal.isExactlyZero())
257 { 392 {
diff --git a/linden/indra/newview/llpanelplace.h b/linden/indra/newview/llpanelplace.h
index 81a2a63..e7c17cf 100644
--- a/linden/indra/newview/llpanelplace.h
+++ b/linden/indra/newview/llpanelplace.h
@@ -43,6 +43,7 @@ class LLLineEditor;
43class LLTextEditor; 43class LLTextEditor;
44class LLTextureCtrl; 44class LLTextureCtrl;
45class LLMessageSystem; 45class LLMessageSystem;
46class LLInventoryItem;
46 47
47class LLPanelPlace : public LLPanel 48class LLPanelPlace : public LLPanel
48{ 49{
@@ -52,11 +53,26 @@ public:
52 53
53 /*virtual*/ BOOL postBuild(); 54 /*virtual*/ BOOL postBuild();
54 55
56 void resetLocation();
57 // Ignore all old location information, useful if you are
58 // recycling an existing dialog and need to clear it.
55 59
56 void setParcelID(const LLUUID& parcel_id); 60 void setParcelID(const LLUUID& parcel_id);
61 // Sends a request for data about the given parcel, which will
62 // only update the location if there is none already available.
57 63
58 void sendParcelInfoRequest(); 64 void displayItemInfo(const LLInventoryItem* pItem);
65 void setRegionID(const LLUUID& region_id) { mRegionID = region_id; }
66 void setSnapshot(const LLUUID& snapshot_id);
67 void setName(const std::string& name);
68 void setLocationString(const std::string& location);
69 void setErrorStatus(U32 status, const std::string& reason);
59 70
71 void sendParcelInfoRequest();
72 void displayParcelInfo(const LLVector3& pos_region,
73 const LLUUID& landmark_asset_id,
74 const LLUUID& region_id,
75 const LLVector3d& pos_global);
60 static void processParcelInfoReply(LLMessageSystem* msg, void**); 76 static void processParcelInfoReply(LLMessageSystem* msg, void**);
61 77
62protected: 78protected:
@@ -71,16 +87,22 @@ protected:
71protected: 87protected:
72 LLUUID mParcelID; 88 LLUUID mParcelID;
73 LLUUID mRequestedID; 89 LLUUID mRequestedID;
90 LLUUID mRegionID;
91 LLUUID mLandmarkAssetID;
92 // Absolute position of the location for teleport, may not
93 // be available (hence zero)
74 LLVector3d mPosGlobal; 94 LLVector3d mPosGlobal;
95 // Region-local position for teleport, always available.
96 LLVector3 mPosRegion;
75 // Zero if this is not an auction 97 // Zero if this is not an auction
76 S32 mAuctionID; 98 S32 mAuctionID;
77 99
78 LLTextureCtrl* mSnapshotCtrl; 100 LLTextureCtrl* mSnapshotCtrl;
79 101
80 LLLineEditor* mNameEditor; 102 LLTextBox* mNameEditor;
81 LLTextEditor* mDescEditor; 103 LLTextEditor* mDescEditor;
82 LLLineEditor* mInfoEditor; 104 LLTextBox* mInfoEditor;
83 LLLineEditor* mLocationEditor; 105 LLTextBox* mLocationEditor;
84 106
85 LLButton* mTeleportBtn; 107 LLButton* mTeleportBtn;
86 LLButton* mMapBtn; 108 LLButton* mMapBtn;
diff --git a/linden/indra/newview/llpreviewlandmark.cpp b/linden/indra/newview/llpreviewlandmark.cpp
index ac1bd3f..2d20fd5 100644
--- a/linden/indra/newview/llpreviewlandmark.cpp
+++ b/linden/indra/newview/llpreviewlandmark.cpp
@@ -48,6 +48,7 @@
48#include "lliconctrl.h" 48#include "lliconctrl.h"
49#include "lllandmarklist.h" 49#include "lllandmarklist.h"
50#include "lllineeditor.h" 50#include "lllineeditor.h"
51#include "llpanelplace.h"
51#include "llresmgr.h" 52#include "llresmgr.h"
52#include "llstatusbar.h" 53#include "llstatusbar.h"
53#include "lltextbox.h" 54#include "lltextbox.h"
@@ -89,26 +90,14 @@ LLPreviewLandmark::LLPreviewLandmark(const std::string& name,
89 mLandmark( NULL ) 90 mLandmark( NULL )
90{ 91{
91 92
92 if (show_keep_discard) 93 mFactoryMap["place_details_panel"] = LLCallbackMap(LLPreviewLandmark::createPlaceDetail, this);
93 { 94 gUICtrlFactory->buildFloater(this, "floater_preview_existing_landmark.xml", &getFactoryMap());
94 gUICtrlFactory->buildFloater(this,"floater_preview_new_landmark.xml");
95 childSetAction("Discard btn",onDiscardBtn,this);
96 }
97 else
98 {
99 gUICtrlFactory->buildFloater(this,"floater_preview_existing_landmark.xml");
100 childSetVisible("desc txt", FALSE);
101 childSetEnabled("desc", FALSE);
102 }
103
104 childSetAction("Teleport btn", onTeleportBtn,this);
105 childSetAction("Show on Map btn", onMapBtn,this);
106 95
107 const LLInventoryItem* item = getItem(); 96 /*
108 97 childSetCommitCallback("desc_editor", LLPreview::onText, this);
109 childSetCommitCallback("desc", LLPreview::onText, this); 98 childSetText("desc_editor", item->getDescription());
110 childSetText("desc", item->getDescription()); 99 childSetText("name_editor", item->getName());
111 childSetPrevalidate("desc", &LLLineEditor::prevalidatePrintableNotPipe); 100 childSetPrevalidate("desc_editor", &LLLineEditor::prevalidatePrintableNotPipe);
112 101
113 setTitle(title); 102 setTitle(title);
114 103
@@ -117,45 +106,10 @@ LLPreviewLandmark::LLPreviewLandmark(const std::string& name,
117 LLRect curRect = getRect(); 106 LLRect curRect = getRect();
118 translate(rect.mLeft - curRect.mLeft, rect.mTop - curRect.mTop); 107 translate(rect.mLeft - curRect.mLeft, rect.mTop - curRect.mTop);
119 } 108 }
120 109 */
121 LLPreviewLandmark::sOrderedInstances.push_back( this ); 110 LLPreviewLandmark::sOrderedInstances.push_back( this );
122} 111}
123 112
124// static
125void LLPreviewLandmark::onMapBtn( void* userdata )
126{
127 LLPreviewLandmark* self = (LLPreviewLandmark*) userdata;
128 gFocusMgr.setKeyboardFocus(NULL, NULL);
129
130 if( gFloaterWorldMap )
131 {
132 gFloaterWorldMap->trackLandmark( self->mItemUUID );
133 LLFloaterWorldMap::show(NULL, TRUE);
134
135 self->close();
136 }
137}
138
139// static
140void LLPreviewLandmark::onTeleportBtn( void* userdata )
141{
142 LLPreviewLandmark* self = (LLPreviewLandmark*) userdata;
143 gFocusMgr.setKeyboardFocus(NULL, NULL);
144
145 const LLInventoryItem *item = self->getItem();
146 if(item)
147 {
148 gAgent.teleportViaLandmark(item->getAssetUUID());
149
150 // we now automatically track the landmark you're teleporting to
151 // because you'll probably arrive at a telehub instead
152 if( gFloaterWorldMap )
153 {
154 gFloaterWorldMap->trackLandmark( self->mItemUUID );
155 }
156 }
157 self->close();
158}
159 113
160LLPreviewLandmark::~LLPreviewLandmark() 114LLPreviewLandmark::~LLPreviewLandmark()
161{ 115{
@@ -222,31 +176,17 @@ void LLPreviewLandmark::draw()
222 if( item && !mLandmark ) 176 if( item && !mLandmark )
223 { 177 {
224 mLandmark = gLandmarkList.getAsset( item->getAssetUUID() ); 178 mLandmark = gLandmarkList.getAsset( item->getAssetUUID() );
225 } 179 if(mLandmark && mPlacePanel)
226
227 if(mLandmark)
228 {
229 F32 degrees = 0;
230 F64 horiz_dist = 0;
231 F64 vert_dist = 0;
232 getDegreesAndDist( &degrees, &horiz_dist, &vert_dist);
233 S32 offset = 180 + (360/16);
234 if( S32(degrees) + offset >= 360 )
235 { 180 {
236 offset -= 360; 181 LLVector3 pos_region = mLandmark->getRegionPos(); // always have this
182 LLUUID landmark_asset_id = item->getAssetUUID(); // always have this
183 LLUUID region_id;
184 mLandmark->getRegionID(region_id); // might find null?
185 LLVector3d pos_global = getPositionGlobal(); // might be 0
186 mPlacePanel->displayParcelInfo(pos_region, landmark_asset_id, region_id, pos_global);
237 } 187 }
238#if _DEBUG
239 S32 dir_index = (S32(degrees) + offset) / (360/8);
240 llassert( 0 <= dir_index && dir_index <= 7 );
241#endif
242 // See also llfloatermap.cpp -> onLandmarkGo
243
244 childSetEnabled("Teleport btn", TRUE);
245 } 188 }
246 189
247 BOOL in_prelude = gAgent.inPrelude();
248 childSetEnabled("Show on Map btn", !in_prelude);
249
250 LLFloater::draw(); 190 LLFloater::draw();
251 } 191 }
252} 192}
@@ -271,3 +211,14 @@ LLPreview::EAssetStatus LLPreviewLandmark::getAssetStatus()
271 } 211 }
272 return mAssetStatus; 212 return mAssetStatus;
273} 213}
214// static
215void* LLPreviewLandmark::createPlaceDetail(void* userdata)
216{
217 LLPreviewLandmark *self = (LLPreviewLandmark*)userdata;
218 self->mPlacePanel = new LLPanelPlace();
219 gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml");
220 const LLInventoryItem* item = self->getItem();
221 self->mPlacePanel->displayItemInfo(item);
222
223 return self->mPlacePanel;
224}
diff --git a/linden/indra/newview/llpreviewlandmark.h b/linden/indra/newview/llpreviewlandmark.h
index 91088b0..f5da4ec 100644
--- a/linden/indra/newview/llpreviewlandmark.h
+++ b/linden/indra/newview/llpreviewlandmark.h
@@ -36,7 +36,6 @@
36 36
37#include "lllandmark.h" 37#include "lllandmark.h"
38 38
39#include "doublelinkedlist.h"
40#include "llfloater.h" 39#include "llfloater.h"
41#include "llmap.h" 40#include "llmap.h"
42#include "llstring.h" 41#include "llstring.h"
@@ -53,6 +52,7 @@ class LLLandmarkList;
53class LLLineEditor; 52class LLLineEditor;
54class LLMessageSystem; 53class LLMessageSystem;
55class LLPreviewLandmark; 54class LLPreviewLandmark;
55class LLPanelPlace;
56 56
57const S32 PREVIEW_LANDMARK_NUM_COLORS = 6; 57const S32 PREVIEW_LANDMARK_NUM_COLORS = 6;
58 58
@@ -78,9 +78,7 @@ public:
78 //static const LLPreviewLandmark* getFirst() { return LLPreviewLandmark::sOrderedInstances.getFirstData(); } 78 //static const LLPreviewLandmark* getFirst() { return LLPreviewLandmark::sOrderedInstances.getFirstData(); }
79 //static const LLPreviewLandmark* getNext() { return LLPreviewLandmark::sOrderedInstances.getNextData(); } 79 //static const LLPreviewLandmark* getNext() { return LLPreviewLandmark::sOrderedInstances.getNextData(); }
80 80
81 static void onTeleportBtn(void *user_data); 81 static void* createPlaceDetail(void* userdata);
82 //static void onFlyBtn(void *user_data);
83 static void onMapBtn(void *user_data);
84 82
85 /*virtual*/ void loadAsset(); 83 /*virtual*/ void loadAsset();
86 /*virtual*/ EAssetStatus getAssetStatus(); 84 /*virtual*/ EAssetStatus getAssetStatus();
@@ -93,7 +91,7 @@ private:
93// LLPointer<LLHUDText> mBeaconText; 91// LLPointer<LLHUDText> mBeaconText;
94 92
95 LLIconCtrl* mIconLandmark; 93 LLIconCtrl* mIconLandmark;
96 94 LLPanelPlace* mPlacePanel;
97 LLLandmark* mLandmark; 95 LLLandmark* mLandmark;
98 LLColor4 mMarkerColor; 96 LLColor4 mMarkerColor;
99 97
diff --git a/linden/indra/newview/llremoteparcelrequest.cpp b/linden/indra/newview/llremoteparcelrequest.cpp
new file mode 100644
index 0000000..3837cbf
--- /dev/null
+++ b/linden/indra/newview/llremoteparcelrequest.cpp
@@ -0,0 +1,66 @@
1/**
2 * @file llparcelrequest.cpp
3 * @brief Implementation of the LLParcelRequest class.
4 *
5 * $LicenseInfo:firstyear=2006&license=internal$
6 *
7 * Copyright (c) 2006-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#include "llviewerprecompiledheaders.h"
23
24#include "llagent.h"
25#include "llremoteparcelrequest.h"
26
27#include "llpanelplace.h"
28#include "llpanel.h"
29#include "llhttpclient.h"
30#include "llsdserialize.h"
31#include "llviewerregion.h"
32#include "llview.h"
33#include "message.h"
34
35LLRemoteParcelRequestResponder::LLRemoteParcelRequestResponder(LLViewHandle place_panel_handle)
36{
37 mPlacePanelHandle = place_panel_handle;
38}
39/*virtual*/
40void LLRemoteParcelRequestResponder::result(const LLSD& content)
41{
42 LLUUID parcel_id = content["parcel_id"];
43
44 LLPanelPlace* place_panelp = (LLPanelPlace*)LLPanel::getPanelByHandle(mPlacePanelHandle);
45
46 if(place_panelp)
47 {
48 place_panelp->setParcelID(parcel_id);
49 }
50
51}
52
53/*virtual*/
54void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason)
55{
56 llinfos << "LLRemoteParcelRequest::error("
57 << status << ": " << reason << ")" << llendl;
58 LLPanelPlace* place_panelp = (LLPanelPlace*)LLPanel::getPanelByHandle(mPlacePanelHandle);
59
60 if(place_panelp)
61 {
62 place_panelp->setErrorStatus(status, reason);
63 }
64
65}
66
diff --git a/linden/indra/newview/llremoteparcelrequest.h b/linden/indra/newview/llremoteparcelrequest.h
new file mode 100644
index 0000000..9bb87bf
--- /dev/null
+++ b/linden/indra/newview/llremoteparcelrequest.h
@@ -0,0 +1,41 @@
1/**
2 * @file lleventpoll.h
3 * @brief LLEvDescription of the LLEventPoll class.
4 *
5 * $LicenseInfo:firstyear=2006&license=internal$
6 *
7 * Copyright (c) 2006-2007, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#ifndef LL_LLREMOTEPARCELREQUEST_H
23#define LL_LLREMOTEPARCELREQUEST_H
24
25#include "llhttpclient.h"
26#include "llview.h"
27
28class LLRemoteParcelRequestResponder : public LLHTTPClient::Responder
29{
30public:
31 LLRemoteParcelRequestResponder(LLViewHandle place_panel_handle);
32 //If we get back a normal response, handle it here
33 virtual void result(const LLSD& content);
34 //If we get back an error (not found, etc...), handle it here
35 virtual void error(U32 status, const std::string& reason);
36
37protected:
38 LLViewHandle mPlacePanelHandle;
39};
40
41#endif // LL_LLREMOTEPARCELREQUEST_H
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index a84590f..dad8046 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -817,7 +817,7 @@ BOOL idle_startup()
817 if (LLURLSimString::parse()) 817 if (LLURLSimString::parse())
818 { 818 {
819 // a startup URL was specified 819 // a startup URL was specified
820 agent_location_id = START_LOCATION_ID_TELEHUB; 820 agent_location_id = START_LOCATION_ID_URL;
821 821
822 // doesn't really matter what location_which is, since 822 // doesn't really matter what location_which is, since
823 // agent_start_look_at will be overwritten when the 823 // agent_start_look_at will be overwritten when the
@@ -1243,11 +1243,11 @@ BOOL idle_startup()
1243 text = gUserAuthp->getResponse("agent_access"); 1243 text = gUserAuthp->getResponse("agent_access");
1244 if(text && (text[0] == 'M')) 1244 if(text && (text[0] == 'M'))
1245 { 1245 {
1246 gAgent.mAccess = SIM_ACCESS_MATURE; 1246 gAgent.setTeen(false);
1247 } 1247 }
1248 else 1248 else
1249 { 1249 {
1250 gAgent.mAccess = SIM_ACCESS_PG; 1250 gAgent.setTeen(true);
1251 } 1251 }
1252 1252
1253 text = gUserAuthp->getResponse("start_location"); 1253 text = gUserAuthp->getResponse("start_location");
@@ -1505,6 +1505,7 @@ BOOL idle_startup()
1505 1505
1506 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT ); 1506 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT );
1507 regionp->setSeedCapability(first_sim_seed_cap); 1507 regionp->setSeedCapability(first_sim_seed_cap);
1508 llinfos << "Waiting for seed grant ...." << llendl;
1508 1509
1509 // Set agent's initial region to be the one we just created. 1510 // Set agent's initial region to be the one we just created.
1510 gAgent.setRegion(regionp); 1511 gAgent.setRegion(regionp);
@@ -1523,7 +1524,6 @@ BOOL idle_startup()
1523 //--------------------------------------------------------------------- 1524 //---------------------------------------------------------------------
1524 if(STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) 1525 if(STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
1525 { 1526 {
1526 llinfos << "Waiting for seed grant ...." << llendl;
1527 return do_normal_idle; 1527 return do_normal_idle;
1528 } 1528 }
1529 1529
@@ -1714,30 +1714,36 @@ BOOL idle_startup()
1714 } 1714 }
1715 1715
1716 #if LL_QUICKTIME_ENABLED // windows only right now but will be ported to mac 1716 #if LL_QUICKTIME_ENABLED // windows only right now but will be ported to mac
1717 if (gUseQuickTime 1717 if (gUseQuickTime)
1718 && !gQuickTimeInitialized)
1719 { 1718 {
1720 // initialize quicktime libraries (fails gracefully if quicktime not installed ($QUICKTIME) 1719 if(!gQuickTimeInitialized)
1721 llinfos << "Initializing QuickTime...." << llendl; 1720 {
1722 set_startup_status(0.57f, "Initializing QuickTime...", gAgent.mMOTD.c_str()); 1721 // initialize quicktime libraries (fails gracefully if quicktime not installed ($QUICKTIME)
1723 display_startup(); 1722 llinfos << "Initializing QuickTime...." << llendl;
1724 #if LL_WINDOWS 1723 set_startup_status(0.57f, "Initializing QuickTime...", gAgent.mMOTD.c_str());
1725 // Only necessary/available on Windows. 1724 display_startup();
1726 if ( InitializeQTML ( 0L ) != noErr ) 1725 #if LL_WINDOWS
1727 { 1726 // Only necessary/available on Windows.
1728 // quicktime init failed - turn off media engine support 1727 if ( InitializeQTML ( 0L ) != noErr )
1729 LLMediaEngine::getInstance ()->setAvailable ( FALSE ); 1728 {
1730 llinfos << "...not found - unable to initialize." << llendl; 1729 // quicktime init failed - turn off media engine support
1731 set_startup_status(0.57f, "QuickTime not found - unable to initialize.", gAgent.mMOTD.c_str()); 1730 LLMediaEngine::getInstance ()->setAvailable ( FALSE );
1732 } 1731 llinfos << "...not found - unable to initialize." << llendl;
1733 else 1732 set_startup_status(0.57f, "QuickTime not found - unable to initialize.", gAgent.mMOTD.c_str());
1734 { 1733 }
1735 llinfos << ".. initialized successfully." << llendl; 1734 else
1736 set_startup_status(0.57f, "QuickTime initialized successfully.", gAgent.mMOTD.c_str()); 1735 {
1737 }; 1736 llinfos << ".. initialized successfully." << llendl;
1738 #endif 1737 set_startup_status(0.57f, "QuickTime initialized successfully.", gAgent.mMOTD.c_str());
1739 EnterMovies (); 1738 };
1740 gQuickTimeInitialized = true; 1739 #endif
1740 EnterMovies ();
1741 gQuickTimeInitialized = true;
1742 }
1743 }
1744 else
1745 {
1746 LLMediaEngine::getInstance()->setAvailable( FALSE );
1741 } 1747 }
1742 #endif 1748 #endif
1743 1749
@@ -2316,6 +2322,7 @@ BOOL idle_startup()
2316#if 0 // sjb: enable for auto-enabling timer display 2322#if 0 // sjb: enable for auto-enabling timer display
2317 gDebugView->mFastTimerView->setVisible(TRUE); 2323 gDebugView->mFastTimerView->setVisible(TRUE);
2318#endif 2324#endif
2325
2319 return do_normal_idle; 2326 return do_normal_idle;
2320 } 2327 }
2321 2328
@@ -3623,6 +3630,7 @@ void release_start_screen()
3623 gStartImageGL = NULL; 3630 gStartImageGL = NULL;
3624} 3631}
3625 3632
3633
3626// static 3634// static
3627void LLStartUp::setStartupState( S32 state ) 3635void LLStartUp::setStartupState( S32 state )
3628{ 3636{
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index 9bbb25f..8c50eca 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -48,6 +48,7 @@
48#include "llviewercontrol.h" 48#include "llviewercontrol.h"
49#include "llfloaterbuycurrency.h" 49#include "llfloaterbuycurrency.h"
50#include "llfloaterchat.h" 50#include "llfloaterchat.h"
51#include "llfloaterdirectory.h" // to spawn search
51#include "llfloaterland.h" 52#include "llfloaterland.h"
52#include "llfloaterregioninfo.h" 53#include "llfloaterregioninfo.h"
53#include "llfloaterscriptdebug.h" 54#include "llfloaterscriptdebug.h"
@@ -150,53 +151,6 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
150 mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" ); 151 mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" );
151 mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" ); 152 mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" );
152 153
153 S32 x = mRect.getWidth() - 2;
154 S32 y = 0;
155 LLRect r;
156 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
157 mSGBandwidth = new LLStatGraph("BandwidthGraph", r);
158 mSGBandwidth->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
159 mSGBandwidth->setStat(&gViewerStats->mKBitStat);
160 LLString text = childGetText("bandwidth_tooltip") + " ";
161 LLUIString bandwidth_tooltip = text; // get the text from XML until this widget is XML driven
162 mSGBandwidth->setLabel(bandwidth_tooltip.getString().c_str());
163 mSGBandwidth->setUnits("kbps");
164 mSGBandwidth->setPrecision(0);
165 addChild(mSGBandwidth);
166 x -= SIM_STAT_WIDTH + 2;
167
168 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
169 mSGPacketLoss = new LLStatGraph("PacketLossPercent", r);
170 mSGPacketLoss->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
171 mSGPacketLoss->setStat(&gViewerStats->mPacketsLostPercentStat);
172 text = childGetText("packet_loss_tooltip") + " ";
173 LLUIString packet_loss_tooltip = text; // get the text from XML until this widget is XML driven
174 mSGPacketLoss->setLabel(packet_loss_tooltip.getString().c_str());
175 mSGPacketLoss->setUnits("%");
176 mSGPacketLoss->setMin(0.f);
177 mSGPacketLoss->setMax(5.f);
178 mSGPacketLoss->setThreshold(0, 0.5f);
179 mSGPacketLoss->setThreshold(1, 1.f);
180 mSGPacketLoss->setThreshold(2, 3.f);
181 mSGPacketLoss->setPrecision(1);
182 mSGPacketLoss->mPerSec = FALSE;
183 addChild(mSGPacketLoss);
184
185}
186
187LLStatusBar::~LLStatusBar()
188{
189 delete mBalanceTimer;
190 mBalanceTimer = NULL;
191
192 delete mHealthTimer;
193 mHealthTimer = NULL;
194
195 // LLView destructor cleans up children
196}
197
198BOOL LLStatusBar::postBuild()
199{
200 childSetAction("scriptout", onClickScriptDebug, this); 154 childSetAction("scriptout", onClickScriptDebug, this);
201 childSetAction("health", onClickHealth, this); 155 childSetAction("health", onClickHealth, this);
202 childSetAction("fly", onClickFly, this); 156 childSetAction("fly", onClickFly, this);
@@ -207,17 +161,31 @@ BOOL LLStatusBar::postBuild()
207 childSetAction("restrictpush", onClickPush, this ); 161 childSetAction("restrictpush", onClickPush, this );
208 childSetAction("status_voice", onClickVoice, this ); 162 childSetAction("status_voice", onClickVoice, this );
209 163
164 childSetCommitCallback("search_editor", onCommitSearch, this);
165 childSetAction("search_btn", onClickSearch, this);
166
210 childSetActionTextbox("ParcelNameText", onClickParcelInfo ); 167 childSetActionTextbox("ParcelNameText", onClickParcelInfo );
211 childSetActionTextbox("BalanceText", onClickBalance ); 168 childSetActionTextbox("BalanceText", onClickBalance );
169}
170
171LLStatusBar::~LLStatusBar()
172{
173 delete mBalanceTimer;
174 mBalanceTimer = NULL;
175
176 delete mHealthTimer;
177 mHealthTimer = NULL;
212 178
213 return TRUE; 179 // LLView destructor cleans up children
214} 180}
215 181
182//virtual
216EWidgetType LLStatusBar::getWidgetType() const 183EWidgetType LLStatusBar::getWidgetType() const
217{ 184{
218 return WIDGET_TYPE_STATUS_BAR; 185 return WIDGET_TYPE_STATUS_BAR;
219} 186}
220 187
188//virtual
221LLString LLStatusBar::getWidgetTag() const 189LLString LLStatusBar::getWidgetTag() const
222{ 190{
223 return LL_STATUS_BAR_TAG; 191 return LL_STATUS_BAR_TAG;
@@ -245,13 +213,6 @@ void LLStatusBar::draw()
245// Per-frame updates of visibility 213// Per-frame updates of visibility
246void LLStatusBar::refresh() 214void LLStatusBar::refresh()
247{ 215{
248 F32 bwtotal = gViewerThrottle.getMaxBandwidth() / 1000.f;
249 mSGBandwidth->setMin(0.f);
250 mSGBandwidth->setMax(bwtotal*1.25f);
251 mSGBandwidth->setThreshold(0, bwtotal*0.75f);
252 mSGBandwidth->setThreshold(1, bwtotal);
253 mSGBandwidth->setThreshold(2, bwtotal);
254
255 // *TODO: Localize / translate time 216 // *TODO: Localize / translate time
256 217
257 // Get current UTC time, adjusted for the user's clock 218 // Get current UTC time, adjusted for the user's clock
@@ -464,6 +425,10 @@ void LLStatusBar::refresh()
464 pos_y -= pos_y % 2; 425 pos_y -= pos_y % 2;
465 } 426 }
466 427
428 mRegionDetails.mTime = mTextTime->getText();
429 mRegionDetails.mBalance = mBalance;
430 mRegionDetails.mAccesString = (char *)region->getSimAccessString();
431 mRegionDetails.mPing = region->getNetDetailsForLCD();
467 if (parcel && !parcel->getName().empty()) 432 if (parcel && !parcel->getName().empty())
468 { 433 {
469 location_name = region->getName() 434 location_name = region->getName()
@@ -471,6 +436,43 @@ void LLStatusBar::refresh()
471 pos_x, pos_y, pos_z, 436 pos_x, pos_y, pos_z,
472 region->getSimAccessString(), 437 region->getSimAccessString(),
473 parcel->getName().c_str()); 438 parcel->getName().c_str());
439
440 // keep these around for the LCD to use
441 mRegionDetails.mRegionName = region->getName();
442 mRegionDetails.mParcelName = (char *)parcel->getName().c_str();
443 mRegionDetails.mX = pos_x;
444 mRegionDetails.mY = pos_y;
445 mRegionDetails.mZ = pos_z;
446 mRegionDetails.mArea = parcel->getArea();
447 mRegionDetails.mForSale = parcel->getForSale();
448 mRegionDetails.mTraffic = gParcelMgr->getDwelling();
449
450 if (parcel->isPublic())
451 {
452 snprintf(mRegionDetails.mOwner, MAX_STRING, "Public");
453 }
454 else
455 {
456 if (parcel->getIsGroupOwned())
457 {
458 if(!parcel->getGroupID().isNull())
459 {
460 gCacheName->getGroupName(parcel->getGroupID(), mRegionDetails.mOwner);
461 }
462 else
463 {
464 snprintf(mRegionDetails.mOwner, MAX_STRING, "Group Owned");
465 }
466 }
467 else
468 {
469 // Figure out the owner's name
470 char owner_first[MAX_STRING]; /*Flawfinder: ignore*/
471 char owner_last[MAX_STRING]; /*Flawfinder: ignore*/
472 gCacheName->getName(parcel->getOwnerID(), owner_first, owner_last);
473 snprintf(mRegionDetails.mOwner, MAX_STRING, "%s %s", owner_first, owner_last); /* Flawfinder: ignore */
474 }
475 }
474 } 476 }
475 else 477 else
476 { 478 {
@@ -478,12 +480,34 @@ void LLStatusBar::refresh()
478 + llformat(" %d, %d, %d (%s)", 480 + llformat(" %d, %d, %d (%s)",
479 pos_x, pos_y, pos_z, 481 pos_x, pos_y, pos_z,
480 region->getSimAccessString()); 482 region->getSimAccessString());
483 // keep these around for the LCD to use
484 mRegionDetails.mRegionName = region->getName();
485 mRegionDetails.mParcelName = "Unknown";
486
487 mRegionDetails.mX = pos_x;
488 mRegionDetails.mY = pos_y;
489 mRegionDetails.mZ = pos_z;
490 mRegionDetails.mArea = 0;
491 mRegionDetails.mForSale = FALSE;
492 snprintf(mRegionDetails.mOwner, MAX_STRING, "Unknown");
493 mRegionDetails.mTraffic = 0.0f;
481 } 494 }
482 } 495 }
483 else 496 else
484 { 497 {
485 // no region 498 // no region
486 location_name = "(Unknown)"; 499 location_name = "(Unknown)";
500 // keep these around for the LCD to use
501 mRegionDetails.mRegionName = LLString("Unknown");
502 mRegionDetails.mParcelName = "Unknown";
503 mRegionDetails.mAccesString = "Unknown";
504 mRegionDetails.mX = 0;
505 mRegionDetails.mY = 0;
506 mRegionDetails.mZ = 0;
507 mRegionDetails.mArea = 0;
508 mRegionDetails.mForSale = FALSE;
509 snprintf(mRegionDetails.mOwner, MAX_STRING, "Unknown");
510 mRegionDetails.mTraffic = 0.0f;
487 } 511 }
488 mTextParcelName->setText(location_name); 512 mTextParcelName->setText(location_name);
489 513
@@ -499,9 +523,9 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
499{ 523{
500 mTextBalance->setVisible(visible); 524 mTextBalance->setVisible(visible);
501 mTextTime->setVisible(visible); 525 mTextTime->setVisible(visible);
502 mSGBandwidth->setVisible(visible);
503 mSGPacketLoss->setVisible(visible);
504 childSetVisible("buycurrency", visible); 526 childSetVisible("buycurrency", visible);
527 childSetVisible("search_editor", visible);
528 childSetVisible("search_btn", visible);
505 setBackgroundVisible(visible); 529 setBackgroundVisible(visible);
506} 530}
507 531
@@ -517,8 +541,9 @@ void LLStatusBar::creditBalance(S32 credit)
517 541
518void LLStatusBar::setBalance(S32 balance) 542void LLStatusBar::setBalance(S32 balance)
519{ 543{
520 LLString balance_str; 544 LLString money_str = gResMgr->getMonetaryString( balance );
521 gResMgr->getMonetaryString( balance_str, balance ); 545 LLString balance_str = "L$";
546 balance_str += money_str;
522 mTextBalance->setText( balance_str ); 547 mTextBalance->setText( balance_str );
523 548
524 if (mBalance && (fabs((F32)(mBalance - balance)) > gSavedSettings.getF32("UISndMoneyChangeThreshold"))) 549 if (mBalance && (fabs((F32)(mBalance - balance)) > gSavedSettings.getF32("UISndMoneyChangeThreshold")))
@@ -742,6 +767,21 @@ void LLStatusBar::setupDate()
742 } 767 }
743} 768}
744 769
770// static
771void LLStatusBar::onCommitSearch(LLUICtrl*, void* data)
772{
773 // committing is the same as clicking "search"
774 onClickSearch(data);
775}
776
777// static
778void LLStatusBar::onClickSearch(void* data)
779{
780 LLStatusBar* self = (LLStatusBar*)data;
781 LLString search_text = self->childGetText("search_editor");
782 LLFloaterDirectory::showFindAll(search_text);
783}
784
745BOOL can_afford_transaction(S32 cost) 785BOOL can_afford_transaction(S32 cost)
746{ 786{
747 return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost))); 787 return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
diff --git a/linden/indra/newview/llstatusbar.h b/linden/indra/newview/llstatusbar.h
index 5832dee..88a97ba 100644
--- a/linden/indra/newview/llstatusbar.h
+++ b/linden/indra/newview/llstatusbar.h
@@ -47,19 +47,36 @@ class LLUUID;
47class LLFrameTimer; 47class LLFrameTimer;
48class LLStatGraph; 48class LLStatGraph;
49 49
50// used by LCD screen
51class cLLRegionDetails
52{
53public:
54 LLString mRegionName;
55 char *mParcelName;
56 char *mAccesString;
57 S32 mX;
58 S32 mY;
59 S32 mZ;
60 S32 mArea;
61 BOOL mForSale;
62 char mOwner[MAX_STRING];
63 F32 mTraffic;
64 S32 mBalance;
65 LLString mTime;
66 U32 mPing;
67};
68
50class LLStatusBar 69class LLStatusBar
51: public LLPanel 70: public LLPanel
52{ 71{
53public: 72public:
54 LLStatusBar(const std::string& name, const LLRect& rect ); 73 LLStatusBar(const std::string& name, const LLRect& rect );
55 ~LLStatusBar(); 74 /*virtual*/ ~LLStatusBar();
56 virtual BOOL postBuild();
57 75
58 virtual EWidgetType getWidgetType() const; 76 /*virtual*/ EWidgetType getWidgetType() const;
59 virtual LLString getWidgetTag() const; 77 /*virtual*/ LLString getWidgetTag() const;
60 78
61 // OVERRIDES 79 /*virtual*/ void draw();
62 virtual void draw();
63 80
64 // MANIPULATORS 81 // MANIPULATORS
65 void setBalance(S32 balance); 82 void setBalance(S32 balance);
@@ -83,21 +100,22 @@ public:
83 S32 getSquareMetersCredit() const; 100 S32 getSquareMetersCredit() const;
84 S32 getSquareMetersCommitted() const; 101 S32 getSquareMetersCommitted() const;
85 S32 getSquareMetersLeft() const; 102 S32 getSquareMetersLeft() const;
103 cLLRegionDetails mRegionDetails;
86 104
87protected: 105private:
88 // simple method to setup the part that holds the date 106 // simple method to setup the part that holds the date
89 void setupDate(); 107 void setupDate();
90 108
91protected: 109 static void onCommitSearch(LLUICtrl*, void* data);
110 static void onClickSearch(void* data);
111
112private:
92 LLTextBox *mTextBalance; 113 LLTextBox *mTextBalance;
93 LLTextBox *mTextHealth; 114 LLTextBox *mTextHealth;
94 LLTextBox *mTextTime; 115 LLTextBox *mTextTime;
95 116
96 LLTextBox* mTextParcelName; 117 LLTextBox* mTextParcelName;
97 118
98 LLStatGraph *mSGBandwidth;
99 LLStatGraph *mSGPacketLoss;
100
101 LLButton *mBtnBuyCurrency; 119 LLButton *mBtnBuyCurrency;
102 120
103 S32 mBalance; 121 S32 mBalance;
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 55692d1..166209d 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -605,7 +605,7 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
605 { 605 {
606 if (object->isAvatar()) 606 if (object->isAvatar())
607 { 607 {
608 LLFloaterAvatarInfo::showFromAvatar(object); 608 LLFloaterAvatarInfo::showFromAvatar(object->getID());
609 } 609 }
610 else 610 else
611 { 611 {
diff --git a/linden/indra/newview/llurldispatcher.cpp b/linden/indra/newview/llurldispatcher.cpp
index e49e9e5..880822a 100644
--- a/linden/indra/newview/llurldispatcher.cpp
+++ b/linden/indra/newview/llurldispatcher.cpp
@@ -35,11 +35,10 @@
35// viewer includes 35// viewer includes
36#include "llagent.h" // teleportViaLocation() 36#include "llagent.h" // teleportViaLocation()
37#include "llcommandhandler.h" 37#include "llcommandhandler.h"
38// *FIX: code in merge sl-search-8 38#include "llfloaterurldisplay.h"
39//#include "llfloaterurldisplay.h"
40#include "llfloaterdirectory.h" 39#include "llfloaterdirectory.h"
41#include "llfloaterhtmlhelp.h" 40#include "llfloaterhtmlhelp.h"
42#include "llfloaterworldmap.h" 41//#include "llfloaterworldmap.h"
43#include "llpanellogin.h" 42#include "llpanellogin.h"
44#include "llstartup.h" // gStartupState 43#include "llstartup.h" // gStartupState
45#include "llurlsimstring.h" 44#include "llurlsimstring.h"
@@ -88,11 +87,10 @@ private:
88 // handles secondlife://Ahern/123/45/67/ 87 // handles secondlife://Ahern/123/45/67/
89 // Returns true if handled. 88 // Returns true if handled.
90 89
91// *FIX: code in merge sl-search-8 90 static void regionHandleCallback(U64 handle, const std::string& url,
92// static void regionHandleCallback(U64 handle, const std::string& url, 91 const LLUUID& snapshot_id, bool teleport);
93// const LLUUID& snapshot_id, bool teleport); 92 // Called by LLWorldMap when a region name has been resolved to a
94// // Called by LLWorldMap when a region name has been resolved to a 93 // location in-world, used by places-panel display.
95// // location in-world, used by places-panel display.
96 94
97 static bool matchPrefix(const std::string& url, const std::string& prefix); 95 static bool matchPrefix(const std::string& url, const std::string& prefix);
98 96
@@ -151,7 +149,9 @@ bool LLURLDispatcherImpl::dispatchHelp(const std::string& url, BOOL right_mouse)
151{ 149{
152 if (matchPrefix(url, SLURL_SL_HELP_PREFIX)) 150 if (matchPrefix(url, SLURL_SL_HELP_PREFIX))
153 { 151 {
152#if LL_LIBXUL_ENABLED
154 gViewerHtmlHelp.show(); 153 gViewerHtmlHelp.show();
154#endif // LL_LIBXUL_ENABLED
155 return true; 155 return true;
156 } 156 }
157 return false; 157 return false;
@@ -228,13 +228,52 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, BOOL right_mous
228 S32 y = 128; 228 S32 y = 128;
229 S32 z = 0; 229 S32 z = 0;
230 LLURLSimString::parse(sim_string, &region_name, &x, &y, &z); 230 LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
231 if (gFloaterWorldMap) 231
232 LLFloaterURLDisplay* url_displayp = LLFloaterURLDisplay::getInstance(LLSD());
233 url_displayp->setName(region_name);
234
235 // Request a region handle by name
236 gWorldMap->sendNamedRegionRequest(region_name,
237 LLURLDispatcherImpl::regionHandleCallback,
238 url,
239 false); // don't teleport
240 return true;
241}
242
243/*static*/
244void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)
245{
246 std::string sim_string = stripProtocol(url);
247 std::string region_name;
248 S32 x = 128;
249 S32 y = 128;
250 S32 z = 0;
251 LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
252
253 LLVector3 local_pos;
254 local_pos.mV[VX] = (F32)x;
255 local_pos.mV[VY] = (F32)y;
256 local_pos.mV[VZ] = (F32)z;
257
258 if (teleport)
232 { 259 {
233 llinfos << "Opening map to " << region_name << llendl; 260 LLVector3d global_pos = from_region_handle(region_handle);
234 gFloaterWorldMap->trackURL( region_name.c_str(), x, y, z ); 261 global_pos += LLVector3d(local_pos);
235 LLFloaterWorldMap::show(NULL, TRUE); 262 gAgent.teleportViaLocation(global_pos);
263 }
264 else
265 {
266 // display informational floater, allow user to click teleport btn
267 LLFloaterURLDisplay* url_displayp = LLFloaterURLDisplay::getInstance(LLSD());
268
269 url_displayp->displayParcelInfo(region_handle, local_pos);
270 if(snapshot_id.notNull())
271 {
272 url_displayp->setSnapshotDisplay(snapshot_id);
273 }
274 std::string locationString = llformat("%s %d, %d, %d", region_name.c_str(), x, y, z);
275 url_displayp->setLocationString(locationString);
236 } 276 }
237 return true;
238} 277}
239 278
240// static 279// static
@@ -268,38 +307,36 @@ std::string LLURLDispatcherImpl::stripProtocol(const std::string& url)
268 return stripped; 307 return stripped;
269} 308}
270 309
271// *FIX: code in merge sl-search-8 310//---------------------------------------------------------------------------
272// 311// Teleportation links are handled here because they are tightly coupled
273////--------------------------------------------------------------------------- 312// to URL parsing and sim-fragment parsing
274//// Teleportation links are handled here because they are tightly coupled 313class LLTeleportHandler : public LLCommandHandler
275//// to URL parsing and sim-fragment parsing 314{
276//class LLTeleportHandler : public LLCommandHandler 315public:
277//{ 316 LLTeleportHandler() : LLCommandHandler("teleport") { }
278//public: 317 bool handle(const std::vector<std::string>& tokens)
279// LLTeleportHandler() : LLCommandHandler("teleport") { } 318 {
280// bool handle(const std::vector<std::string>& tokens) 319 // construct a "normal" SLURL, resolve the region to
281// { 320 // a global position, and teleport to it
282// // construct a "normal" SLURL, resolve the region to 321 if (tokens.size() < 1) return false;
283// // a global position, and teleport to it 322
284// if (tokens.size() < 1) return false; 323 // Region names may be %20 escaped.
285// 324 std::string region_name = LLURLSimString::unescapeRegionName(tokens[0]);
286// // Region names may be %20 escaped. 325
287// std::string region_name = LLURLSimString::unescapeRegionName(tokens[0]); 326 // build secondlife://De%20Haro/123/45/67 for use in callback
288// 327 std::string url = SLURL_SECONDLIFE_PREFIX;
289// // build secondlife://De%20Haro/123/45/67 for use in callback 328 for (size_t i = 0; i < tokens.size(); ++i)
290// std::string url = SLURL_SECONDLIFE_PREFIX; 329 {
291// for (size_t i = 0; i < tokens.size(); ++i) 330 url += tokens[i] + "/";
292// { 331 }
293// url += tokens[i] + "/"; 332 gWorldMap->sendNamedRegionRequest(region_name,
294// } 333 LLURLDispatcherImpl::regionHandleCallback,
295// gWorldMap->sendNamedRegionRequest(region_name, 334 url,
296// LLURLDispatcherImpl::regionHandleCallback, 335 true); // teleport
297// url, 336 return true;
298// true); // teleport 337 }
299// return true; 338};
300// } 339LLTeleportHandler gTeleportHandler;
301//};
302//LLTeleportHandler gTeleportHandler;
303 340
304//--------------------------------------------------------------------------- 341//---------------------------------------------------------------------------
305 342
@@ -325,4 +362,3 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& url)
325{ 362{
326 return LLURLDispatcherImpl::dispatchRightClick(url); 363 return LLURLDispatcherImpl::dispatchRightClick(url);
327} 364}
328
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index b4dc093..24b8105 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -240,6 +240,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield)
240 LLImageGL::updateStats(gFrameTimeSeconds); 240 LLImageGL::updateStats(gFrameTimeSeconds);
241 241
242 LLVOAvatar::sRenderName = gSavedSettings.getS32("RenderName"); 242 LLVOAvatar::sRenderName = gSavedSettings.getS32("RenderName");
243 LLVOAvatar::sRenderGroupTitles = gSavedSettings.getBOOL("RenderGroupTitleAll");
243 gPipeline.mBackfaceCull = TRUE; 244 gPipeline.mBackfaceCull = TRUE;
244 gFrameCount++; 245 gFrameCount++;
245 if (gFocusMgr.getAppHasFocus()) 246 if (gFocusMgr.getAppHasFocus())
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index aa9c2c0..a31ed86 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -116,6 +116,7 @@ void LLViewerImageList::init()
116 doPreloadImages(); 116 doPreloadImages();
117} 117}
118 118
119
119void LLViewerImageList::doPreloadImages() 120void LLViewerImageList::doPreloadImages()
120{ 121{
121 llinfos << "Preloading images..." << llendl; 122 llinfos << "Preloading images..." << llendl;
@@ -313,6 +314,9 @@ void LLViewerImageList::doPreloadImages()
313 preloadImage("icn_voice_ptt-on-lvl1.tga", LLUUID::null, FALSE); 314 preloadImage("icn_voice_ptt-on-lvl1.tga", LLUUID::null, FALSE);
314 preloadImage("icn_voice_ptt-on-lvl2.tga", LLUUID::null, FALSE); 315 preloadImage("icn_voice_ptt-on-lvl2.tga", LLUUID::null, FALSE);
315 preloadImage("icn_voice_ptt-on-lvl3.tga", LLUUID::null, FALSE); 316 preloadImage("icn_voice_ptt-on-lvl3.tga", LLUUID::null, FALSE);
317 preloadImage("lag_status_good.tga", LLUUID::null, FALSE);
318 preloadImage("lag_status_warning.tga", LLUUID::null, FALSE);
319 preloadImage("lag_status_critical.tga", LLUUID::null, FALSE);
316} 320}
317 321
318static std::string get_texture_list_name() 322static std::string get_texture_list_name()
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 2ac9caf..45006c1 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -138,6 +138,7 @@
138#include "llinventoryview.h" 138#include "llinventoryview.h"
139#include "llkeyboard.h" 139#include "llkeyboard.h"
140#include "llpanellogin.h" 140#include "llpanellogin.h"
141#include "llfloaterlandmark.h"
141#include "llmenucommands.h" 142#include "llmenucommands.h"
142#include "llmenugl.h" 143#include "llmenugl.h"
143#include "llmorphview.h" 144#include "llmorphview.h"
@@ -196,6 +197,9 @@
196 197
197#include "lltexlayer.h" 198#include "lltexlayer.h"
198 199
200void init_landmark_menu(LLMenuGL* menu);
201void clear_landmark_menu(LLMenuGL* menu);
202
199void init_client_menu(LLMenuGL* menu); 203void init_client_menu(LLMenuGL* menu);
200void init_server_menu(LLMenuGL* menu); 204void init_server_menu(LLMenuGL* menu);
201 205
@@ -244,6 +248,7 @@ LLPieMenu *gPieAttachment = NULL;
244LLPieMenu *gPieLand = NULL; 248LLPieMenu *gPieLand = NULL;
245 249
246// local constants 250// local constants
251const LLString LANDMARK_MENU_NAME("Landmarks");
247const LLString CLIENT_MENU_NAME("Client"); 252const LLString CLIENT_MENU_NAME("Client");
248const LLString SERVER_MENU_NAME("Server"); 253const LLString SERVER_MENU_NAME("Server");
249 254
@@ -273,6 +278,7 @@ LLPieMenu* gDetachPieMenu = NULL;
273LLPieMenu* gDetachScreenPieMenu = NULL; 278LLPieMenu* gDetachScreenPieMenu = NULL;
274LLPieMenu* gDetachBodyPartPieMenus[8]; 279LLPieMenu* gDetachBodyPartPieMenus[8];
275 280
281LLMenuGL* gLandmarkMenu = NULL;
276LLMenuItemCallGL* gAFKMenu = NULL; 282LLMenuItemCallGL* gAFKMenu = NULL;
277LLMenuItemCallGL* gBusyMenu = NULL; 283LLMenuItemCallGL* gBusyMenu = NULL;
278 284
@@ -334,6 +340,9 @@ void handle_audio_status_2(void*);
334void handle_audio_status_3(void*); 340void handle_audio_status_3(void*);
335void handle_audio_status_4(void*); 341void handle_audio_status_4(void*);
336#endif 342#endif
343void manage_landmarks(void*);
344void create_new_landmark(void*);
345void landmark_menu_action(void*);
337void reload_ui(void*); 346void reload_ui(void*);
338void handle_agent_stop_moving(void*); 347void handle_agent_stop_moving(void*);
339void print_packets_lost(void*); 348void print_packets_lost(void*);
@@ -362,6 +371,7 @@ void toggle_show_xui_names(void *);
362BOOL check_show_xui_names(void *); 371BOOL check_show_xui_names(void *);
363 372
364// Debug UI 373// Debug UI
374void handle_web_search_demo(void*);
365void handle_slurl_test(void*); 375void handle_slurl_test(void*);
366void handle_save_to_xml(void*); 376void handle_save_to_xml(void*);
367void handle_load_from_xml(void*); 377void handle_load_from_xml(void*);
@@ -483,6 +493,54 @@ BOOL enable_have_card(void*);
483BOOL enable_detach(void*); 493BOOL enable_detach(void*);
484BOOL enable_region_owner(void*); 494BOOL enable_region_owner(void*);
485 495
496class LLLandmarkObserver : public LLInventoryObserver
497{
498public:
499 LLLandmarkObserver();
500 virtual ~LLLandmarkObserver();
501
502 virtual void changed(U32 mask)
503 {
504 // JAMESDEBUG disabled for now - slows down client or causes crashes
505 // in inventory code.
506 //
507 // Also, this may not be faster than just rebuilding the menu each time.
508 // I believe gInventory.getObject() is not fast.
509 //
510 //const std::set<LLUUID>& changed_ids = gInventory.getChangedIDs();
511 //std::set<LLUUID>::const_iterator id_it;
512 //BOOL need_to_rebuild_menu = FALSE;
513 //for(id_it = changed_ids.begin(); id_it != changed_ids.end(); ++id_it)
514 //{
515 // LLInventoryObject* objectp = gInventory.getObject(*id_it);
516 // if (objectp && (objectp->getType() == LLAssetType::AT_LANDMARK || objectp->getType() == LLAssetType::AT_CATEGORY))
517 // {
518 // need_to_rebuild_menu = TRUE;
519 // }
520 //}
521 //if (need_to_rebuild_menu)
522 //{
523 // init_landmark_menu(gLandmarkMenu);
524 //}
525 }
526};
527
528// For debugging only, I think the inventory observer doesn't get
529// called if the inventory is loaded from cache.
530void build_landmark_menu(void*)
531{
532 init_landmark_menu(gLandmarkMenu);
533}
534
535LLLandmarkObserver::LLLandmarkObserver()
536{
537 gInventory.addObserver(this);
538}
539
540LLLandmarkObserver::~LLLandmarkObserver()
541{
542 gInventory.removeObserver(this);
543}
486 544
487class LLMenuParcelObserver : public LLParcelObserver 545class LLMenuParcelObserver : public LLParcelObserver
488{ 546{
@@ -493,6 +551,7 @@ public:
493}; 551};
494 552
495static LLMenuParcelObserver* gMenuParcelObserver = NULL; 553static LLMenuParcelObserver* gMenuParcelObserver = NULL;
554static LLLandmarkObserver* gLandmarkObserver = NULL;
496 555
497LLMenuParcelObserver::LLMenuParcelObserver() 556LLMenuParcelObserver::LLMenuParcelObserver()
498{ 557{
@@ -584,7 +643,7 @@ void init_menus()
584 gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true); 643 gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true);
585 gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true); 644 gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true);
586 645
587 if (gAgent.mAccess < SIM_ACCESS_MATURE) 646 if (gAgent.isTeen())
588 { 647 {
589 gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE); 648 gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
590 gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE); 649 gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
@@ -648,7 +707,7 @@ void init_menus()
648 gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE); 707 gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE);
649 gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE); 708 gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE);
650 709
651 if (gAgent.mAccess < SIM_ACCESS_MATURE) 710 if (gAgent.isTeen())
652 { 711 {
653 gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE); 712 gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
654 gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE); 713 gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
@@ -656,6 +715,18 @@ void init_menus()
656 715
657 // TomY TODO convert these two 716 // TomY TODO convert these two
658 LLMenuGL*menu; 717 LLMenuGL*menu;
718
719 // JAMESDEBUG - Maybe we don't want a global landmark menu
720 /*
721 menu = new LLMenuGL(LANDMARK_MENU_NAME);
722 // Defer init_landmark_menu() until inventory observer reports that we actually
723 // have inventory. Otherwise findCategoryByUUID() will create an empty
724 // Landmarks folder in inventory. JC
725 gMenuBarView->appendMenu( menu );
726 menu->updateParent(LLMenuGL::sMenuContainer);
727 gLandmarkMenu = menu;
728 */
729
659 menu = new LLMenuGL(CLIENT_MENU_NAME); 730 menu = new LLMenuGL(CLIENT_MENU_NAME);
660 init_client_menu(menu); 731 init_client_menu(menu);
661 gMenuBarView->appendMenu( menu ); 732 gMenuBarView->appendMenu( menu );
@@ -671,12 +742,74 @@ void init_menus()
671 // Let land based option enable when parcel changes 742 // Let land based option enable when parcel changes
672 gMenuParcelObserver = new LLMenuParcelObserver(); 743 gMenuParcelObserver = new LLMenuParcelObserver();
673 744
745 // Let landmarks menu update when landmarks are added/removed
746 gLandmarkObserver = new LLLandmarkObserver();
747
674 // 748 //
675 // Debug menu visiblity 749 // Debug menu visiblity
676 // 750 //
677 show_debug_menus(); 751 show_debug_menus();
678} 752}
679 753
754void init_landmark_menu(LLMenuGL* menu)
755{
756 if (!menu) return;
757
758 // clear existing menu, as we might be rebuilding as result of inventory update
759 clear_landmark_menu(menu);
760
761 menu->append(new LLMenuItemCallGL("Organize Landmarks",
762 &manage_landmarks, NULL));
763 menu->append(new LLMenuItemCallGL("New Landmark...",
764 &create_new_landmark, NULL));
765 menu->appendSeparator();
766
767 // now collect all landmarks in inventory and build menu...
768 LLInventoryModel::cat_array_t* cats;
769 LLInventoryModel::item_array_t* items;
770 gInventory.getDirectDescendentsOf(gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK), cats, items);
771 if(items)
772 {
773 S32 count = items->count();
774 for(S32 i = 0; i < count; ++i)
775 {
776 LLInventoryItem* item = items->get(i);
777 LLString landmark_name = item->getName();
778 LLUUID* landmark_id_ptr = new LLUUID( item->getUUID() );
779 LLMenuItemCallGL* menu_item =
780 new LLMenuItemCallGL(landmark_name, landmark_menu_action,
781 NULL, NULL, landmark_id_ptr);
782 menu->append(menu_item);
783 }
784 }
785}
786
787void clear_landmark_menu(LLMenuGL* menu)
788{
789 if (!menu) return;
790
791 // We store the UUIDs of the landmark inventory items in the userdata
792 // field of the menus. Therefore when we clean up the menu we need to
793 // delete that data.
794 const LLView::child_list_t* child_list = menu->getChildList();
795 LLView::child_list_const_iter_t it = child_list->begin();
796 for ( ; it != child_list->end(); ++it)
797 {
798 LLView* view = *it;
799 if (view->getWidgetType() == WIDGET_TYPE_MENU_ITEM_CALL)
800 {
801 LLMenuItemCallGL* menu_item = (LLMenuItemCallGL*)view;
802 if (menu_item->getMenuCallback() == landmark_menu_action)
803 {
804 void* user_data = menu_item->getUserData();
805 delete (LLUUID*)user_data;
806 }
807 }
808 }
809
810 menu->empty();
811}
812
680void init_client_menu(LLMenuGL* menu) 813void init_client_menu(LLMenuGL* menu)
681{ 814{
682 LLMenuGL* sub_menu = NULL; 815 LLMenuGL* sub_menu = NULL;
@@ -1010,7 +1143,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
1010 menu->append(new LLMenuItemCallGL( "Dump VolumeMgr", &dump_volume_mgr, NULL, NULL)); 1143 menu->append(new LLMenuItemCallGL( "Dump VolumeMgr", &dump_volume_mgr, NULL, NULL));
1011 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1144 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
1012 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1145 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
1013 menu->append(new LLMenuItemCallGL( "Print Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1146 menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
1014 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 1147 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
1015 menu_toggle_control, NULL, menu_check_control, 1148 menu_toggle_control, NULL, menu_check_control,
1016 (void*)"DoubleClickAutoPilot")); 1149 (void*)"DoubleClickAutoPilot"));
@@ -1456,9 +1589,14 @@ static std::vector<LLPointer<view_listener_t> > sMenus;
1456//----------------------------------------------------------------------------- 1589//-----------------------------------------------------------------------------
1457void cleanup_menus() 1590void cleanup_menus()
1458{ 1591{
1592 clear_landmark_menu(gLandmarkMenu);
1593
1459 delete gMenuParcelObserver; 1594 delete gMenuParcelObserver;
1460 gMenuParcelObserver = NULL; 1595 gMenuParcelObserver = NULL;
1461 1596
1597 delete gLandmarkObserver;
1598 gLandmarkObserver = NULL;
1599
1462 delete gPieSelf; 1600 delete gPieSelf;
1463 gPieSelf = NULL; 1601 gPieSelf = NULL;
1464 1602
@@ -2860,6 +2998,60 @@ void handle_audio_status_4(void*)
2860} 2998}
2861#endif 2999#endif
2862 3000
3001void manage_landmarks(void*)
3002{
3003 LLFloaterLandmark::showInstance(1);
3004}
3005
3006void create_new_landmark(void*)
3007{
3008 // Note this is temporary cut and paste of legacy functionality.
3009 // TODO: Make this spawn a floater allowing user customize before creating the inventory object
3010
3011 LLViewerRegion* agent_region = gAgent.getRegion();
3012 if(!agent_region)
3013 {
3014 llwarns << "No agent region" << llendl;
3015 return;
3016 }
3017 LLParcel* agent_parcel = gParcelMgr->getAgentParcel();
3018 if (!agent_parcel)
3019 {
3020 llwarns << "No agent parcel" << llendl;
3021 return;
3022 }
3023 if (!agent_parcel->getAllowLandmark()
3024 && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK))
3025 {
3026 gViewerWindow->alertXml("CannotCreateLandmarkNotOwner");
3027 return;
3028 }
3029
3030 LLUUID folder_id;
3031 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
3032 std::string pos_string;
3033 gAgent.buildLocationString(pos_string);
3034
3035 create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
3036 folder_id, LLTransactionID::tnull,
3037 pos_string, pos_string, // name, desc
3038 LLAssetType::AT_LANDMARK,
3039 LLInventoryType::IT_LANDMARK,
3040 NOT_WEARABLE, PERM_ALL,
3041 NULL);
3042}
3043
3044void landmark_menu_action(void* userdata)
3045{
3046 LLUUID item_id = *(LLUUID*)userdata;
3047
3048 LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
3049 if (itemp)
3050 {
3051 open_landmark(itemp, itemp->getName(), FALSE);
3052 }
3053}
3054
2863void reload_ui(void *) 3055void reload_ui(void *)
2864{ 3056{
2865 gUICtrlFactory->rebuild(); 3057 gUICtrlFactory->rebuild();
@@ -5160,7 +5352,7 @@ class LLShowFloater : public view_listener_t
5160 else if (floater_name == "help f1") 5352 else if (floater_name == "help f1")
5161 { 5353 {
5162#if LL_LIBXUL_ENABLED 5354#if LL_LIBXUL_ENABLED
5163 gViewerHtmlHelp.show(); 5355 gViewerHtmlHelp.show( gSavedSettings.getString("HelpHomeURL") );
5164#endif 5356#endif
5165 } 5357 }
5166 else if (floater_name == "help in-world") 5358 else if (floater_name == "help in-world")
@@ -5363,7 +5555,7 @@ class LLShowAgentProfile : public view_listener_t
5363 LLVOAvatar* avatar = find_avatar_from_object(agent_id); 5555 LLVOAvatar* avatar = find_avatar_from_object(agent_id);
5364 if (avatar) 5556 if (avatar)
5365 { 5557 {
5366 LLFloaterAvatarInfo::showFromAvatar(avatar); 5558 LLFloaterAvatarInfo::show(agent_id);
5367 } 5559 }
5368 return true; 5560 return true;
5369 } 5561 }
@@ -6080,18 +6272,11 @@ void handle_test_female(void*)
6080 6272
6081void handle_toggle_pg(void*) 6273void handle_toggle_pg(void*)
6082{ 6274{
6083 if (gAgent.mAccess < SIM_ACCESS_MATURE) 6275 gAgent.setTeen( !gAgent.isTeen() );
6084 {
6085 gAgent.mAccess = SIM_ACCESS_MATURE;
6086 }
6087 else
6088 {
6089 gAgent.mAccess = SIM_ACCESS_PG;
6090 }
6091 6276
6092 LLFloaterWorldMap::reloadIcons(NULL); 6277 LLFloaterWorldMap::reloadIcons(NULL);
6093 6278
6094 llinfos << "Access set to " << (S32)gAgent.mAccess << llendl; 6279 llinfos << "PG status set to " << (S32)gAgent.isTeen() << llendl;
6095} 6280}
6096 6281
6097void handle_dump_attachments(void*) 6282void handle_dump_attachments(void*)
diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp
index f0e8132..d5fc9fa 100644
--- a/linden/indra/newview/llviewerparcelmgr.cpp
+++ b/linden/indra/newview/llviewerparcelmgr.cpp
@@ -51,7 +51,7 @@
51#include "llfirstuse.h" 51#include "llfirstuse.h"
52#include "llfloaterbuyland.h" 52#include "llfloaterbuyland.h"
53#include "llfloatergroups.h" 53#include "llfloatergroups.h"
54#include "llfloaterhtml.h" 54//#include "llfloaterhtml.h"
55#include "llfloatersellland.h" 55#include "llfloatersellland.h"
56#include "llfloatertools.h" 56#include "llfloatertools.h"
57#include "llnotify.h" 57#include "llnotify.h"
diff --git a/linden/indra/newview/llviewerparcelmgr.h b/linden/indra/newview/llviewerparcelmgr.h
index 58a7067..2dd4f28 100644
--- a/linden/indra/newview/llviewerparcelmgr.h
+++ b/linden/indra/newview/llviewerparcelmgr.h
@@ -130,6 +130,7 @@ public:
130 F32 getSelectionHeight() const { return F32(mEastNorth.mdV[VY] - mWestSouth.mdV[VY]); } 130 F32 getSelectionHeight() const { return F32(mEastNorth.mdV[VY] - mWestSouth.mdV[VY]); }
131 BOOL getSelection(LLVector3d &min, LLVector3d &max) { min = mWestSouth; max = mEastNorth; return !selectionEmpty();} 131 BOOL getSelection(LLVector3d &min, LLVector3d &max) { min = mWestSouth; max = mEastNorth; return !selectionEmpty();}
132 LLViewerRegion* getSelectionRegion(); 132 LLViewerRegion* getSelectionRegion();
133 F32 getDwelling() const { return mSelectedDwell;}
133 134
134 void getDisplayInfo(S32* area, S32* claim, S32* rent, BOOL* for_sale, F32* dwell); 135 void getDisplayInfo(S32* area, S32* claim, S32* rent, BOOL* for_sale, F32* dwell);
135 136
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 0a8d9a8..643df1e 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -696,7 +696,10 @@ void LLViewerRegion::calculateCameraDistance()
696 mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared(); 696 mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
697} 697}
698 698
699// ---------------- Friends ---------------- 699U32 LLViewerRegion::getNetDetailsForLCD()
700{
701 return mPingDelay;
702}
700 703
701std::ostream& operator<<(std::ostream &s, const LLViewerRegion &region) 704std::ostream& operator<<(std::ostream &s, const LLViewerRegion &region)
702{ 705{
@@ -868,7 +871,7 @@ public:
868 871
869 for(int i=0; 872 for(int i=0;
870 locs_it != locs.endArray(); 873 locs_it != locs.endArray();
871 i++, locs_it++, agents_it++) 874 i++, locs_it++)
872 { 875 {
873 U8 876 U8
874 x = locs_it->get("X").asInteger(), 877 x = locs_it->get("X").asInteger(),
@@ -901,6 +904,10 @@ public:
901 avatar_ids->put(agent_id); 904 avatar_ids->put(agent_id);
902 } 905 }
903 } 906 }
907 if (has_agent_data)
908 {
909 agents_it++;
910 }
904 } 911 }
905 } 912 }
906}; 913};
@@ -1342,30 +1349,35 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
1342 setCapability("Seed", url); 1349 setCapability("Seed", url);
1343 1350
1344 LLSD capabilityNames = LLSD::emptyArray(); 1351 LLSD capabilityNames = LLSD::emptyArray();
1352 capabilityNames.append("ChatSessionRequest");
1353 capabilityNames.append("CopyInventoryFromNotecard");
1354 capabilityNames.append("DispatchRegionInfo");
1355 capabilityNames.append("EventQueueGet");
1345 capabilityNames.append("MapLayer"); 1356 capabilityNames.append("MapLayer");
1346 capabilityNames.append("MapLayerGod"); 1357 capabilityNames.append("MapLayerGod");
1347 capabilityNames.append("NewFileAgentInventory"); 1358 capabilityNames.append("NewFileAgentInventory");
1348 capabilityNames.append("EventQueueGet"); 1359 capabilityNames.append("ParcelGodReserveForNewbie");
1360 capabilityNames.append("ParcelVoiceInfoRequest");
1361 capabilityNames.append("ProvisionVoiceAccountRequest");
1362 capabilityNames.append("RemoteParcelRequest");
1363 capabilityNames.append("RequestTextureDownload");
1364 capabilityNames.append("SearchStatRequest");
1365 capabilityNames.append("SearchStatTracking");
1366 capabilityNames.append("SendPostcard");
1367 capabilityNames.append("SendUserReport");
1368 capabilityNames.append("SendUserReportWithScreenshot");
1369 capabilityNames.append("ServerReleaseNotes");
1349 capabilityNames.append("UpdateGestureAgentInventory"); 1370 capabilityNames.append("UpdateGestureAgentInventory");
1350 capabilityNames.append("UpdateNotecardAgentInventory"); 1371 capabilityNames.append("UpdateNotecardAgentInventory");
1351 capabilityNames.append("UpdateScriptAgentInventory"); 1372 capabilityNames.append("UpdateScriptAgentInventory");
1352 capabilityNames.append("UpdateGestureTaskInventory"); 1373 capabilityNames.append("UpdateGestureTaskInventory");
1353 capabilityNames.append("UpdateNotecardTaskInventory"); 1374 capabilityNames.append("UpdateNotecardTaskInventory");
1354 capabilityNames.append("UpdateScriptTaskInventory"); 1375 capabilityNames.append("UpdateScriptTaskInventory");
1355 capabilityNames.append("SendPostcard");
1356 capabilityNames.append("ViewerStartAuction"); 1376 capabilityNames.append("ViewerStartAuction");
1357 capabilityNames.append("ParcelGodReserveForNewbie");
1358 capabilityNames.append("SendUserReport");
1359 capabilityNames.append("SendUserReportWithScreenshot");
1360 capabilityNames.append("RequestTextureDownload");
1361 capabilityNames.append("UntrustedSimulatorMessage"); 1377 capabilityNames.append("UntrustedSimulatorMessage");
1362 capabilityNames.append("ParcelVoiceInfoRequest");
1363 capabilityNames.append("ChatSessionRequest");
1364 capabilityNames.append("ViewerStats"); 1378 capabilityNames.append("ViewerStats");
1365 capabilityNames.append("ProvisionVoiceAccountRequest"); 1379 // Please add new capabilities alphabetically to reduce
1366 capabilityNames.append("ServerReleaseNotes"); 1380 // merge conflicts.
1367 capabilityNames.append("CopyInventoryFromNotecard");
1368 capabilityNames.append("DispatchRegionInfo");
1369 1381
1370 llinfos << "posting to seed " << url << llendl; 1382 llinfos << "posting to seed " << url << llendl;
1371 1383
diff --git a/linden/indra/newview/llviewerregion.h b/linden/indra/newview/llviewerregion.h
index d759361..013a96f 100644
--- a/linden/indra/newview/llviewerregion.h
+++ b/linden/indra/newview/llviewerregion.h
@@ -240,6 +240,9 @@ public:
240 240
241 friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion &region); 241 friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion &region);
242 242
243 // used by LCD to get details for debug screen
244 U32 getNetDetailsForLCD();
245
243public: 246public:
244 struct CompareDistance 247 struct CompareDistance
245 { 248 {
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index da75de6..96f52a1 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -176,7 +176,11 @@ const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
176 // ST_TEX_BAKES 176 // ST_TEX_BAKES
177 StatAttributes("Texture Bakes", FALSE, FALSE), 177 StatAttributes("Texture Bakes", FALSE, FALSE),
178 // ST_TEX_REBAKES 178 // ST_TEX_REBAKES
179 StatAttributes("Texture Rebakes", FALSE, FALSE) 179 StatAttributes("Texture Rebakes", FALSE, FALSE),
180
181 // ST_LOGITECH_KEYBOARD
182 StatAttributes("Logitech LCD", FALSE, FALSE)
183
180}; 184};
181 185
182LLViewerStats::LLViewerStats() 186LLViewerStats::LLViewerStats()
diff --git a/linden/indra/newview/llviewerstats.h b/linden/indra/newview/llviewerstats.h
index 9e42f29..3c959a5 100644
--- a/linden/indra/newview/llviewerstats.h
+++ b/linden/indra/newview/llviewerstats.h
@@ -160,8 +160,9 @@ public:
160 ST_WINDOW_HEIGHT = 55, 160 ST_WINDOW_HEIGHT = 55,
161 ST_TEX_BAKES = 56, 161 ST_TEX_BAKES = 56,
162 ST_TEX_REBAKES = 57, 162 ST_TEX_REBAKES = 57,
163 ST_LOGITECH_LCD = 58,
163 164
164 ST_COUNT = 58 165 ST_COUNT = 59
165 }; 166 };
166 167
167 168
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 2c382cb..1e75e42 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -53,8 +53,10 @@
53#include "llviewerimagelist.h" 53#include "llviewerimagelist.h"
54#include "llviewerwindow.h" 54#include "llviewerwindow.h"
55#include "llviewerinventory.h" 55#include "llviewerinventory.h"
56#include "llvieweruictrlfactory.h"
56#include "llnotecard.h" 57#include "llnotecard.h"
57#include "llmemorystream.h" 58#include "llmemorystream.h"
59#include "llmenugl.h"
58 60
59extern BOOL gPacificDaylightTime; 61extern BOOL gPacificDaylightTime;
60 62
@@ -567,6 +569,18 @@ LLViewerTextEditor::LLViewerTextEditor(const LLString& name,
567{ 569{
568 mEmbeddedItemList = new LLEmbeddedItems(this); 570 mEmbeddedItemList = new LLEmbeddedItems(this);
569 mInventoryCallback->setEditor(this); 571 mInventoryCallback->setEditor(this);
572
573 // Build the right click menu
574 // make the popup menu available
575
576 LLMenuGL* menu = gUICtrlFactory->buildMenu("menu_slurl.xml", this);
577 if (!menu)
578 {
579 menu = new LLMenuGL("");
580 }
581 menu->setBackgroundColor(gColors.getColor("MenuPopupBgColor"));
582 // menu->setVisible(FALSE);
583 mPopupMenuHandle = menu->mViewHandle;
570} 584}
571 585
572LLViewerTextEditor::~LLViewerTextEditor() 586LLViewerTextEditor::~LLViewerTextEditor()
@@ -732,6 +746,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
732 } 746 }
733 // assume we're starting a drag select 747 // assume we're starting a drag select
734 mIsSelecting = TRUE; 748 mIsSelecting = TRUE;
749
735 } 750 }
736 else 751 else
737 { 752 {
@@ -941,6 +956,42 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
941 return handled; 956 return handled;
942} 957}
943 958
959BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
960{
961
962
963 BOOL handled = childrenHandleRightMouseDown(x, y, mask) != NULL;
964
965 if(! handled)
966 {
967 LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
968 if( cur_segment )
969 {
970 if(cur_segment->getStyle().isLink())
971 {
972 handled = TRUE;
973 mHTML = cur_segment->getStyle().getLinkHREF();
974 }
975 }
976 }
977 LLMenuGL* menu = (LLMenuGL*)LLView::getViewByHandle(mPopupMenuHandle);
978 if(handled && menu && mParseHTML && mHTML.length() > 0)
979 {
980 menu->setVisible(TRUE);
981 menu->arrange();
982 menu->updateParent(LLMenuGL::sMenuContainer);
983 LLMenuGL::showPopup(this, menu, x, y);
984 mHTML = "";
985 }
986 else
987 {
988 if(menu && menu->getVisible())
989 {
990 menu->setVisible(FALSE);
991 }
992 }
993 return handled;
994}
944 995
945BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask) 996BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
946{ 997{
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h
index e05a61c..1ec173a 100644
--- a/linden/indra/newview/llviewertexteditor.h
+++ b/linden/indra/newview/llviewertexteditor.h
@@ -63,6 +63,7 @@ public:
63 // mousehandler overrides 63 // mousehandler overrides
64 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 64 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
65 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 65 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
66 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
66 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 67 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
67 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); 68 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask );
68 69
@@ -128,6 +129,8 @@ protected:
128 LLUUID mNotecardInventoryID; 129 LLUUID mNotecardInventoryID;
129 130
130 LLPointer<LLEmbeddedNotecardOpener> mInventoryCallback; 131 LLPointer<LLEmbeddedNotecardOpener> mInventoryCallback;
132
133 LLViewHandle mPopupMenuHandle;
131}; 134};
132 135
133#endif // LL_VIEWERTEXTEDITOR_H 136#endif // LL_VIEWERTEXTEDITOR_H
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 49abf13..7aaf9c0 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -32,9 +32,15 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llviewerwindow.h" 34#include "llviewerwindow.h"
35
36// system library includes
37#include <stdio.h>
38#include <iostream>
39#include <fstream>
40
35#include "llviewquery.h" 41#include "llviewquery.h"
36#include "llxmltree.h" 42#include "llxmltree.h"
37#include "llviewercamera.h" 43//#include "llviewercamera.h"
38//#include "imdebug.h" 44//#include "imdebug.h"
39 45
40#include "llvoiceclient.h" // for push-to-talk button handling 46#include "llvoiceclient.h" // for push-to-talk button handling
@@ -1823,6 +1829,8 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window)
1823 adjust_rect_top_left("FloaterGestureRect", window); 1829 adjust_rect_top_left("FloaterGestureRect", window);
1824 1830
1825 adjust_rect_top_right("FloaterMapRect", window); 1831 adjust_rect_top_right("FloaterMapRect", window);
1832
1833 adjust_rect_top_right("FloaterLagMeter", window);
1826 1834
1827 adjust_rect_top_right("FloaterLagMeter", window); 1835 adjust_rect_top_right("FloaterLagMeter", window);
1828 1836
@@ -2925,6 +2933,10 @@ BOOL LLViewerWindow::handlePerFrameHover()
2925 { 2933 {
2926 gFloaterTools->setVisible(FALSE); 2934 gFloaterTools->setVisible(FALSE);
2927 } 2935 }
2936 // In the future we may wish to hide the tools menu unless you
2937 // are building. JC
2938 //gMenuBarView->setItemVisible("Tools", gFloaterTools->getVisible());
2939 //gMenuBarView->arrange();
2928 } 2940 }
2929 if (gToolBar) 2941 if (gToolBar)
2930 { 2942 {
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 41873c7..4905ff8 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -271,6 +271,7 @@ LLUUID LLVOAvatar::sStepSounds[LL_MCODE_END] =
271}; 271};
272 272
273S32 LLVOAvatar::sRenderName = RENDER_NAME_ALWAYS; 273S32 LLVOAvatar::sRenderName = RENDER_NAME_ALWAYS;
274BOOL LLVOAvatar::sRenderGroupTitles = TRUE;
274S32 LLVOAvatar::sNumVisibleChatBubbles = 0; 275S32 LLVOAvatar::sNumVisibleChatBubbles = 0;
275BOOL LLVOAvatar::sDebugInvisible = FALSE; 276BOOL LLVOAvatar::sDebugInvisible = FALSE;
276BOOL LLVOAvatar::sShowAttachmentPoints = FALSE; 277BOOL LLVOAvatar::sShowAttachmentPoints = FALSE;
@@ -2704,7 +2705,15 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2704 || is_appearance != mNameAppearance) 2705 || is_appearance != mNameAppearance)
2705 { 2706 {
2706 char line[MAX_STRING]; /* Flawfinder: ignore */ 2707 char line[MAX_STRING]; /* Flawfinder: ignore */
2707 if (title && title->getString() && title->getString()[0] != '\0') 2708 if (!sRenderGroupTitles)
2709 {
2710 // If all group titles are turned off, stack first name
2711 // on a line above last name
2712 strncpy(line, firstname->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */
2713 line[MAX_STRING -1] = '\0';
2714 strcat(line, "\n");
2715 }
2716 else if (title && title->getString() && title->getString()[0] != '\0')
2708 { 2717 {
2709 strncpy(line, title->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */ 2718 strncpy(line, title->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */
2710 line[MAX_STRING -1] = '\0'; 2719 line[MAX_STRING -1] = '\0';
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index 18f69a0..7ef9aee 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -831,6 +831,7 @@ public:
831 static LLUUID sStepSoundOnLand; 831 static LLUUID sStepSoundOnLand;
832 832
833 static S32 sRenderName; 833 static S32 sRenderName;
834 static BOOL sRenderGroupTitles;
834 static S32 sNumVisibleChatBubbles; 835 static S32 sNumVisibleChatBubbles;
835 static BOOL sDebugInvisible; 836 static BOOL sDebugInvisible;
836 static BOOL sShowAttachmentPoints; 837 static BOOL sShowAttachmentPoints;
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 3a74f16..f6f7ce7 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -3954,8 +3954,10 @@ void LLVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::EStatusTy
3954 { 3954 {
3955 switch(mVivoxErrorStatusCode) 3955 switch(mVivoxErrorStatusCode)
3956 { 3956 {
3957 case 20713: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_FULL; break; 3957 case 20713: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_FULL; break;
3958 case 20714: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_LOCKED; break; 3958 case 20714: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_LOCKED; break;
3959 case 20715: status = LLVoiceClientStatusObserver::ERROR_NOT_AVAILABLE;
3960 break;
3959 } 3961 }
3960 3962
3961 // Reset the error code to make sure it won't be reused later by accident. 3963 // Reset the error code to make sure it won't be reused later by accident.
diff --git a/linden/indra/newview/llweb.cpp b/linden/indra/newview/llweb.cpp
index f908cd2..7ee4869 100644
--- a/linden/indra/newview/llweb.cpp
+++ b/linden/indra/newview/llweb.cpp
@@ -36,7 +36,7 @@
36 36
37#include "llwindow.h" 37#include "llwindow.h"
38 38
39#include "llfloaterhtml.h" 39//#include "llfloaterhtml.h"
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
41 41
42// static 42// static
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 5de0d43..ca03f48 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -34,14 +34,18 @@
34#if LL_LIBXUL_ENABLED 34#if LL_LIBXUL_ENABLED
35 35
36#include "llwebbrowserctrl.h" 36#include "llwebbrowserctrl.h"
37#include "llviewborder.h" 37
38#include "llviewerwindow.h" 38// viewer includes
39#include "llfloaterworldmap.h" 39#include "llfloaterworldmap.h"
40#include "llurldispatcher.h" 40#include "llurldispatcher.h"
41#include "llfocusmgr.h" 41#include "llviewborder.h"
42#include "llviewerwindow.h"
43#include "llfloaterhtml.h"
42#include "llweb.h" 44#include "llweb.h"
43#include "viewer.h" 45#include "viewer.h"
44#include "llpanellogin.h" 46
47// linden library includes
48#include "llfocusmgr.h"
45 49
46// Setting the mozilla buffer width to 2048 exactly doesn't work, since it pads its rowbytes a bit, pushing the texture width over 2048. 50// Setting the mozilla buffer width to 2048 exactly doesn't work, since it pads its rowbytes a bit, pushing the texture width over 2048.
47// 2000 should give enough headroom for any amount of padding it cares to add. 51// 2000 should give enough headroom for any amount of padding it cares to add.
@@ -55,7 +59,9 @@ LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect
55 mBorder(NULL), 59 mBorder(NULL),
56 mFrequentUpdates( true ), 60 mFrequentUpdates( true ),
57 mOpenLinksInExternalBrowser( false ), 61 mOpenLinksInExternalBrowser( false ),
58 mOpenSecondLifeLinksInMap( true ), 62 mOpenLinksInInternalBrowser( false ),
63 mOpenSLURLsInMap( true ),
64 mOpenSLURLsViaTeleport( false ),
59 mHomePageUrl( "" ), 65 mHomePageUrl( "" ),
60 mIgnoreUIScale( true ), 66 mIgnoreUIScale( true ),
61 mAlwaysRefresh( false ) 67 mAlwaysRefresh( false )
@@ -132,17 +138,31 @@ void LLWebBrowserCtrl::setBorderVisible( BOOL border_visible )
132}; 138};
133 139
134//////////////////////////////////////////////////////////////////////////////// 140////////////////////////////////////////////////////////////////////////////////
135// allows access to the raw web browser window by consumers of this class 141// set flag that forces the embedded browser to open links in the external system browser
136void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn ) 142void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn )
137{ 143{
138 mOpenLinksInExternalBrowser = valIn; 144 mOpenLinksInExternalBrowser = valIn;
139}; 145};
140 146
141//////////////////////////////////////////////////////////////////////////////// 147////////////////////////////////////////////////////////////////////////////////
148// set flag that forces the embedded browser to open links in the internal browser floater
149void LLWebBrowserCtrl::setOpenInInternalBrowser( bool valIn )
150{
151 mOpenLinksInInternalBrowser = valIn;
152};
153
154////////////////////////////////////////////////////////////////////////////////
142// open secondlife:// links in map automatically or not 155// open secondlife:// links in map automatically or not
143void LLWebBrowserCtrl::setOpenSecondLifeLinksInMap( bool valIn ) 156void LLWebBrowserCtrl::setOpenSLURLsInMap( bool valIn )
144{ 157{
145 mOpenSecondLifeLinksInMap = valIn; 158 mOpenSLURLsInMap = valIn;
159};
160
161////////////////////////////////////////////////////////////////////////////////
162// teleport directly to secondlife:// links
163void LLWebBrowserCtrl::setOpenSLURLsViaTeleport( bool valIn )
164{
165 mOpenSLURLsViaTeleport = valIn;
146}; 166};
147 167
148//////////////////////////////////////////////////////////////////////////////// 168////////////////////////////////////////////////////////////////////////////////
@@ -345,6 +365,7 @@ bool LLWebBrowserCtrl::canNavigateForward()
345void LLWebBrowserCtrl::navigateTo( std::string urlIn ) 365void LLWebBrowserCtrl::navigateTo( std::string urlIn )
346{ 366{
347 const std::string protocol( "secondlife://" ); 367 const std::string protocol( "secondlife://" );
368 const std::string protocol2( "sl://" );
348 369
349 // don't browse to anything that starts with secondlife:// 370 // don't browse to anything that starts with secondlife://
350 if ( urlIn.length() >= protocol.length() ) 371 if ( urlIn.length() >= protocol.length() )
@@ -354,6 +375,13 @@ void LLWebBrowserCtrl::navigateTo( std::string urlIn )
354 LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn ); 375 LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
355 } 376 }
356 } 377 }
378 else if ( urlIn.length() >= protocol2.length() )
379 {
380 if ( LLString::compareInsensitive( urlIn.substr( 0, protocol2.length() ).c_str(), protocol2.c_str() ) != 0 )
381 {
382 LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
383 }
384 }
357 else 385 else
358 { 386 {
359 LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn ); 387 LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
@@ -512,9 +540,26 @@ void LLWebBrowserCtrl::onClickLinkHref( const EventType& eventIn )
512 const std::string protocol( "http://" ); 540 const std::string protocol( "http://" );
513 541
514 if( mOpenLinksInExternalBrowser ) 542 if( mOpenLinksInExternalBrowser )
543 {
515 if ( eventIn.getStringValue().length() ) 544 if ( eventIn.getStringValue().length() )
545 {
516 if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 ) 546 if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
547 {
517 LLWeb::loadURL( eventIn.getStringValue() ); 548 LLWeb::loadURL( eventIn.getStringValue() );
549 };
550 };
551 }
552 else
553 if( mOpenLinksInInternalBrowser )
554 {
555 if ( eventIn.getStringValue().length() )
556 {
557 if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
558 {
559 LLFloaterHtml::getInstance()->show( eventIn.getStringValue(), "Second Life Browser");
560 };
561 };
562 };
518 563
519 // chain this event on to observers of an instance of LLWebBrowserCtrl 564 // chain this event on to observers of an instance of LLWebBrowserCtrl
520 LLWebBrowserCtrlEvent event( eventIn.getStringValue() ); 565 LLWebBrowserCtrlEvent event( eventIn.getStringValue() );
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index 892345a..ec3ddfd 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -191,7 +191,9 @@ class LLWebBrowserCtrl :
191 bool canNavigateBack(); 191 bool canNavigateBack();
192 bool canNavigateForward(); 192 bool canNavigateForward();
193 void setOpenInExternalBrowser( bool valIn ); 193 void setOpenInExternalBrowser( bool valIn );
194 void setOpenSecondLifeLinksInMap( bool valIn ); 194 void setOpenInInternalBrowser( bool valIn );
195 void setOpenSLURLsInMap( bool valIn );
196 void setOpenSLURLsViaTeleport( bool valIn );
195 void setHomePageUrl( const std::string urlIn ); 197 void setHomePageUrl( const std::string urlIn );
196 std::string getHomePageUrl(); 198 std::string getHomePageUrl();
197 199
@@ -240,7 +242,9 @@ class LLWebBrowserCtrl :
240 LLViewBorder* mBorder; 242 LLViewBorder* mBorder;
241 bool mFrequentUpdates; 243 bool mFrequentUpdates;
242 bool mOpenLinksInExternalBrowser; 244 bool mOpenLinksInExternalBrowser;
243 bool mOpenSecondLifeLinksInMap; 245 bool mOpenLinksInInternalBrowser;
246 bool mOpenSLURLsInMap;
247 bool mOpenSLURLsViaTeleport;
244 std::string mHomePageUrl; 248 std::string mHomePageUrl;
245 bool mIgnoreUIScale; 249 bool mIgnoreUIScale;
246 bool mAlwaysRefresh; 250 bool mAlwaysRefresh;
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 16a8be7..6ba10ea 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -106,7 +106,11 @@ LLWorldMap::LLWorldMap() :
106 mNeighborMap(NULL), 106 mNeighborMap(NULL),
107 mTelehubCoverageMap(NULL), 107 mTelehubCoverageMap(NULL),
108 mNeighborMapWidth(0), 108 mNeighborMapWidth(0),
109 mNeighborMapHeight(0) 109 mNeighborMapHeight(0),
110 mSLURLRegionName(),
111 mSLURL(),
112 mSLURLCallback(0),
113 mSLURLTeleport(false)
110{ 114{
111 for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map) 115 for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
112 { 116 {
@@ -398,6 +402,19 @@ void LLWorldMap::sendNamedRegionRequest(std::string region_name)
398 msg->addStringFast(_PREHASH_Name, region_name); 402 msg->addStringFast(_PREHASH_Name, region_name);
399 gAgent.sendReliableMessage(); 403 gAgent.sendReliableMessage();
400} 404}
405// public
406void LLWorldMap::sendNamedRegionRequest(std::string region_name,
407 url_callback_t callback,
408 const std::string& callback_url,
409 bool teleport) // immediately teleport when result returned
410{
411 mSLURLRegionName = region_name;
412 mSLURL = callback_url;
413 mSLURLCallback = callback;
414 mSLURLTeleport = teleport;
415
416 sendNamedRegionRequest(region_name);
417}
401 418
402// public 419// public
403void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) 420void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
@@ -532,6 +549,8 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
532 U32 x_meters = x_regions * REGION_WIDTH_UNITS; 549 U32 x_meters = x_regions * REGION_WIDTH_UNITS;
533 U32 y_meters = y_regions * REGION_WIDTH_UNITS; 550 U32 y_meters = y_regions * REGION_WIDTH_UNITS;
534 551
552 U64 handle = to_region_handle(x_meters, y_meters);
553
535 if (access == 255) 554 if (access == 255)
536 { 555 {
537 // This region doesn't exist 556 // This region doesn't exist
@@ -547,13 +566,23 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
547 566
548 found_null_sim = true; 567 found_null_sim = true;
549 } 568 }
569 else if(gWorldMap->mSLURLCallback != NULL)
570 {
571 // Server returns definitive capitalization, SLURL might
572 // not have that.
573 if (!stricmp(gWorldMap->mSLURLRegionName.c_str(), name))
574 {
575 gWorldMap->mSLURLCallback(handle, gWorldMap->mSLURL, image_id, gWorldMap->mSLURLTeleport);
576 gWorldMap->mSLURLCallback = NULL;
577 gWorldMap->mSLURLRegionName.clear();
578 }
579 }
550 else 580 else
551 { 581 {
552 adjust = gWorldMap->extendAABB(x_meters, 582 adjust = gWorldMap->extendAABB(x_meters,
553 y_meters, 583 y_meters,
554 x_meters+REGION_WIDTH_UNITS, 584 x_meters+REGION_WIDTH_UNITS,
555 y_meters+REGION_WIDTH_UNITS) || adjust; 585 y_meters+REGION_WIDTH_UNITS) || adjust;
556 U64 handle = to_region_handle(x_meters, y_meters);
557 586
558// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl; 587// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
559 588
@@ -614,6 +643,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
614 } 643 }
615 } 644 }
616 } 645 }
646
617 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); 647 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
618 gFloaterWorldMap->updateSims(found_null_sim); 648 gFloaterWorldMap->updateSims(found_null_sim);
619} 649}
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index 5b2b977..b0c6f35 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -113,6 +113,8 @@ struct LLWorldMapLayer
113class LLWorldMap 113class LLWorldMap
114{ 114{
115public: 115public:
116 typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
117
116 LLWorldMap(); 118 LLWorldMap();
117 ~LLWorldMap(); 119 ~LLWorldMap();
118 120
@@ -147,6 +149,10 @@ public:
147 void sendMapLayerRequest(); 149 void sendMapLayerRequest();
148 void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false); 150 void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
149 void sendNamedRegionRequest(std::string region_name); 151 void sendNamedRegionRequest(std::string region_name);
152 void sendNamedRegionRequest(std::string region_name,
153 url_callback_t callback,
154 const std::string& callback_url,
155 bool teleport);
150 void sendItemRequest(U32 type, U64 handle = 0); 156 void sendItemRequest(U32 type, U64 handle = 0);
151 157
152 static void processMapLayerReply(LLMessageSystem*, void**); 158 static void processMapLayerReply(LLMessageSystem*, void**);
@@ -208,6 +214,12 @@ public:
208 214
209private: 215private:
210 LLTimer mRequestTimer; 216 LLTimer mRequestTimer;
217
218 // search for named region for url processing
219 std::string mSLURLRegionName;
220 std::string mSLURL;
221 url_callback_t mSLURLCallback;
222 bool mSLURLTeleport;
211}; 223};
212 224
213extern LLWorldMap* gWorldMap; 225extern LLWorldMap* gWorldMap;
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 48f1aac..dc68910 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -621,7 +621,9 @@ void LLWorldMapView::draw()
621 } 621 }
622 622
623 // If this is mature, and you are not, draw a line across it 623 // If this is mature, and you are not, draw a line across it
624 if (info->mAccess != SIM_ACCESS_DOWN && info->mAccess > gAgent.mAccess) 624 if (info->mAccess != SIM_ACCESS_DOWN
625 && info->mAccess > SIM_ACCESS_PG
626 && gAgent.isTeen())
625 { 627 {
626 glBlendFunc(GL_DST_ALPHA, GL_ZERO); 628 glBlendFunc(GL_DST_ALPHA, GL_ZERO);
627 629
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index 4292995..549eb11 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -53,6 +53,10 @@
53 1A97C4560B8BCF9C00331A24 /* llliveappconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A97C4540B8BCF9C00331A24 /* llliveappconfig.cpp */; }; 53 1A97C4560B8BCF9C00331A24 /* llliveappconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A97C4540B8BCF9C00331A24 /* llliveappconfig.cpp */; };
54 1A9897E90B98E2F4005C45D7 /* llbase32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9897E80B98E2F4005C45D7 /* llbase32.cpp */; }; 54 1A9897E90B98E2F4005C45D7 /* llbase32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9897E80B98E2F4005C45D7 /* llbase32.cpp */; };
55 1A9EC237083EA0100023D510 /* llfloatereditui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */; }; 55 1A9EC237083EA0100023D510 /* llfloatereditui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */; };
56 1AA2EE9E0CBBE2790017E185 /* llfloaterlandmark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */; };
57 1AA2EEA10CBBE28C0017E185 /* llclassifiedstatsresponder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */; };
58 1AA2EEA40CBBE2BF0017E185 /* llfloaterurldisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */; };
59 1AA2EEA70CBBE2D40017E185 /* llremoteparcelrequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */; };
56 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */; }; 60 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */; };
57 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */; }; 61 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */; };
58 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; }; 62 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; };
@@ -707,6 +711,10 @@
707 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; }; 711 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; };
708 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; }; 712 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; };
709 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; }; 713 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; };
714 FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */; };
715 FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */; };
716 FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */; };
717 FE51387D0CD80BAE00F32EE3 /* llfloaterparcel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */; };
710/* End PBXBuildFile section */ 718/* End PBXBuildFile section */
711 719
712/* Begin PBXBuildRule section */ 720/* Begin PBXBuildRule section */
@@ -901,6 +909,14 @@
901 1A9897E80B98E2F4005C45D7 /* llbase32.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase32.cpp; sourceTree = "<group>"; }; 909 1A9897E80B98E2F4005C45D7 /* llbase32.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase32.cpp; sourceTree = "<group>"; };
902 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatereditui.cpp; sourceTree = "<group>"; }; 910 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatereditui.cpp; sourceTree = "<group>"; };
903 1A9EC23A083EA01F0023D510 /* llfloatereditui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatereditui.h; sourceTree = "<group>"; }; 911 1A9EC23A083EA01F0023D510 /* llfloatereditui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatereditui.h; sourceTree = "<group>"; };
912 1AA2EE9C0CBBE2790017E185 /* llfloaterlandmark.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterlandmark.h; sourceTree = "<group>"; };
913 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterlandmark.cpp; sourceTree = "<group>"; };
914 1AA2EE9F0CBBE28C0017E185 /* llclassifiedstatsresponder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedstatsresponder.h; sourceTree = "<group>"; };
915 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llclassifiedstatsresponder.cpp; sourceTree = "<group>"; };
916 1AA2EEA20CBBE2BF0017E185 /* llfloaterurldisplay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterurldisplay.h; sourceTree = "<group>"; };
917 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterurldisplay.cpp; sourceTree = "<group>"; };
918 1AA2EEA50CBBE2D40017E185 /* llremoteparcelrequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llremoteparcelrequest.h; sourceTree = "<group>"; };
919 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llremoteparcelrequest.cpp; sourceTree = "<group>"; };
904 1AB0DADC0A52E8A0001CACEB /* message_template.msg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = message_template.msg; path = ../../scripts/messages/message_template.msg; sourceTree = SOURCE_ROOT; }; 920 1AB0DADC0A52E8A0001CACEB /* message_template.msg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = message_template.msg; path = ../../scripts/messages/message_template.msg; sourceTree = SOURCE_ROOT; };
905 1AD3940C0CAB0003004BA76A /* llurlsimstring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlsimstring.h; sourceTree = "<group>"; }; 921 1AD3940C0CAB0003004BA76A /* llurlsimstring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlsimstring.h; sourceTree = "<group>"; };
906 1AD3940D0CAB0003004BA76A /* llurldispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurldispatcher.h; sourceTree = "<group>"; }; 922 1AD3940D0CAB0003004BA76A /* llurldispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurldispatcher.h; sourceTree = "<group>"; };
@@ -1904,7 +1920,7 @@
1904 99BB5174099AC2A4004BF9F2 /* llconfirmationmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llconfirmationmanager.cpp; sourceTree = SOURCE_ROOT; }; 1920 99BB5174099AC2A4004BF9F2 /* llconfirmationmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llconfirmationmanager.cpp; sourceTree = SOURCE_ROOT; };
1905 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconfirmationmanager.h; sourceTree = SOURCE_ROOT; }; 1921 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconfirmationmanager.h; sourceTree = SOURCE_ROOT; };
1906 99C9FA660B6AD9BF00A1BBA6 /* SLVoice */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = SLVoice; path = "vivox-runtime/universal-darwin/SLVoice"; sourceTree = SOURCE_ROOT; }; 1922 99C9FA660B6AD9BF00A1BBA6 /* SLVoice */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = SLVoice; path = "vivox-runtime/universal-darwin/SLVoice"; sourceTree = SOURCE_ROOT; };
1907 99D5703305BDEFD7004DE704 /* AutoUpdater.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = AutoUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1923 99D5703305BDEFD7004DE704 /* AutoUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; };
1908 99D5703505BDEFD8004DE704 /* AutoUpdater-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "AutoUpdater-Info.plist"; sourceTree = SOURCE_ROOT; }; 1924 99D5703505BDEFD8004DE704 /* AutoUpdater-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "AutoUpdater-Info.plist"; sourceTree = SOURCE_ROOT; };
1909 99D8B25508735BFE002F8938 /* material_codes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = material_codes.h; sourceTree = "<group>"; }; 1925 99D8B25508735BFE002F8938 /* material_codes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = material_codes.h; sourceTree = "<group>"; };
1910 99DB67DA07C161A500CF3185 /* llmediaimplquicktime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmediaimplquicktime.h; sourceTree = "<group>"; }; 1926 99DB67DA07C161A500CF3185 /* llmediaimplquicktime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmediaimplquicktime.h; sourceTree = "<group>"; };
@@ -2209,6 +2225,15 @@
2209 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2225 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2210 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2226 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; };
2211 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2227 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2228 FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedinfo.h; sourceTree = "<group>"; };
2229 FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldebugmessagebox.cpp; sourceTree = "<group>"; };
2230 FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugmessagebox.h; sourceTree = "<group>"; };
2231 FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterclassified.cpp; sourceTree = "<group>"; };
2232 FE5138740CD80BAE00F32EE3 /* llfloaterclassified.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterclassified.h; sourceTree = "<group>"; };
2233 FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterevent.cpp; sourceTree = "<group>"; };
2234 FE5138760CD80BAE00F32EE3 /* llfloaterevent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterevent.h; sourceTree = "<group>"; };
2235 FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterparcel.cpp; sourceTree = "<group>"; };
2236 FE5138780CD80BAE00F32EE3 /* llfloaterparcel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterparcel.h; sourceTree = "<group>"; };
2212/* End PBXFileReference section */ 2237/* End PBXFileReference section */
2213 2238
2214/* Begin PBXFrameworksBuildPhase section */ 2239/* Begin PBXFrameworksBuildPhase section */
@@ -2394,6 +2419,23 @@
2394 26F529A0051F61CD00A80050 /* newview */ = { 2419 26F529A0051F61CD00A80050 /* newview */ = {
2395 isa = PBXGroup; 2420 isa = PBXGroup;
2396 children = ( 2421 children = (
2422 FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */,
2423 FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */,
2424 FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */,
2425 FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */,
2426 FE5138740CD80BAE00F32EE3 /* llfloaterclassified.h */,
2427 FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */,
2428 FE5138760CD80BAE00F32EE3 /* llfloaterevent.h */,
2429 FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */,
2430 FE5138780CD80BAE00F32EE3 /* llfloaterparcel.h */,
2431 1AA2EEA50CBBE2D40017E185 /* llremoteparcelrequest.h */,
2432 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */,
2433 1AA2EEA20CBBE2BF0017E185 /* llfloaterurldisplay.h */,
2434 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */,
2435 1AA2EE9F0CBBE28C0017E185 /* llclassifiedstatsresponder.h */,
2436 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */,
2437 1AA2EE9C0CBBE2790017E185 /* llfloaterlandmark.h */,
2438 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */,
2397 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */, 2439 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */,
2398 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */, 2440 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */,
2399 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */, 2441 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */,
@@ -4646,6 +4688,14 @@
4646 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */, 4688 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */,
4647 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */, 4689 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */,
4648 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */, 4690 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */,
4691 1AA2EE9E0CBBE2790017E185 /* llfloaterlandmark.cpp in Sources */,
4692 1AA2EEA10CBBE28C0017E185 /* llclassifiedstatsresponder.cpp in Sources */,
4693 1AA2EEA40CBBE2BF0017E185 /* llfloaterurldisplay.cpp in Sources */,
4694 1AA2EEA70CBBE2D40017E185 /* llremoteparcelrequest.cpp in Sources */,
4695 FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */,
4696 FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */,
4697 FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */,
4698 FE51387D0CD80BAE00F32EE3 /* llfloaterparcel.cpp in Sources */,
4649 ); 4699 );
4650 runOnlyForDeploymentPostprocessing = 0; 4700 runOnlyForDeploymentPostprocessing = 0;
4651 }; 4701 };
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 6fda220..075fdcb 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -20,7 +20,7 @@
20 <Tool 20 <Tool
21 Name="VCCLCompilerTool" 21 Name="VCCLCompilerTool"
22 Optimization="0" 22 Optimization="0"
23 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 23 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
24 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 24 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
25 MinimalRebuild="FALSE" 25 MinimalRebuild="FALSE"
26 BasicRuntimeChecks="3" 26 BasicRuntimeChecks="3"
@@ -86,7 +86,7 @@
86 EnableIntrinsicFunctions="TRUE" 86 EnableIntrinsicFunctions="TRUE"
87 OptimizeForProcessor="3" 87 OptimizeForProcessor="3"
88 OptimizeForWindowsApplication="TRUE" 88 OptimizeForWindowsApplication="TRUE"
89 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 89 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
90 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 90 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
91 StringPooling="TRUE" 91 StringPooling="TRUE"
92 RuntimeLibrary="0" 92 RuntimeLibrary="0"
@@ -102,7 +102,7 @@
102 Name="VCCustomBuildTool"/> 102 Name="VCCustomBuildTool"/>
103 <Tool 103 <Tool
104 Name="VCLinkerTool" 104 Name="VCLinkerTool"
105 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 105 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper.lib lgLcd.lib"
106 OutputFile="$(ConfigurationName)/newview.exe" 106 OutputFile="$(ConfigurationName)/newview.exe"
107 LinkIncremental="2" 107 LinkIncremental="2"
108 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 108 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -146,7 +146,7 @@
146 CharacterSet="1"> 146 CharacterSet="1">
147 <Tool 147 <Tool
148 Name="VCCLCompilerTool" 148 Name="VCCLCompilerTool"
149 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 149 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
150 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 150 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
151 RuntimeLibrary="0" 151 RuntimeLibrary="0"
152 StructMemberAlignment="0" 152 StructMemberAlignment="0"
@@ -164,7 +164,7 @@
164 Outputs="$(TargetFileName)"/> 164 Outputs="$(TargetFileName)"/>
165 <Tool 165 <Tool
166 Name="VCLinkerTool" 166 Name="VCLinkerTool"
167 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 167 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper.lib lgLcd.lib"
168 OutputFile="$(ConfigurationName)/SecondLife.exe" 168 OutputFile="$(ConfigurationName)/SecondLife.exe"
169 LinkIncremental="0" 169 LinkIncremental="0"
170 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 170 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -209,7 +209,7 @@
209 <Tool 209 <Tool
210 Name="VCCLCompilerTool" 210 Name="VCCLCompilerTool"
211 Optimization="0" 211 Optimization="0"
212 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 212 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
213 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 213 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
214 RuntimeLibrary="0" 214 RuntimeLibrary="0"
215 StructMemberAlignment="0" 215 StructMemberAlignment="0"
@@ -224,7 +224,7 @@
224 Name="VCCustomBuildTool"/> 224 Name="VCCustomBuildTool"/>
225 <Tool 225 <Tool
226 Name="VCLinkerTool" 226 Name="VCLinkerTool"
227 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 227 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper.lib lgLcd.lib"
228 OutputFile="$(ConfigurationName)/newview_noopt.exe" 228 OutputFile="$(ConfigurationName)/newview_noopt.exe"
229 LinkIncremental="2" 229 LinkIncremental="2"
230 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 230 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -322,6 +322,9 @@
322 RelativePath=".\llclassifiedinfo.cpp"> 322 RelativePath=".\llclassifiedinfo.cpp">
323 </File> 323 </File>
324 <File 324 <File
325 RelativePath=".\llclassifiedstatsresponder.cpp">
326 </File>
327 <File
325 RelativePath=".\llcloud.cpp"> 328 RelativePath=".\llcloud.cpp">
326 </File> 329 </File>
327 <File 330 <File
@@ -490,6 +493,9 @@
490 RelativePath=".\llfloaterchatterbox.cpp"> 493 RelativePath=".\llfloaterchatterbox.cpp">
491 </File> 494 </File>
492 <File 495 <File
496 RelativePath=".\llfloaterclassified.cpp">
497 </File>
498 <File
493 RelativePath=".\llfloaterclothing.cpp"> 499 RelativePath=".\llfloaterclothing.cpp">
494 </File> 500 </File>
495 <File 501 <File
@@ -505,6 +511,9 @@
505 RelativePath=".\llfloatereditui.cpp"> 511 RelativePath=".\llfloatereditui.cpp">
506 </File> 512 </File>
507 <File 513 <File
514 RelativePath=".\llfloaterevent.cpp">
515 </File>
516 <File
508 RelativePath=".\llfloaterfriends.cpp"> 517 RelativePath=".\llfloaterfriends.cpp">
509 </File> 518 </File>
510 <File 519 <File
@@ -547,6 +556,9 @@
547 RelativePath=".\llfloaterlandholdings.cpp"> 556 RelativePath=".\llfloaterlandholdings.cpp">
548 </File> 557 </File>
549 <File 558 <File
559 RelativePath=".\llfloaterlandmark.cpp">
560 </File>
561 <File
550 RelativePath=".\llfloatermap.cpp"> 562 RelativePath=".\llfloatermap.cpp">
551 </File> 563 </File>
552 <File 564 <File
@@ -562,6 +574,9 @@
562 RelativePath=".\llfloateropenobject.cpp"> 574 RelativePath=".\llfloateropenobject.cpp">
563 </File> 575 </File>
564 <File 576 <File
577 RelativePath=".\llfloaterparcel.cpp">
578 </File>
579 <File
565 RelativePath=".\llfloaterpermissionsmgr.cpp"> 580 RelativePath=".\llfloaterpermissionsmgr.cpp">
566 </File> 581 </File>
567 <File 582 <File
@@ -610,6 +625,9 @@
610 RelativePath=".\llfloatertos.cpp"> 625 RelativePath=".\llfloatertos.cpp">
611 </File> 626 </File>
612 <File 627 <File
628 RelativePath=".\llfloaterurldisplay.cpp">
629 </File>
630 <File
613 RelativePath=".\llfloatervoicewizard.cpp"> 631 RelativePath=".\llfloatervoicewizard.cpp">
614 </File> 632 </File>
615 <File 633 <File
@@ -718,6 +736,9 @@
718 RelativePath=".\lllandmarklist.cpp"> 736 RelativePath=".\lllandmarklist.cpp">
719 </File> 737 </File>
720 <File 738 <File
739 RelativePath=".\lllcd.cpp">
740 </File>
741 <File
721 RelativePath=".\lllocalanimationobject.cpp"> 742 RelativePath=".\lllocalanimationobject.cpp">
722 </File> 743 </File>
723 <File 744 <File
@@ -868,6 +889,9 @@
868 RelativePath=".\llpanellandoptions.cpp"> 889 RelativePath=".\llpanellandoptions.cpp">
869 </File> 890 </File>
870 <File 891 <File
892 RelativePath=".\llpanelLCD.cpp">
893 </File>
894 <File
871 RelativePath=".\llpanellogin.cpp"> 895 RelativePath=".\llpanellogin.cpp">
872 </File> 896 </File>
873 <File 897 <File
@@ -946,6 +970,9 @@
946 RelativePath=".\llregionposition.cpp"> 970 RelativePath=".\llregionposition.cpp">
947 </File> 971 </File>
948 <File 972 <File
973 RelativePath=".\llremoteparcelrequest.cpp">
974 </File>
975 <File
949 RelativePath=".\llroam.cpp"> 976 RelativePath=".\llroam.cpp">
950 </File> 977 </File>
951 <File 978 <File
@@ -1430,6 +1457,9 @@
1430 RelativePath=".\llclassifiedinfo.h"> 1457 RelativePath=".\llclassifiedinfo.h">
1431 </File> 1458 </File>
1432 <File 1459 <File
1460 RelativePath=".\llclassifiedstatsresponder.h">
1461 </File>
1462 <File
1433 RelativePath=".\llcloud.h"> 1463 RelativePath=".\llcloud.h">
1434 </File> 1464 </File>
1435 <File 1465 <File
@@ -1598,6 +1628,9 @@
1598 RelativePath=".\llfloaterchatterbox.h"> 1628 RelativePath=".\llfloaterchatterbox.h">
1599 </File> 1629 </File>
1600 <File 1630 <File
1631 RelativePath=".\llfloaterclassified.h">
1632 </File>
1633 <File
1601 RelativePath=".\llfloaterclothing.h"> 1634 RelativePath=".\llfloaterclothing.h">
1602 </File> 1635 </File>
1603 <File 1636 <File
@@ -1613,6 +1646,9 @@
1613 RelativePath=".\llfloatereditui.h"> 1646 RelativePath=".\llfloatereditui.h">
1614 </File> 1647 </File>
1615 <File 1648 <File
1649 RelativePath=".\llfloaterevent.h">
1650 </File>
1651 <File
1616 RelativePath=".\llfloaterfriends.h"> 1652 RelativePath=".\llfloaterfriends.h">
1617 </File> 1653 </File>
1618 <File 1654 <File
@@ -1655,6 +1691,9 @@
1655 RelativePath=".\llfloaterlandholdings.h"> 1691 RelativePath=".\llfloaterlandholdings.h">
1656 </File> 1692 </File>
1657 <File 1693 <File
1694 RelativePath=".\llfloaterlandmark.h">
1695 </File>
1696 <File
1658 RelativePath=".\llfloatermap.h"> 1697 RelativePath=".\llfloatermap.h">
1659 </File> 1698 </File>
1660 <File 1699 <File
@@ -1670,6 +1709,9 @@
1670 RelativePath=".\llfloateropenobject.h"> 1709 RelativePath=".\llfloateropenobject.h">
1671 </File> 1710 </File>
1672 <File 1711 <File
1712 RelativePath=".\llfloaterparcel.h">
1713 </File>
1714 <File
1673 RelativePath=".\llfloaterpermissionsmgr.h"> 1715 RelativePath=".\llfloaterpermissionsmgr.h">
1674 </File> 1716 </File>
1675 <File 1717 <File
@@ -1715,6 +1757,9 @@
1715 RelativePath=".\llfloatertos.h"> 1757 RelativePath=".\llfloatertos.h">
1716 </File> 1758 </File>
1717 <File 1759 <File
1760 RelativePath=".\llfloaterurldisplay.h">
1761 </File>
1762 <File
1718 RelativePath=".\llfloatervoicewizard.h"> 1763 RelativePath=".\llfloatervoicewizard.h">
1719 </File> 1764 </File>
1720 <File 1765 <File
@@ -1817,6 +1862,9 @@
1817 RelativePath=".\lllandmarklist.h"> 1862 RelativePath=".\lllandmarklist.h">
1818 </File> 1863 </File>
1819 <File 1864 <File
1865 RelativePath=".\lllcd.h">
1866 </File>
1867 <File
1820 RelativePath=".\lllightconstants.h"> 1868 RelativePath=".\lllightconstants.h">
1821 </File> 1869 </File>
1822 <File 1870 <File
@@ -1970,6 +2018,9 @@
1970 RelativePath=".\llpanellandoptions.h"> 2018 RelativePath=".\llpanellandoptions.h">
1971 </File> 2019 </File>
1972 <File 2020 <File
2021 RelativePath=".\llpanelLCD.h">
2022 </File>
2023 <File
1973 RelativePath=".\llpanellogin.h"> 2024 RelativePath=".\llpanellogin.h">
1974 </File> 2025 </File>
1975 <File 2026 <File
@@ -2054,6 +2105,9 @@
2054 RelativePath=".\llregionposition.h"> 2105 RelativePath=".\llregionposition.h">
2055 </File> 2106 </File>
2056 <File 2107 <File
2108 RelativePath=".\llremoteparcelrequest.h">
2109 </File>
2110 <File
2057 RelativePath=".\llresourcedata.h"> 2111 RelativePath=".\llresourcedata.h">
2058 </File> 2112 </File>
2059 <File 2113 <File
@@ -2626,9 +2680,15 @@
2626 RelativePath=".\skins\xui\en-us\floater_preview_animation.xml"> 2680 RelativePath=".\skins\xui\en-us\floater_preview_animation.xml">
2627 </File> 2681 </File>
2628 <File 2682 <File
2683 RelativePath=".\skins\xui\en-us\floater_preview_classified.xml">
2684 </File>
2685 <File
2629 RelativePath=".\skins\xui\en-us\floater_preview_embedded_texture.xml"> 2686 RelativePath=".\skins\xui\en-us\floater_preview_embedded_texture.xml">
2630 </File> 2687 </File>
2631 <File 2688 <File
2689 RelativePath=".\skins\xui\en-us\floater_preview_event.xml">
2690 </File>
2691 <File
2632 RelativePath=".\skins\xui\en-us\floater_preview_existing_landmark.xml"> 2692 RelativePath=".\skins\xui\en-us\floater_preview_existing_landmark.xml">
2633 </File> 2693 </File>
2634 <File 2694 <File
@@ -2653,6 +2713,9 @@
2653 RelativePath=".\skins\xui\en-us\floater_preview_texture_keep_discard.xml"> 2713 RelativePath=".\skins\xui\en-us\floater_preview_texture_keep_discard.xml">
2654 </File> 2714 </File>
2655 <File 2715 <File
2716 RelativePath=".\skins\xui\en-us\floater_preview_url.xml">
2717 </File>
2718 <File
2656 RelativePath=".\skins\xui\en-us\floater_price_for_listing.xml"> 2719 RelativePath=".\skins\xui\en-us\floater_price_for_listing.xml">
2657 </File> 2720 </File>
2658 <File 2721 <File
@@ -3169,6 +3232,9 @@
3169 Outputs="./app_settings/message_template.msg"/> 3232 Outputs="./app_settings/message_template.msg"/>
3170 </FileConfiguration> 3233 </FileConfiguration>
3171 </File> 3234 </File>
3235 <File
3236 RelativePath=".\skins\textures\textures.xml">
3237 </File>
3172 </Files> 3238 </Files>
3173 <Globals> 3239 <Globals>
3174 </Globals> 3240 </Globals>
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 7e8068c..6b669d9 100644
--- a/linden/indra/newview/newview_vc8.vcproj
+++ b/linden/indra/newview/newview_vc8.vcproj
@@ -43,7 +43,7 @@
43 <Tool 43 <Tool
44 Name="VCCLCompilerTool" 44 Name="VCCLCompilerTool"
45 Optimization="0" 45 Optimization="0"
46 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\llwindow\Logitech_LCD;..\llwindow\Logitech_LCD\LCDUI" 46 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
47 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 47 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
48 MinimalRebuild="false" 48 MinimalRebuild="false"
49 BasicRuntimeChecks="3" 49 BasicRuntimeChecks="3"
@@ -69,7 +69,7 @@
69 /> 69 />
70 <Tool 70 <Tool
71 Name="VCLinkerTool" 71 Name="VCLinkerTool"
72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llmozlib-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llmozlib-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib"
73 OutputFile="$(ConfigurationName)/debugview.exe" 73 OutputFile="$(ConfigurationName)/debugview.exe"
74 LinkIncremental="2" 74 LinkIncremental="2"
75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -137,7 +137,7 @@
137 Name="VCCLCompilerTool" 137 Name="VCCLCompilerTool"
138 InlineFunctionExpansion="2" 138 InlineFunctionExpansion="2"
139 EnableIntrinsicFunctions="true" 139 EnableIntrinsicFunctions="true"
140 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\llwindow\Logitech_LCD;..\llwindow\Logitech_LCD\LCDUI" 140 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
141 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 141 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
142 StringPooling="true" 142 StringPooling="true"
143 RuntimeLibrary="0" 143 RuntimeLibrary="0"
@@ -162,7 +162,7 @@
162 /> 162 />
163 <Tool 163 <Tool
164 Name="VCLinkerTool" 164 Name="VCLinkerTool"
165 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 165 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib"
166 OutputFile="$(ConfigurationName)/newview.exe" 166 OutputFile="$(ConfigurationName)/newview.exe"
167 LinkIncremental="2" 167 LinkIncremental="2"
168 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 168 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -231,7 +231,7 @@
231 /> 231 />
232 <Tool 232 <Tool
233 Name="VCCLCompilerTool" 233 Name="VCCLCompilerTool"
234 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\llwindow\Logitech_LCD;..\llwindow\Logitech_LCD\LCDUI" 234 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
235 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 235 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
236 RuntimeLibrary="0" 236 RuntimeLibrary="0"
237 StructMemberAlignment="0" 237 StructMemberAlignment="0"
@@ -255,7 +255,7 @@
255 <Tool 255 <Tool
256 Name="VCLinkerTool" 256 Name="VCLinkerTool"
257 LinkLibraryDependencies="false" 257 LinkLibraryDependencies="false"
258 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 258 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib"
259 OutputFile="$(ConfigurationName)/SecondLife.exe" 259 OutputFile="$(ConfigurationName)/SecondLife.exe"
260 LinkIncremental="0" 260 LinkIncremental="0"
261 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 261 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -322,7 +322,7 @@
322 <Tool 322 <Tool
323 Name="VCCLCompilerTool" 323 Name="VCCLCompilerTool"
324 Optimization="0" 324 Optimization="0"
325 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\llwindow\Logitech_LCD;..\llwindow\Logitech_LCD\LCDUI" 325 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
326 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 326 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
327 RuntimeLibrary="0" 327 RuntimeLibrary="0"
328 StructMemberAlignment="0" 328 StructMemberAlignment="0"
@@ -346,7 +346,7 @@
346 /> 346 />
347 <Tool 347 <Tool
348 Name="VCLinkerTool" 348 Name="VCLinkerTool"
349 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib OpenJPEG.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib" 349 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib lgLcd.lib EZ_LCD_Wrapper_vc8.lib"
350 OutputFile="$(ConfigurationName)/newview_noopt.exe" 350 OutputFile="$(ConfigurationName)/newview_noopt.exe"
351 LinkIncremental="2" 351 LinkIncremental="2"
352 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 352 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -461,6 +461,10 @@
461 > 461 >
462 </File> 462 </File>
463 <File 463 <File
464 RelativePath=".\llclassifiedstatsresponder.cpp"
465 >
466 </File>
467 <File
464 RelativePath=".\llcloud.cpp" 468 RelativePath=".\llcloud.cpp"
465 > 469 >
466 </File> 470 </File>
@@ -761,6 +765,10 @@
761 > 765 >
762 </File> 766 </File>
763 <File 767 <File
768 RelativePath=".\llfloaterlandmark.cpp"
769 >
770 </File>
771 <File
764 RelativePath=".\llfloatermap.cpp" 772 RelativePath=".\llfloatermap.cpp"
765 > 773 >
766 </File> 774 </File>
@@ -845,6 +853,10 @@
845 > 853 >
846 </File> 854 </File>
847 <File 855 <File
856 RelativePath=".\llfloaterurldisplay.cpp"
857 >
858 </File>
859 <File
848 RelativePath=".\llfloatervoicewizard.cpp" 860 RelativePath=".\llfloatervoicewizard.cpp"
849 > 861 >
850 </File> 862 </File>
@@ -989,6 +1001,10 @@
989 > 1001 >
990 </File> 1002 </File>
991 <File 1003 <File
1004 RelativePath=".\lllcd.cpp"
1005 >
1006 </File>
1007 <File
992 RelativePath=".\lllocalanimationobject.cpp" 1008 RelativePath=".\lllocalanimationobject.cpp"
993 > 1009 >
994 </File> 1010 </File>
@@ -1189,6 +1205,10 @@
1189 > 1205 >
1190 </File> 1206 </File>
1191 <File 1207 <File
1208 RelativePath=".\llpanelLCD.cpp"
1209 >
1210 </File>
1211 <File
1192 RelativePath=".\llpanellogin.cpp" 1212 RelativePath=".\llpanellogin.cpp"
1193 > 1213 >
1194 </File> 1214 </File>
@@ -1293,6 +1313,10 @@
1293 > 1313 >
1294 </File> 1314 </File>
1295 <File 1315 <File
1316 RelativePath=".\llremoteparcelrequest.cpp"
1317 >
1318 </File>
1319 <File
1296 RelativePath=".\llroam.cpp" 1320 RelativePath=".\llroam.cpp"
1297 > 1321 >
1298 </File> 1322 </File>
@@ -1935,6 +1959,10 @@
1935 > 1959 >
1936 </File> 1960 </File>
1937 <File 1961 <File
1962 RelativePath=".\llclassifiedstatsresponder.h"
1963 >
1964 </File>
1965 <File
1938 RelativePath=".\llcloud.h" 1966 RelativePath=".\llcloud.h"
1939 > 1967 >
1940 </File> 1968 </File>
@@ -2207,10 +2235,6 @@
2207 > 2235 >
2208 </File> 2236 </File>
2209 <File 2237 <File
2210 RelativePath=".\llfloaterhtmlfind.h"
2211 >
2212 </File>
2213 <File
2214 RelativePath=".\llfloaterhtmlhelp.h" 2238 RelativePath=".\llfloaterhtmlhelp.h"
2215 > 2239 >
2216 </File> 2240 </File>
@@ -2239,6 +2263,10 @@
2239 > 2263 >
2240 </File> 2264 </File>
2241 <File 2265 <File
2266 RelativePath=".\llfloaterlandmark.h"
2267 >
2268 </File>
2269 <File
2242 RelativePath=".\llfloatermap.h" 2270 RelativePath=".\llfloatermap.h"
2243 > 2271 >
2244 </File> 2272 </File>
@@ -2323,6 +2351,10 @@
2323 > 2351 >
2324 </File> 2352 </File>
2325 <File 2353 <File
2354 RelativePath=".\llfloaterurldisplay.h"
2355 >
2356 </File>
2357 <File
2326 RelativePath=".\llfloatervoicewizard.h" 2358 RelativePath=".\llfloatervoicewizard.h"
2327 > 2359 >
2328 </File> 2360 </File>
@@ -2459,6 +2491,10 @@
2459 > 2491 >
2460 </File> 2492 </File>
2461 <File 2493 <File
2494 RelativePath=".\lllcd.h"
2495 >
2496 </File>
2497 <File
2462 RelativePath=".\lllightconstants.h" 2498 RelativePath=".\lllightconstants.h"
2463 > 2499 >
2464 </File> 2500 </File>
@@ -2663,6 +2699,10 @@
2663 > 2699 >
2664 </File> 2700 </File>
2665 <File 2701 <File
2702 RelativePath=".\llpanelLCD.h"
2703 >
2704 </File>
2705 <File
2666 RelativePath=".\llpanellogin.h" 2706 RelativePath=".\llpanellogin.h"
2667 > 2707 >
2668 </File> 2708 </File>
@@ -2775,6 +2815,10 @@
2775 > 2815 >
2776 </File> 2816 </File>
2777 <File 2817 <File
2818 RelativePath=".\llremoteparcelrequest.h"
2819 >
2820 </File>
2821 <File
2778 RelativePath=".\llresourcedata.h" 2822 RelativePath=".\llresourcedata.h"
2779 > 2823 >
2780 </File> 2824 </File>
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 1c05b15..6d8fdd1 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,16 @@
1Release Notes for Second Life 1.18.5(0) November 13, 2007
2=====================================
3New features:
4* New inworld search via the 'All' tab
5** Includes improved search functionality on land parcels, profiles, groups, wiki documents, events, classifieds, and some individual objects
6** Classifieds are returned both within and next to search results
7
8Bug fixes:
9* Fixed avatar turning in Appearance mode
10* Fixed Lag Meter metrics for non-USA residents
11* Fixed open source build issues
12* Fixed Korean text display on Mac OSX 10.5
13
1Release Notes for Second Life 1.18.4(3) November 7, 2007 14Release Notes for Second Life 1.18.4(3) November 7, 2007
2===================================== 15=====================================
3New features: 16New features:
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index ccb649a..2d5def4 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -63,6 +63,7 @@ END
63// remains consistent on all systems. 63// remains consistent on all systems.
64IDI_LL_ICON ICON "ll_icon.ico" 64IDI_LL_ICON ICON "ll_icon.ico"
65IDI_INSTALL_ICON ICON "install_icon.ico" 65IDI_INSTALL_ICON ICON "install_icon.ico"
66IDI_LCD_LL_ICON ICON "icon1.ico"
66 67
67///////////////////////////////////////////////////////////////////////////// 68/////////////////////////////////////////////////////////////////////////////
68// 69//
@@ -227,8 +228,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
227// 228//
228 229
229VS_VERSION_INFO VERSIONINFO 230VS_VERSION_INFO VERSIONINFO
230 FILEVERSION 1,18,4,3 231 FILEVERSION 1,18,5,0
231 PRODUCTVERSION 1,18,4,3 232 PRODUCTVERSION 1,18,5,0
232 FILEFLAGSMASK 0x3fL 233 FILEFLAGSMASK 0x3fL
233#ifdef _DEBUG 234#ifdef _DEBUG
234 FILEFLAGS 0x1L 235 FILEFLAGS 0x1L
@@ -245,12 +246,12 @@ BEGIN
245 BEGIN 246 BEGIN
246 VALUE "CompanyName", "Linden Lab" 247 VALUE "CompanyName", "Linden Lab"
247 VALUE "FileDescription", "Second Life" 248 VALUE "FileDescription", "Second Life"
248 VALUE "FileVersion", "1.18.4.3" 249 VALUE "FileVersion", "1.18.5.0"
249 VALUE "InternalName", "Second Life" 250 VALUE "InternalName", "Second Life"
250 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc." 251 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc."
251 VALUE "OriginalFilename", "SecondLife.exe" 252 VALUE "OriginalFilename", "SecondLife.exe"
252 VALUE "ProductName", "Second Life" 253 VALUE "ProductName", "Second Life"
253 VALUE "ProductVersion", "1.18.4.3" 254 VALUE "ProductVersion", "1.18.5.0"
254 END 255 END
255 END 256 END
256 BLOCK "VarFileInfo" 257 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/res/resource.h b/linden/indra/newview/res/resource.h
index c7e1552..e4d01b1 100644
--- a/linden/indra/newview/res/resource.h
+++ b/linden/indra/newview/res/resource.h
@@ -19,6 +19,7 @@
19#define IDB_LOGIN 149 19#define IDB_LOGIN 149
20#define IDC_CURSOR4 153 20#define IDC_CURSOR4 153
21#define IDC_CURSOR5 154 21#define IDC_CURSOR5 154
22#define IDI_LCD_LL_ICON 157
22#define IDC_RADIO_56 1000 23#define IDC_RADIO_56 1000
23#define IDC_RADIO_128 1001 24#define IDC_RADIO_128 1001
24#define IDC_RADIO_256 1002 25#define IDC_RADIO_256 1002
@@ -151,7 +152,7 @@
151// 152//
152#ifdef APSTUDIO_INVOKED 153#ifdef APSTUDIO_INVOKED
153#ifndef APSTUDIO_READONLY_SYMBOLS 154#ifndef APSTUDIO_READONLY_SYMBOLS
154#define _APS_NEXT_RESOURCE_VALUE 156 155#define _APS_NEXT_RESOURCE_VALUE 167
155#define _APS_NEXT_COMMAND_VALUE 40002 156#define _APS_NEXT_COMMAND_VALUE 40002
156#define _APS_NEXT_CONTROL_VALUE 1139 157#define _APS_NEXT_CONTROL_VALUE 1139
157#define _APS_NEXT_SYMED_VALUE 101 158#define _APS_NEXT_SYMED_VALUE 101
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 72c6621..cc9f61c 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -307,6 +307,7 @@
307 <account_id_green.tga value="3bf64d5a-38d3-b752-cf52-3d9f8fca353a"/> 307 <account_id_green.tga value="3bf64d5a-38d3-b752-cf52-3d9f8fca353a"/>
308 <status_push.tga value="07d1f523-e327-4d10-20d6-8bc22a6e8f56"/> 308 <status_push.tga value="07d1f523-e327-4d10-20d6-8bc22a6e8f56"/>
309 <status_voice.tga value="c49b0b3b-fe04-46ee-abab-777fa0b462b6"/> 309 <status_voice.tga value="c49b0b3b-fe04-46ee-abab-777fa0b462b6"/>
310 <status_search.tga value="6846fb08-fe38-40be-b145-d8d7b2e1d0d8"/>
310 <ff_visible_online.tga value="d609a41f-34c0-7aae-b2c6-2fc3ab26d916"/> 311 <ff_visible_online.tga value="d609a41f-34c0-7aae-b2c6-2fc3ab26d916"/>
311 <ff_visible_map.tga value="20b52706-c1ab-414a-9dea-1cb788ad5689"/> 312 <ff_visible_map.tga value="20b52706-c1ab-414a-9dea-1cb788ad5689"/>
312 <ff_edit_mine.tga value="1baee0b9-4b89-39eb-8815-866d82300ab5"/> 313 <ff_edit_mine.tga value="1baee0b9-4b89-39eb-8815-866d82300ab5"/>
diff --git a/linden/indra/newview/skins/xui/en-us/LCD_text.xml b/linden/indra/newview/skins/xui/en-us/LCD_text.xml
new file mode 100644
index 0000000..d679d64
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/LCD_text.xml
@@ -0,0 +1,28 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="0" follows="left|top|right|bottom" height="600" hidden="true" left="0"
3 mouse_opaque="true" name="panel_login" width="800">
4 <text hidden="true" name="DebugInfo">Debug Info</text>
5 <text hidden="true" name="FPS">FPS</text>
6 <text hidden="true" name="SimFPS">SimFPS</text>
7 <text hidden="true" name="Pin">P-In</text>
8 <text hidden="true" name="Pout">P-Out</text>
9 <text hidden="true" name="PLoss">P-Loss</text>
10 <text hidden="true" name="Ping">Ping</text>
11 <text hidden="true" name="AccountDetails">Account Details</text>
12 <text hidden="true" name="LBal">L$ bal</text>
13 <text hidden="true" name="Time">Time</text>
14 <text hidden="true" name="LocationDetails1">Location Details 1</text>
15 <text hidden="true" name="LocationDetails2">Location Details 2</text>
16 <text hidden="true" name="Region">Region</text>
17 <text hidden="true" name="Parcel">Parcel</text>
18 <text hidden="true" name="Pos">Pos</text>
19 <text hidden="true" name="Sqm">Sqm</text>
20 <text hidden="true" name="Owner">Owner</text>
21 <text hidden="true" name="Type">Type</text>
22 <text hidden="true" name="Yes">Yes</text>
23 <text hidden="true" name="No">No</text>
24 <text hidden="true" name="Forsale">ForSale</text>
25 <text hidden="true" name="Traffic">Traffic</text>
26 <text hidden="true" name="Last3ChatLines">Last 3 Chat Lines</text>
27 <text hidden="true" name="Last3IMLines">Last 3 IM Lines</text>
28</panel> \ No newline at end of file
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index 0bad2fc..192fcdb 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -1,5 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<alerts> 2<alerts>
3 <global name="skipnexttime">Don't show me this again</global>
4 <global name="alwayschoose">Always choose this option</global>
5
3 <alert modal="true" name="MissingAlert"> 6 <alert modal="true" name="MissingAlert">
4 <message name="message"> 7 <message name="message">
5 [ALERT_NAME] is missing from alerts.xml! 8 [ALERT_NAME] is missing from alerts.xml!
@@ -334,7 +337,7 @@ Community Standards.
334 </alert> 337 </alert>
335 <alert modal="true" name="ClickPublishHelpAvatar"> 338 <alert modal="true" name="ClickPublishHelpAvatar">
336 <message name="message"> 339 <message name="message">
337 Selecting the &quot;Publish in Search&quot; will show: 340 Selecting &quot;Show in Search&quot; will show:
338 - my profile in search results 341 - my profile in search results
339 - a link to my profile in public group pages 342 - a link to my profile in public group pages
340 </message> 343 </message>
@@ -3230,6 +3233,20 @@ from the &apos;Edit&apos; menu.
3230 Cancel 3233 Cancel
3231 </option> 3234 </option>
3232 </alert> 3235 </alert>
3236 <alert modal="true" name="TeleportFromLandmark">
3237 <message name="message">
3238 Are you sure you want to teleport?
3239 </message>
3240 <ignore name="ignore">
3241 When teleporting from a landmark in inventory
3242 </ignore>
3243 <option name="Teleport">
3244 Teleport
3245 </option>
3246 <option name="Cancel">
3247 Cancel
3248 </option>
3249 </alert>
3233 <alert name="MessageEstate" title="Message everyone in your Estate"> 3250 <alert name="MessageEstate" title="Message everyone in your Estate">
3234 <message name="message"> 3251 <message name="message">
3235 Type a short announcement which will be 3252 Type a short announcement which will be
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about.xml b/linden/indra/newview/skins/xui/en-us/floater_about.xml
index 87833aa..40cdcf1 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about.xml
@@ -11,7 +11,7 @@
11 11
12In Memory of Jesse Malthus, you will be fondly remembered by all who heard your voice. 12In Memory of Jesse Malthus, you will be fondly remembered by all who heard your voice.
13 13
14Thank you to the following residents for helping to ensure that this is the best version yet: Aces Spade, Adrian Buckler, Adrienne LeShelle, Amanda Ascot, AnnaQuay Heart, Aquamina Khalifa, Arienne Anatine, Aston Hildyard, Ayami Kamachi, Badinage Odets, Biffy Berjis, Bigfox Pye, BigJohn Jade, BigRick Byrd, Brettus Tripsa, Brock Fitzgerald, Broker Allen, Browse by Name, Chiria Celt, Christopher Prudhomme, dale Cao, dale Lynch, Dante Tucker, DaQbet Kish, Dargon Pacer, Darius Antonelli, Deira Llanfair, DeviantBone Xi, Dore Dorado, Englishwob Etchegaray, Enya Masala, Eric Renneville, Fairfax Michinaga, FireFox Bancroft, FOXI Cortes, Frederick Earp, Geo Meek, Gotthilf Fischer, Hallo Loon, Hawk Carter, Hazel Kyrgyz, Hecter Barbosa, Hex Link, Ice Pak, Ideasu Mukerji, Itoku Kamachi, Jared Halleck, Jaykob Carter, Jennifer Drumheller, JensMartin Tomsen, JIAB Boa, Jim Gustafson, JimmyJet Fossett, Joseph Rustamova, Jt Volos, Karilyn Kidomen, Kaysha Sion, Keaton Nacon, Kevin Susenko, Khashai Steinbeck, Kira Cuddihy, Kit Massiel, Kojo Dixon, KUieTSToRm Lightcloud, Kwai Kyong, Kyrtis Daehlie, LazyGunGuy Bartlett, Lewcas Zapedzki, Lioc Cioc, LLIB Utu, Lou Liebknecht, Luca Draken, Maci Homewood, Major Sewell, Mari Todriya, MarieElize Noel, matt27 Churchill, Maverick Miasma, maydaysos Young, Mediaho Ball, Mikayla Gillespie, Mike Faulkland, Modfire Milland, MollyBrown Foxley, Mosley Jewell, Nuahs Zapedzki, Nyx Divine, Panther Farber, Paul Bumi, PrincessNina Prefect, Prio Serpentine, Rainbow Drake, Randall Rall, Randy Kazan, Reinhart Mokeev, Rhyph Somme, Rico Roizman, Ruge Dryke, Ryan Orbit, Safira Rosher, Samantha Bainbridge, Sammy Foxley, Sash Furst, Saturn Ariantho, Sienna Summers, Skye Enoch, Sofie Kanno, Solar Legion, Sonic Oki, Sunra Saenz, Taina Heart, Taryn Sprawl, tenerife Wei, TomDragon Nilsson, Trebla Reve, Trouble Carnell, user1cat Orbit, Vance Merlin, Veritas Variscan, Web Page, Wi3g3ht3s Ihnen, WinDrftr DeFarge, Yuu Nakamichi, Zac Delec, Zed Fairweather, Zimmo Hallard. 14Thank you to the following residents for helping to ensure that this is the best version yet: Aces Spade, Adrian Buckler, Adrienne LeShelle, Amanda Ascot, AnnaQuay Heart, Aquamina Khalifa, Arienne Anatine, Aston Hildyard, Ayami Kamachi, Badinage Odets, Biffy Berjis, Bigfox Pye, BigJohn Jade, BigRick Byrd, Brettus Tripsa, Brock Fitzgerald, Broker Allen, Browse by Name, Chiria Celt, Christopher Prudhomme, dale Cao, dale Lynch, Dante Tucker, DaQbet Kish, Dargon Pacer, Darius Antonelli, Deira Llanfair, DeviantBone Xi, Dore Dorado, Englishwob Etchegaray, Enya Masala, Eric Renneville, Fairfax Michinaga, FireFox Bancroft, FOXI Cortes, Frederick Earp, Geo Meek, Gotthilf Fischer, Hallo Loon, Hawk Carter, Hazel Kyrgyz, Hecter Barbosa, Hex Link, Ice Pak, Ideasu Mukerji, Itoku Kamachi, Jared Halleck, Jaykob Carter, Jennifer Drumheller, JensMartin Tomsen, JIAB Boa, Jim Gustafson, JimmyJet Fossett, Joseph Rustamova, Jt Volos, Karilyn Kidomen, Kaysha Sion, Keaton Nacon, Kevin Susenko, Khashai Steinbeck, Kira Cuddihy, Kit Massiel, Kojo Dixon, KUieTSToRm Lightcloud, Kwai Kyong, Kyrtis Daehlie, LazyGunGuy Bartlett, Lewcas Zapedzki, Lioc Cioc, LLIB Utu, Lou Liebknecht, Luca Draken, Maci Homewood, Major Sewell, Mari Todriya, MarieElize Noel, matt27 Churchill, Maverick Miasma, maydaysos Young, Mediaho Ball, Mikayla Gillespie, Mike Faulkland, Modfire Milland, MollyBrown Foxley, Mosley Jewell, Nuahs Zapedzki, Nyx Divine, Panther Farber, Paul Bumi, Preciousse Moody, PrincessNina Prefect, Prio Serpentine, Rainbow Drake, Randall Rall, Randy Kazan, Reinhart Mokeev, Rhyph Somme, Rico Roizman, Ruge Dryke, Ryan Orbit, Safira Rosher, Samantha Bainbridge, Sammy Foxley, Sash Furst, Saturn Ariantho, Sienna Summers, Skye Enoch, Sofie Kanno, Solar Legion, Sonic Oki, Sunra Saenz, Taina Heart, Taryn Sprawl, tenerife Wei, TomDragon Nilsson, Trebla Reve, Trouble Carnell, user1cat Orbit, Vance Merlin, Veritas Variscan, Web Page, Wi3g3ht3s Ihnen, WinDrftr DeFarge, Yuu Nakamichi, Zac Delec, Zed Fairweather, Zimmo Hallard.
15 15
16APR Copyright (C) 2000-2004 The Apache Software Foundation 16APR Copyright (C) 2000-2004 The Apache Software Foundation
17cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) 17cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
index 3a877ea..eb5448f 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
@@ -557,11 +557,11 @@
557 width="119" /> 557 width="119" />
558 <check_box bottom="-140" enabled="true" follows="left|top" font="SansSerifSmall" 558 <check_box bottom="-140" enabled="true" follows="left|top" font="SansSerifSmall"
559 height="16" hidden="false" initial_value="false" 559 height="16" hidden="false" initial_value="false"
560 label="Show in Search &gt; Places (L$30/week) under" left="14" 560 label="Show Place in Search (L$30/week) under" left="14"
561 mouse_opaque="true" name="ShowDirectoryCheck" radio_style="false" 561 mouse_opaque="true" name="ShowDirectoryCheck" radio_style="false"
562 width="268" tool_tip="Let people see this parcel in search results"/> 562 width="268" tool_tip="Let people see this parcel in search results"/>
563 <combo_box allow_text_entry="false" bottom="-140" enabled="true" follows="left|top" 563 <combo_box allow_text_entry="false" bottom="-140" enabled="true" follows="left|top"
564 height="18" hidden="false" left="260" max_chars="20" mouse_opaque="true" 564 height="18" hidden="false" left="255" max_chars="20" mouse_opaque="true"
565 name="land category" width="130"> 565 name="land category" width="130">
566 <combo_item name="AnyCategory" value="any"> 566 <combo_item name="AnyCategory" value="any">
567 Any Category 567 Any Category
diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
index 7068b82..6f253a1 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -1,54 +1,100 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="570" min_height="200" min_width="400" 3 can_resize="true" height="570" min_height="570" min_width="780"
4 name="directory" rect_control="FloaterFindRect2" title="Search" width="780"> 4 name="directory" rect_control="FloaterFindRect2"
5 title="Search Second Life" width="780">
5 <tab_container bottom="-570" follows="left|top|right|bottom" height="550" left="0" 6 <tab_container bottom="-570" follows="left|top|right|bottom" height="550" left="0"
6 mouse_opaque="false" name="Directory Tabs" tab_position="top" width="780"> 7 mouse_opaque="false" name="Directory Tabs" tab_position="top" width="780">
8
7 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 9 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
8 label="All" left="1" mouse_opaque="false" name="all_panel" width="778"> 10 label="All" left="1" mouse_opaque="false"
9 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 11 name="find_all_panel"
10 height="20" label="Next &gt;" label_selected="Next &gt;" right="344" 12 width="778">
11 mouse_opaque="true" name="Next &gt;" width="80" /> 13 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
12 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 14 label="Back"
13 height="20" label="&lt; Prev" label_selected="&lt; Prev" right="258" 15 left="10"
14 mouse_opaque="true" name="&lt; Prev" width="80" /> 16 name="back_btn" width="70" />
15 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
16 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 18 label="Forward" left_delta="75"
17 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 19 name="forward_btn" width="70" />
18 name="find" v_pad="0" width="50"> 20 <line_editor bevel_style="in"
19 Find: 21 border_style="line"
20 </text> 22 border_thickness="1"
21 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 23 bottom_delta="0"
22 follows="left|top" font="SansSerif" height="18" left_delta="38" 24 enabled="true"
23 max_length="63" mouse_opaque="true" name="name" width="128" /> 25 follows="top|left|right"
24 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 26 font="SansSerif"
25 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true" 27 handle_edit_keys_directly="false"
26 name="Search" width="70" /> 28 commit_on_focus_lost="false"
27 <check_box bottom="-22" control_name="ShowMatureFindAll" follows="left|top" 29 height="20"
30 hidden="false"
31 label="Search"
32 left_delta="80"
33 width="180"
34 max_length="254"
35 mouse_opaque="true"
36 name="search_editor"
37 select_all_on_focus_received="false"
38 select_on_focus="false"
39 tab_group="1"
40 tool_tip="Search Second Life" />
41 <button follows="top|right" font="SansSerif" height="20"
42 label="Search"
43 left_delta="185"
44 bottom_delta="0"
45 name="search_btn" width="70" />
46 <combo_box allow_text_entry="false"
47 bottom_delta="0" follows="right|top" height="18"
48 left_delta="100"
49 max_chars="20" mouse_opaque="true" name="Category"
50 width="128">
51 <combo_item name="AnyCategory" value="All">
52 Any Category
53 </combo_item>
54 <combo_item name="Classifieds" value="Classifieds">
55 Classifieds
56 </combo_item>
57 <combo_item name="Events" value="Events">
58 Events
59 </combo_item>
60 <combo_item name="Groups" value="Groups">
61 Groups
62 </combo_item>
63 <combo_item name="People" value="People">
64 People
65 </combo_item>
66 <combo_item name="Places" value="Places">
67 Places
68 </combo_item>
69 <combo_item name="Wiki" value="Wiki">
70 Wiki
71 </combo_item>
72 </combo_box>
73 <check_box bottom_delta="0"
74 control_name="ShowMatureFindAll" follows="right|top"
28 font="SansSerifSmall" height="16" initial_value="false" 75 font="SansSerifSmall" height="16" initial_value="false"
29 label="Include Mature content" left_delta="78" mouse_opaque="true" 76 label="Include Mature content"
30 name="incmature" width="156" /> 77 left_delta="133"
31 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 78 name="mature_check"
32 draw_heading="false" fg_disable_color="1, 1, 1, 1" 79 width="156" />
33 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1" 80 <web_browser name="find_browser"
34 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 81 bottom="25"
35 multi_select="false" name="results" search_column="1" width="339"> 82 follows="top|left|bottom|right"
36 <column label="" name="icon" width="24" /> 83 font="SansSerifSmall"
37 <column label="Name" name="name" width="235" /> 84 left="10"
38 <column label="Price" name="price" width="90" /> 85 right="-10"
39 <column label="Time (PT)" name="date" width="90" /> 86 top="-40" />
40 <column label="Time" name="time" width="-1" /> 87 <text bottom="5"
41 <column label="Traffic" name="dwell" width="90" /> 88 follows="bottom|left"
42 <column label="Area" name="area" width="90" /> 89 halign="left"
43 <column label="L$/sq.m" name="per_meter" width="90" /> 90 left="10"
44 <column label="Online" name="online" width="90" /> 91 width="150"
45 <column label="Members" name="members" width="90" /> 92 name="status_text"
46 </scroll_list> 93 height="16" />
47 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 94 <text hidden="true" name="loading_text">Loading...</text>
48 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom" 95 <text hidden="true" name="done_text">Done</text>
49 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
50 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
51 </panel> 96 </panel>
97
52 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 98 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
53 label="Classifieds" left="1" left_delta="68" mouse_opaque="false" 99 label="Classifieds" left="1" left_delta="68" mouse_opaque="false"
54 name="classified_panel" width="778"> 100 name="classified_panel" width="778">
@@ -65,13 +111,13 @@
65 Find: 111 Find:
66 </text> 112 </text>
67 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 113 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
68 follows="left|top" font="SansSerif" height="18" left_delta="30" 114 follows="left|top" font="SansSerif" height="18" left_delta="38"
69 max_length="63" mouse_opaque="true" name="name" width="136" /> 115 max_length="63" mouse_opaque="true" name="name" width="128" />
70 <check_box bottom_delta="-18" control_name="ShowMatureClassifieds" follows="left|top" 116 <check_box bottom_delta="-18" control_name="ShowMatureClassifieds" follows="left|top"
71 font="SansSerifSmall" height="16" initial_value="true" 117 font="SansSerifSmall" height="16" initial_value="true"
72 label="Include Mature content" left="32" mouse_opaque="true" 118 label="Include Mature content" left_delta="0" mouse_opaque="true"
73 name="incmature" width="156" /> 119 name="incmature" width="156" />
74 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="174" 120 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="182"
75 max_chars="20" mouse_opaque="true" name="Category" width="128"> 121 max_chars="20" mouse_opaque="true" name="Category" width="128">
76 <combo_item name="AnyCategory" value="0"> 122 <combo_item name="AnyCategory" value="0">
77 Any Category 123 Any Category
@@ -110,9 +156,9 @@
110 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 156 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
111 label="Search" label_selected="Search" mouse_opaque="true" 157 label="Search" label_selected="Search" mouse_opaque="true"
112 name="Search" width="70" visible="false"/> 158 name="Search" width="70" visible="false"/>
113 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 159 <button bottom="-26" follows="right|top" font="SansSerif" halign="center" height="20"
114 label="Place an Ad..." label_selected="Place an Ad..." left_delta="320" 160 label="Place an Ad..." label_selected="Place an Ad..." left="-140"
115 mouse_opaque="true" name="Place an Ad..." width="123" /> 161 mouse_opaque="true" name="Place an Ad..." width="125" />
116 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 162 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
117 height="20" label="Delete" label_selected="Delete" left="80" 163 height="20" label="Delete" label_selected="Delete" left="80"
118 mouse_opaque="true" name="Delete" width="80" /> 164 mouse_opaque="true" name="Delete" width="80" />
@@ -131,6 +177,7 @@
131 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 177 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
132 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 178 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
133 </panel> 179 </panel>
180
134 <panel border="true" bottom="-549" default_tab_group="1" 181 <panel border="true" bottom="-549" default_tab_group="1"
135 follows="left|top|right|bottom" height="533" label="Events" left="1" 182 follows="left|top|right|bottom" height="533" label="Events" left="1"
136 mouse_opaque="false" name="events_panel" width="778"> 183 mouse_opaque="false" name="events_panel" width="778">
@@ -233,7 +280,7 @@
233 font="SansSerifSmall" height="16" initial_value="false" label="Show Mature" 280 font="SansSerifSmall" height="16" initial_value="false" label="Show Mature"
234 left="569" mouse_opaque="true" name="incmature" width="120" /> 281 left="569" mouse_opaque="true" name="incmature" width="120" />
235 <button bottom="-28" follows="left|top" font="SansSerif" halign="center" height="20" 282 <button bottom="-28" follows="left|top" font="SansSerif" halign="center" height="20"
236 label="Search" label_selected="Search" left_delta="120" mouse_opaque="true" 283 label="Search" label_selected="Search" left_delta="100" mouse_opaque="true"
237 name="Search" tool_tip="Search" width="80" /> 284 name="Search" tool_tip="Search" width="80" />
238 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 285 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
239 height="20" label="Delete" label_selected="Delete" left="80" 286 height="20" label="Delete" label_selected="Delete" left="80"
@@ -245,7 +292,7 @@
245 multi_select="false" name="results" search_column="2" width="339"> 292 multi_select="false" name="results" search_column="2" width="339">
246 <column label="" name="icon" width="24" /> 293 <column label="" name="icon" width="24" />
247 <column label="" name="type" width="-1" /> 294 <column label="" name="type" width="-1" />
248 <column label="Name" name="name" width="178" /> 295 <column label="Name" name="name" dynamicwidth="true" />
249 <column label="Time (PT)" name="date" sort="time" width="106" /> 296 <column label="Time (PT)" name="date" sort="time" width="106" />
250 <column label="" name="event_id" width="-1" /> 297 <column label="" name="event_id" width="-1" />
251 <column label="Time" name="time" width="-1" /> 298 <column label="Time" name="time" width="-1" />
@@ -279,7 +326,7 @@
279 label="Include parcels with Mature Content" left="24" mouse_opaque="true" 326 label="Include parcels with Mature Content" left="24" mouse_opaque="true"
280 name="incmature" width="204" /> 327 name="incmature" width="204" />
281 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 328 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
282 bottom="-38" drop_shadow_visible="true" follows="left|top" 329 bottom="-38" drop_shadow_visible="true" follows="right|top"
283 font="SansSerifSmall" h_pad="0" halign="left" height="32" left_delta="326" 330 font="SansSerifSmall" h_pad="0" halign="left" height="32" left_delta="326"
284 mouse_opaque="true" 331 mouse_opaque="true"
285 name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there." 332 name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there."
@@ -294,7 +341,7 @@ the amount of time people spend there.
294 multi_select="false" name="results" search_column="2" width="339"> 341 multi_select="false" name="results" search_column="2" width="339">
295 <column label="" name="icon" width="24" /> 342 <column label="" name="icon" width="24" />
296 <column label="" name="type" width="-1" /> 343 <column label="" name="type" width="-1" />
297 <column label="Name" name="name" width="215" /> 344 <column label="Name" name="name" dynamicwidth="true" />
298 <column label="Traffic" name="dwell" width="70" /> 345 <column label="Traffic" name="dwell" width="70" />
299 </scroll_list> 346 </scroll_list>
300 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 347 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -369,7 +416,7 @@ To buy direct, visit the land and click on the place name in the title bar.
369 multi_select="false" name="results" search_column="2" width="387"> 416 multi_select="false" name="results" search_column="2" width="387">
370 <column label="" name="icon" width="24" /> 417 <column label="" name="icon" width="24" />
371 <column label="" name="type" width="-1" /> 418 <column label="" name="type" width="-1" />
372 <column label="Name" name="name" width="164" /> 419 <column label="Name" name="name" dynamicwidth="true" />
373 <column label="L$ Price" name="price" width="65" /> 420 <column label="L$ Price" name="price" width="65" />
374 <column label="Area" name="area" width="50" /> 421 <column label="Area" name="area" width="50" />
375 <column label="L$/sq.m" name="per_meter" width="65" /> 422 <column label="L$/sq.m" name="per_meter" width="65" />
@@ -399,9 +446,9 @@ To buy direct, visit the land and click on the place name in the title bar.
399 max_length="63" mouse_opaque="true" name="name" width="128" /> 446 max_length="63" mouse_opaque="true" name="name" width="128" />
400 <check_box bottom_delta="-18" control_name="ShowMatureSims" follows="left|top" 447 <check_box bottom_delta="-18" control_name="ShowMatureSims" follows="left|top"
401 font="SansSerifSmall" height="16" initial_value="false" 448 font="SansSerifSmall" height="16" initial_value="false"
402 label="Include parcels with Mature content" left="42" mouse_opaque="true" 449 label="Include parcels with Mature content" left_delta="0" mouse_opaque="true"
403 name="incmature" width="204" /> 450 name="incmature" width="204" />
404 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="178" 451 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="182"
405 max_chars="20" mouse_opaque="true" name="Category" width="128"> 452 max_chars="20" mouse_opaque="true" name="Category" width="128">
406 <combo_item name="AnyCategory" value="any"> 453 <combo_item name="AnyCategory" value="any">
407 Any Category 454 Any Category
@@ -446,14 +493,26 @@ To buy direct, visit the land and click on the place name in the title bar.
446 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 493 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
447 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true" 494 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
448 name="Search" width="70" /> 495 name="Search" width="70" />
449 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 496 <scroll_list
450 draw_heading="true" fg_disable_color="1, 1, 1, 1" 497 name="results"
451 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1" 498 background_visible="false"
452 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 499 bottom="-513"
453 multi_select="false" name="results" search_column="2" width="339"> 500 column_padding="0"
501 draw_border="true"
502 draw_heading="true"
503 fg_disable_color="1, 1, 1, 1"
504 fg_selected_color="1, 1, 1, 1"
505 fg_unselected_color="1, 1, 1, 1"
506 follows="left|top|right|bottom"
507 height="464"
508 left="4"
509 mouse_opaque="true"
510 multi_select="false"
511 search_column="2"
512 width="339">
454 <column label="" name="icon" width="24" /> 513 <column label="" name="icon" width="24" />
455 <column label="" name="type" width="-1" /> 514 <column label="" name="type" width="-1" />
456 <column label="Name" name="name" width="215" /> 515 <column label="Name" name="name" dynamicwidth="true" />
457 <column label="Traffic" name="dwell" width="75" /> 516 <column label="Traffic" name="dwell" width="75" />
458 </scroll_list> 517 </scroll_list>
459 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 518 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -529,8 +588,8 @@ To buy direct, visit the land and click on the place name in the title bar.
529 multi_select="false" name="results" search_column="2" width="339"> 588 multi_select="false" name="results" search_column="2" width="339">
530 <column label="" name="icon" width="24" sort="score" sort_ascending="false" /> 589 <column label="" name="icon" width="24" sort="score" sort_ascending="false" />
531 <column label="" name="type" width="-1" /> 590 <column label="" name="type" width="-1" />
532 <column label="Name" name="name" width="184" /> 591 <column label="Name" name="name" dynamicwidth="true" />
533 <column label="Members" name="members" width="100" halign="right" sort_ascending="false" /> 592 <column label="Members" name="members" width="100" halign="left" sort_ascending="false" />
534 <column label="" name="score" width="-1"/> 593 <column label="" name="score" width="-1"/>
535 </scroll_list> 594 </scroll_list>
536 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 595 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -538,15 +597,60 @@ To buy direct, visit the land and click on the place name in the title bar.
538 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 597 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
539 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 598 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
540 </panel> 599 </panel>
600 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
601 label="All (old)" left="1" mouse_opaque="false"
602 name="find_all_old_panel" width="778">
603 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
604 height="20" label="&lt; Prev" label_selected="&lt; Prev" left="80"
605 mouse_opaque="true" name="&lt; Prev" width="60" />
606 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
607 height="20" label="Next &gt;" label_selected="Next &gt;"
608 mouse_opaque="true" name="Next &gt;" width="60" />
609 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
610 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
611 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
612 name="find" v_pad="0" width="50">
613 Find:
614 </text>
615 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
616 follows="left|top" font="SansSerif" height="18" left_delta="38"
617 max_length="63" mouse_opaque="true" name="name" width="128" />
618 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
619 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
620 name="Search" width="70" />
621 <check_box bottom="-22" control_name="ShowMatureFindAll" follows="left|top"
622 font="SansSerifSmall" height="16" initial_value="false"
623 label="Include Mature content" left_delta="78" mouse_opaque="true"
624 name="incmature" width="156" />
625 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true"
626 draw_heading="false" fg_disable_color="1, 1, 1, 1"
627 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
628 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
629 multi_select="false" name="results" search_column="1" width="339">
630 <column label="" name="icon" width="24" />
631 <column label="Name" name="name" width="235" />
632 <column label="Price" name="price" width="90" />
633 <column label="Time (PT)" name="date" width="90" />
634 <column label="Time" name="time" width="-1" />
635 <column label="Traffic" name="dwell" width="90" />
636 <column label="Area" name="area" width="90" />
637 <column label="L$/sq.m" name="per_meter" width="90" />
638 <column label="Online" name="online" width="90" />
639 <column label="Members" name="members" width="90" />
640 </scroll_list>
641 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
642 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
643 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
644 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
645 </panel>
541 </tab_container> 646 </tab_container>
542 <panel bottom="0" height="470" left="340" name="classified_details_panel" width="440" /> 647 <panel follows="right|top" bottom="-560" height="470" left="340" name="classified_details_panel" width="440" />
543 <panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430" /> 648 <panel follows="right|top" bottom="-560" height="486" left="350" name="Panel Avatar" width="430" />
544 <panel bottom="0" height="470" left="340" name="event_details_panel" width="440" /> 649 <panel follows="right|top" bottom="-560" height="470" left="340" name="event_details_panel" width="440" />
545 <panel bottom="0" height="515" left="350" name="group_details_panel_holder" 650 <panel follows="right|top" bottom="-580" height="515" left="350" name="group_details_panel_holder" width="430">
546 width="430"> 651 <panel follows="right|top" bottom="0" height="470" left="0" name="group_details_panel" width="430" />
547 <panel bottom="0" height="470" left="0" name="group_details_panel" width="430" />
548 </panel> 652 </panel>
549 <panel bottom="20" height="470" left="340" name="place_details_panel" width="440" /> 653 <panel follows="right|top" bottom="20" height="470" left="340" name="place_details_panel" width="440" />
550 <panel bottom="20" height="470" left="385" name="place_details_small_panel" 654 <panel follows="right|top" bottom="20" height="470" left="385" name="place_details_small_panel"
551 width="395" /> 655 width="395" />
552</floater> 656</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_html_help.xml b/linden/indra/newview/skins/xui/en-us/floater_html_help.xml
index fa5a7db..91c0873 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_html_help.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_html_help.xml
@@ -5,15 +5,21 @@
5 <button bottom="-45" follows="top|left" font="SansSerifSmall" height="20" label="Back" 5 <button bottom="-45" follows="top|left" font="SansSerifSmall" height="20" label="Back"
6 left="15" name="back_btn" width="70" /> 6 left="15" name="back_btn" width="70" />
7 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20" 7 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
8 label="Home" left_delta="75" name="home_btn" width="70" />
9 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
10 label="Forward" left_delta="75" name="forward_btn" width="70" /> 8 label="Forward" left_delta="75" name="forward_btn" width="70" />
11 <button bottom="10" follows="bottom|right" font="SansSerifSmall" height="20" 9 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
12 label="Close" name="close_btn" right="-10" width="50" /> 10 label="Home" left_delta="75" name="home_btn" width="70" />
13 <web_browser bottom="40" follows="top|left|bottom|right" font="SansSerifSmall" left="15" 11 <text bottom_delta="5"
14 name="html_help_browser" right="-15" top="-55" start_url="http://secondlife.com/app/help/" /> 12 follows="top|left|right"
15 <text bottom="5" follows="bottom|left|right" left="15" name="status_text" right="-70" 13 left_delta="100"
16 top="25"> 14 name="status_text"
17 Done 15 right="-5"
16 height="16">
17 Ready
18 </text> 18 </text>
19 <web_browser name="html_help_browser"
20 bottom="10"
21 follows="top|left|bottom|right"
22 font="SansSerifSmall"
23 left="15"
24 right="-15" top="-55" start_url="http://secondlife.com/app/help/" />
19</floater> 25</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml b/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
index 0aa42cb..9e2c410 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
@@ -362,7 +362,7 @@
362 600 362 600
363 </text> 363 </text>
364 <text hidden="true" name="network_ping_warning_ms"> 364 <text hidden="true" name="network_ping_warning_ms">
365 250 365 300
366 </text> 366 </text>
367 <text hidden="true" name="network_ping_critical_msg"> 367 <text hidden="true" name="network_ping_critical_msg">
368 Connection ping time is over [NETWORK_PING_CRITICAL] ms 368 Connection ping time is over [NETWORK_PING_CRITICAL] ms
@@ -423,4 +423,4 @@
423 <text hidden="true" name="bigger_label"> 423 <text hidden="true" name="bigger_label">
424 &lt;&lt; 424 &lt;&lt;
425 </text> 425 </text>
426</floater> \ No newline at end of file 426</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_landmark_ctrl.xml b/linden/indra/newview/skins/xui/en-us/floater_landmark_ctrl.xml
new file mode 100644
index 0000000..07a709a
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_landmark_ctrl.xml
@@ -0,0 +1,40 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-516" can_close="true" can_drag_on_left="false" can_minimize="false"
3 can_resize="true" can_tear_off="true" enabled="true" height="320"
4 hidden="false" left="478" min_height="310" min_width="241" rect_control="FloaterLandmarkRect"
5 mouse_opaque="true" name="landmarkpicker" title="Organize: Landmarks" width="310">
6 <check_box bottom="-44" enabled="true" follows="left|top" font="SansSerifSmall"
7 height="24" hidden="false" initial_value="true" label="Show Folders"
8 left="175" mouse_opaque="true" name="show_folders_check"
9 radio_style="false" width="201" />
10 <search_editor bottom="-36" enabled="true" follows="left|top" height="16" hidden="false"
11 left="20" mouse_opaque="true" name="inventory search editor" width="231" />
12 <inventory_panel allow_multi_select="false" border="true" bottom="-256" enabled="true"
13 follows="left|top|right|bottom" height="216" hidden="false" left="20"
14 mouse_opaque="true" name="inventory panel"
15 sort_order="TexturePickerSortOrder" width="231" />
16 <button bottom="-282" enabled="true" follows="bottom" font="SansSerif"
17 halign="center" height="20" hidden="false" label="New"
18 label_selected="New" left="20" mouse_opaque="true" name="New"
19 scale_image="true" width="100" />
20 <button bottom="-282" enabled="true" follows="bottom" font="SansSerif"
21 halign="center" height="20" hidden="false" label="Rename"
22 label_selected="Rename" left="125" mouse_opaque="true" name="Rename"
23 scale_image="true" width="100" />
24 <button bottom="-282" enabled="true" follows="bottom" font="SansSerif"
25 halign="center" height="20" hidden="false" label="New Folder"
26 label_selected="New Folder" left="230" mouse_opaque="true" name="NewFolder"
27 scale_image="true" width="100" />
28 <button bottom="-307" enabled="true" follows="bottom" font="SansSerif"
29 halign="center" height="20" hidden="false" label="Edit"
30 label_selected="Edit" left="20" mouse_opaque="true" name="Edit"
31 scale_image="true" width="100" />
32 <button bottom="-307" enabled="true" follows="bottom" font="SansSerif"
33 halign="center" height="20" hidden="false" label="Delete"
34 label_selected="Delete" left="125" mouse_opaque="true" name="Delete"
35 scale_image="true" width="100" />
36 <button bottom="-307" enabled="true" follows="bottom" font="SansSerif"
37 halign="center" height="20" hidden="false" label="Close"
38 label_selected="Close" left="230" mouse_opaque="true" name="Close"
39 scale_image="true" width="100" />
40</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_classified.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_classified.xml
new file mode 100644
index 0000000..5a6e739
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_classified.xml
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-311" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="510" hidden="false" left="242"
4 min_height="480" min_width="450" mouse_opaque="true"
5 name="classified_preview" width="440" title="Classified Information" rect_control="PreviewClassifiedRect">
6 <panel follows="bottom|left" bottom="20" height="470" left="0" name="classified_details_panel" width="440" />
7
8</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_event.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_event.xml
new file mode 100644
index 0000000..2eaebfe
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_event.xml
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-311" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="510" hidden="false" left="242"
4 min_height="480" min_width="450" mouse_opaque="true"
5 name="event_preview" width="440" title="Event Information" rect_control="PreviewEventRect">
6 <panel follows="bottom|left" bottom="20" height="470" left="0" name="event_details_panel" width="440" />
7
8</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_existing_landmark.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_existing_landmark.xml
index 7d7d435..cbf5da4 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_preview_existing_landmark.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_existing_landmark.xml
@@ -1,28 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-311" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-311" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="90" hidden="false" left="242" 3 can_resize="false" enabled="true" height="495" hidden="false" left="242"
4 min_height="90" min_width="300" mouse_opaque="true" 4 min_height="510" min_width="460" mouse_opaque="true"
5 name="existing_landmark_preview" width="300"> 5 name="existing_landmark_preview" width="440">
6 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-43" 6 <panel follows="bottom|left" bottom="0" height="475" left="0" name="place_details_panel" width="440" />
7 enabled="true" follows="left|top|right" font="SansSerif" 7
8 handle_edit_keys_directly="false" height="19" hidden="false" left="13"
9 max_length="127" mouse_opaque="true" name="desc"
10 select_all_on_focus_received="false" select_on_focus="false" width="274" />
11 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
12 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top"
13 font="SansSerif" h_pad="0" halign="left" height="19" hidden="false"
14 left="13" mouse_opaque="true" name="desc txt" v_pad="0" width="80">
15 Description:
16 </text>
17 <icon bottom="-21" color="1 1 1 1" enabled="true" follows="left|top" height="16"
18 hidden="false" image_name="inv_item_landmark_visited.tga" left="5"
19 mouse_opaque="true" name="icon_landmark" width="16" />
20 <button bottom="-77" enabled="true" follows="left|bottom" font="SansSerif"
21 halign="center" height="20" hidden="false" label="Teleport"
22 label_selected="" left="13" mouse_opaque="true" name="Teleport btn"
23 width="100" />
24 <button bottom="-77" enabled="true" follows="left|bottom" font="SansSerif"
25 halign="center" height="20" hidden="false" label="Show on Map"
26 label_selected="" left="126" mouse_opaque="true" name="Show on Map btn"
27 width="100" />
28</floater> 8</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_url.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_url.xml
new file mode 100644
index 0000000..fcc04c5
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_url.xml
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-311" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="495" hidden="false" left="242"
4 mouse_opaque="true"
5 name="url_preview" width="440" title="Place Information" rect_control="PreviewURLRect">
6 <panel follows="bottom|left" bottom="0" height="475" left="0" name="place_details_panel" width="440" />
7
8</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
index a2ad5f1..cb237fa 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
@@ -426,7 +426,7 @@
426 hidden="false" initial_value="false" label="Allow anyone to copy" left="10" 426 hidden="false" initial_value="false" label="Allow anyone to copy" left="10"
427 mouse_opaque="true" name="checkbox allow everyone copy" width="141" /> 427 mouse_opaque="true" name="checkbox allow everyone copy" width="141" />
428 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 428 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
429 initial_value="false" label="Show in Search" left="10" 429 initial_value="false" label="Show in search" left="10"
430 name="search_check" tool_tip="Let people see this object in search results" width="78" /> 430 name="search_check" tool_tip="Let people see this object in search results" width="78" />
431 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 431 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
432 hidden="false" initial_value="false" label="For Sale" left="10" 432 hidden="false" initial_value="false" label="For Sale" left="10"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml b/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
index a57a8b6..c13b81e 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
@@ -184,9 +184,9 @@
184 <on_click filter="" function="Inventory.DoToSelected" userdata="open" /> 184 <on_click filter="" function="Inventory.DoToSelected" userdata="open" />
185 </menu_item_call> 185 </menu_item_call>
186 <menu_item_separator name="Landmark Separator" /> 186 <menu_item_separator name="Landmark Separator" />
187 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Teleport To Landmark" 187 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="About Landmark"
188 left="0" mouse_opaque="true" name="Teleport To Landmark" width="128"> 188 left="0" mouse_opaque="true" name="Teleport To Landmark" width="128">
189 <on_click filter="" function="Inventory.DoToSelected" userdata="teleport" /> 189 <on_click filter="" function="Inventory.DoToSelected" userdata="about" />
190 </menu_item_call> 190 </menu_item_call>
191 <menu_item_separator name="Animation Separator" /> 191 <menu_item_separator name="Animation Separator" />
192 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Play in World" left="0" 192 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Play in World" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_slurl.xml b/linden/indra/newview/skins/xui/en-us/menu_slurl.xml
new file mode 100644
index 0000000..0682334
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/menu_slurl.xml
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<menu bottom="100" color="0, 0, 0, 1" drop_shadow="true" height="101" hidden="false"
3 left="100" mouse_opaque="false" name="Popup" opaque="true" width="128">
4 <menu_item_separator name="Landmark Separator" />
5 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="About URL"
6 left="0" mouse_opaque="true" name="about_url" width="128">
7 <on_click filter="" function="Inventory.DoToSelected" userdata="about" />
8 </menu_item_call>
9 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Teleport to URL"
10 left="0" mouse_opaque="true" name="teleport_to_url" width="128">
11 <on_click filter="" function="Inventory.DoToSelected" userdata="about" />
12 </menu_item_call>
13 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Show on Map"
14 left="0" mouse_opaque="true" name="show_on_map" width="128">
15 <on_click filter="" function="Inventory.DoToSelected" userdata="about" />
16 </menu_item_call>
17</menu>
diff --git a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
index cb6835c..3b289d4 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
@@ -810,7 +810,7 @@
810 left="0" mouse_opaque="true" name="separator7" width="250" /> 810 left="0" mouse_opaque="true" name="separator7" width="250" />
811 <menu bottom="-554" drop_shadow="true" enabled="true" height="109" 811 <menu bottom="-554" drop_shadow="true" enabled="true" height="109"
812 hidden="false" label="Bug Reporting" left="0" mouse_opaque="false" 812 hidden="false" label="Bug Reporting" left="0" mouse_opaque="false"
813 name="Select Tool" opaque="true" tear_off="true" create_jump_keys="true" 813 name="Bug Reporting" opaque="true" tear_off="true" create_jump_keys="true"
814 width="118"> 814 width="118">
815 <menu_item_call bottom="-94" enabled="true" height="19" hidden="false" 815 <menu_item_call bottom="-94" enabled="true" height="19" hidden="false"
816 label="Public Issue Tracker..." left="0" mouse_opaque="true" 816 label="Public Issue Tracker..." left="0" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/xui/en-us/notify.xml b/linden/indra/newview/skins/xui/en-us/notify.xml
index 5bf5c78..ad9e049 100644
--- a/linden/indra/newview/skins/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/xui/en-us/notify.xml
@@ -960,6 +960,11 @@ Click Accept to join the call or Decline to decline the invitation. Click Mute t
960 [VOICE_CHANNEL_NAME] is not available to take your call. You will now be reconnected to spatial voice chat. 960 [VOICE_CHANNEL_NAME] is not available to take your call. You will now be reconnected to spatial voice chat.
961 </message> 961 </message>
962 </notify> 962 </notify>
963 <notify name="VoiceChannelJoinFailed" tip="true" unique="true">
964 <message name="message">
965 Failed to connect to [VOICE_CHANNEL_NAME], please try again later. You will now be reconnected to spatial voice chat.
966 </message>
967 </notify>
963 <notify name="VoiceLoginRetry" tip="true" unique="true" duration="10"> 968 <notify name="VoiceLoginRetry" tip="true" unique="true" duration="10">
964 <message name="message"> 969 <message name="message">
965 We are creating a voice channel for you. This may take up to one minute. 970 We are creating a voice channel for you. This may take up to one minute.
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
index 2e16380..fa64706 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
@@ -62,7 +62,7 @@
62 mouse_opaque="true" name="label2" v_pad="0" width="121"> 62 mouse_opaque="true" name="label2" v_pad="0" width="121">
63 Account: 63 Account:
64 </text> 64 </text>
65 <view_border blevel_style="in" bottom_delta="-32" follows="left|top" height="32" left="279" 65 <view_border bevel_style="in" bottom_delta="-32" follows="left|top" height="32" left="279"
66 mouse_opaque="false" name="acct_border" width="121" /> 66 mouse_opaque="false" name="acct_border" width="121" />
67 <text bg_color="0, 0, 0, 0" bg_visible="false" border_drop_shadow_visible="false" 67 <text bg_color="0, 0, 0, 0" bg_visible="false" border_drop_shadow_visible="false"
68 border_visible="true" bottom_delta="0" drop_shadow_visible="true" 68 border_visible="true" bottom_delta="0" drop_shadow_visible="true"
@@ -144,7 +144,7 @@
144 Drop inventory item here. 144 Drop inventory item here.
145 </text> 145 </text>
146 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16" 146 <check_box bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="16"
147 initial_value="false" label="Show In Search" left="75" 147 initial_value="false" label="Show in search" left="75"
148 mouse_opaque="true" name="allow_publish" 148 mouse_opaque="true" name="allow_publish"
149 tool_tip="Publish extra profile information such as description and image in Search." width="130" /> 149 tool_tip="Publish extra profile information such as description and image in Search." width="130" />
150 <button bottom="-423" follows="left|top" font="SansSerif" halign="center" height="16" 150 <button bottom="-423" follows="left|top" font="SansSerif" halign="center" height="16"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
index 05252ab..fb1e082 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
@@ -79,25 +79,25 @@ Hover your mouse over the options for more help.
79 bottom_delta="-104" follows="left|top" height="96" left_delta="0" 79 bottom_delta="-104" follows="left|top" height="96" left_delta="0"
80 mouse_opaque="true" name="preferences_container" width="404"> 80 mouse_opaque="true" name="preferences_container" width="404">
81 <check_box bottom="-20" follows="left|top" font="SansSerifSmall" height="16" 81 <check_box bottom="-20" follows="left|top" font="SansSerifSmall" height="16"
82 initial_value="true" label="Show In Search" left="4" 82 initial_value="true" label="Show in search" left="4"
83 mouse_opaque="true" name="show_in_group_list" radio_style="false" 83 mouse_opaque="true" name="show_in_group_list" radio_style="false"
84 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45" 84 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
85 tool_tip="Let people see this group in search results." 85 tool_tip="Let people see this group in search results."
86 width="95" /> 86 width="95" />
87<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 87<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
88 initial_value="false" label="Mature Group" left_delta="0" mouse_opaque="true" 88 initial_value="false" label="Mature group" left_delta="0" mouse_opaque="true"
89 name="mature" radio_style="false" 89 name="mature" radio_style="false"
90 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45" 90 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
91 tool_tip="Sets whether your group information is considered mature." 91 tool_tip="Sets whether your group information is considered mature."
92 visible="true" width="95" /> 92 visible="true" width="95" />
93 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16" 93 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16"
94 initial_value="false" label="Open Enrollment" left="4" 94 initial_value="false" label="Open enrollment" left="4"
95 mouse_opaque="true" name="open_enrollement" radio_style="false" 95 mouse_opaque="true" name="open_enrollement" radio_style="false"
96 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45" 96 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
97 tool_tip="Sets whether this group allows new members to join without being invited." 97 tool_tip="Sets whether this group allows new members to join without being invited."
98 width="95" /> 98 width="95" />
99 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 99 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
100 initial_value="false" label="Enrollment Fee: L$" left_delta="16" 100 initial_value="false" label="Enrollment fee: L$" left_delta="16"
101 max_length="5" mouse_opaque="true" name="check_enrollment_fee" 101 max_length="5" mouse_opaque="true" name="check_enrollment_fee"
102 radio_style="false" text_disabled_color="0.67647, 0.76275, 0.93529, 0.45" 102 radio_style="false" text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
103 tool_tip="Sets whether to require an enrollment fee to join the group." 103 tool_tip="Sets whether to require an enrollment fee to join the group."
@@ -121,12 +121,12 @@ Hover your mouse over the options for more help.
121 tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active." /> 121 tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active." />
122 </panel> 122 </panel>
123 <check_box follows="left|top" font="SansSerifSmall" height="16" bottom_delta="-25" 123 <check_box follows="left|top" font="SansSerifSmall" height="16" bottom_delta="-25"
124 initial_value="false" label="Receive Group Notices" left_delta="0" 124 initial_value="false" label="Receive group notices" left_delta="0"
125 mouse_opaque="true" name="receive_notices" radio_style="false" 125 mouse_opaque="true" name="receive_notices" radio_style="false"
126 tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you." 126 tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."
127 width="95" /> 127 width="95" />
128 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 128 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
129 initial_value="false" label="List Group in Profile" left_delta="0" 129 initial_value="false" label="List group in my profile" left_delta="0"
130 mouse_opaque="true" name="list_groups_in_profile" radio_style="false" 130 mouse_opaque="true" name="list_groups_in_profile" radio_style="false"
131 tool_tip="Sets whether you want to list this group in your Profile" 131 tool_tip="Sets whether you want to list this group in your Profile"
132 width="95" /> 132 width="95" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_place.xml b/linden/indra/newview/skins/xui/en-us/panel_place.xml
index 06efe6c..479e8be 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_place.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_place.xml
@@ -1,29 +1,53 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="false" bottom="20" can_close="true" can_minimize="true" 2<panel border="false" bottom="20" can_close="true" can_minimize="true"
3 can_resize="false" follows="bottom|left" height="470" left="330" 3 can_resize="false" follows="bottom|left" height="400" left="330"
4 name="Place" title="Place" width="450"> 4 name="Place" title="Place" width="450">
5 <texture_picker bottom="-315" follows="left|top" height="300" left="20" name="snapshot_ctrl" 5 <texture_picker bottom="95" follows="left|top" height="300" left="20" name="snapshot_ctrl"
6 width="400" /> 6 width="400" />
7 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 7 <text bottom_delta="-10" follows="left|top"
8 font="SansSerif" height="20" left="20" name="name_editor" 8 font="SansSerif" height="20" left="20">
9 text_readonly_color="white" width="400" /> 9 Name:
10 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 10 </text>
11 <text bottom_delta="0" follows="left|top"
12 font="SansSerif" height="20" left="60" name="name_editor"
13 text_color="white"
14 width="361" />
15
16 <text bottom_delta="-20" follows="left|top"
17 font="SansSerif" height="20" left="20">
18 Description:
19 </text>
20 <text_editor bottom_delta="-68" bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif"
11 height="70" left="20" max_length="1023" name="desc_editor" 21 height="70" left="20" max_length="1023" name="desc_editor"
12 text_readonly_color="white" width="400" word_wrap="true" /> 22 text_readonly_color="white" width="400" word_wrap="true"></text_editor>
13 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 23
14 height="20" left="20" name="info_editor" text_readonly_color="white" 24 <text bottom_delta="-25" follows="left|top"
15 width="400" /> 25 font="SansSerif" height="20" left="20">
16 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 26 Information:
17 height="20" left="20" name="location_editor" text_readonly_color="white" 27 </text>
18 width="400" /> 28 <text bottom_delta="0" follows="left|top" font="SansSerif"
19 <button bottom_delta="-30" follows="left|top" height="20" label="Teleport" left="20" 29 text_color="white"
20 name="teleport_btn" width="120" /> 30 height="20" left="95" name="info_editor" width="328" />
21 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="150" 31
32 <text bottom_delta="-20" follows="left|top"
33 font="SansSerif" height="20" left="20">
34 Location:
35 </text>
36 <text bottom_delta="0" follows="left|top" font="SansSerif"
37 height="20" left="95" name="location_editor"
38 width="342" text_color="white" />
39
40 <button bottom_delta="-20" follows="left|top" height="20" label="Teleport" left="20"
41 name="teleport_btn" width="100" />
42 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130"
22 name="map_btn" width="100" /> 43 name="map_btn" width="100" />
23 <button bottom_delta="0" follows="left|top" height="20" label="Bids..." left="275" 44 <button bottom_delta="0" follows="left|top" height="20" label="Bids..." left="275"
24 name="auction_btn" width="80" /> 45 name="auction_btn" width="80" />
25 <string name="traffic_text">Traffic: [TRAFFIC]</string> 46 <string name="traffic_text">Traffic: [TRAFFIC] </string>
26 <string name="area_text">, Area: [AREA] sq. m.</string> 47 <string name="area_text"> Area: [AREA] sq. m. </string>
27 <string name="forsale_text">, For Sale for L$ [PRICE]</string> 48 <string name="forsale_text"> For Sale for L$ [PRICE] </string>
28 <string name="auction_text">, Auction ID [ID].</string> 49 <string name="auction_text"> Auction ID [ID]. </string>
50 <text hidden="true" name="server_update_text">Place information not available without server update.</text>
51 <text hidden="true" name="server_error_text">Information about this location is unavailable at this time, please try again later.</text>
52 <text hidden="true" name="server_forbidden_text">Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner.</text>
29</panel> 53</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_place_small.xml b/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
index f7523df..0b846f1 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
@@ -1,29 +1,53 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="false" bottom="20" can_close="true" can_minimize="true" 2<panel border="false" bottom="20" can_close="true" can_minimize="true"
3 can_resize="false" follows="bottom|left" height="470" left="380" 3 can_resize="false" follows="bottom|left" height="400" left="380"
4 name="Place" title="Place" width="450"> 4 name="Place" title="Place" width="450">
5 <texture_picker bottom="-285" follows="left|top" height="270" left="20" name="snapshot_ctrl" 5 <texture_picker bottom="-274" follows="left|top" height="270" left="20" name="snapshot_ctrl"
6 width="360" /> 6 width="360" />
7 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 7 <text bottom_delta="-12" follows="left|top"
8 font="SansSerif" height="20" left="20" name="name_editor" 8 font="SansSerif" height="20" left="20">
9 text_readonly_color="white" width="360" /> 9 Name:
10 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 10 </text>
11 <text bottom_delta="0" follows="left|top"
12 font="SansSerif" height="20" left="60" name="name_editor"
13 text_color="white"
14 width="320" />
15
16 <text bottom_delta="-24" follows="left|top"
17 font="SansSerif" height="20" left="20">
18 Description:
19 </text>
20 <text_editor bottom_delta="-68" bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif"
11 height="70" left="20" max_length="1023" name="desc_editor" 21 height="70" left="20" max_length="1023" name="desc_editor"
12 text_readonly_color="white" width="360" word_wrap="true" /> 22 text_readonly_color="white" width="360" word_wrap="true"></text_editor>
13 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 23
14 height="20" left="20" name="info_editor" text_readonly_color="white" 24 <text bottom_delta="-30" follows="left|top"
15 width="360" /> 25 font="SansSerif" height="20" left="20">
16 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 26 Information:
17 height="20" left="20" name="location_editor" text_readonly_color="white" 27 </text>
18 width="360" /> 28 <text bottom_delta="0" follows="left|top" font="SansSerif"
19 <button bottom_delta="-30" follows="left|top" height="20" label="Teleport" left="20" 29 text_color="white"
30 height="20" left="95" name="info_editor" width="328" />
31
32 <text bottom_delta="-30" follows="left|top"
33 font="SansSerif" height="20" left="20">
34 Location:
35 </text>
36 <text bottom_delta="0" follows="left|top" font="SansSerif"
37 height="20" left="95" name="location_editor"
38 width="342" text_color="white" />
39
40 <button bottom_delta="-25" follows="left|top" height="20" label="Teleport" left="20"
20 name="teleport_btn" width="100" /> 41 name="teleport_btn" width="100" />
21 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="125" 42 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130"
22 name="map_btn" width="100" /> 43 name="map_btn" width="100" />
23 <button bottom_delta="0" follows="left|top" height="20" label="Bids..." left="275" 44 <button bottom_delta="0" follows="left|top" height="20" label="Bids..." left="275"
24 name="auction_btn" width="80" /> 45 name="auction_btn" width="80" />
25 <string name="traffic_text">Traffic: [TRAFFIC]</string> 46 <string name="traffic_text">Traffic: [TRAFFIC] </string>
26 <string name="area_text">, Area: [AREA] sq. m.</string> 47 <string name="area_text"> Area: [AREA] sq. m. </string>
27 <string name="forsale_text">, For Sale for L$ [PRICE]</string> 48 <string name="forsale_text"> For Sale for L$ [PRICE] </string>
28 <string name="auction_text">, Auction ID [ID].</string> 49 <string name="auction_text"> Auction ID [ID]. </string>
50 <text hidden="true" name="server_update_text">Place information not available without server update.</text>
51 <text hidden="true" name="server_error_text">Information about this location is unavailable at this time, please try again later.</text>
52 <text hidden="true" name="server_forbidden_text">Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner.</text>
29</panel> 53</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_LCD.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_LCD.xml
new file mode 100644
index 0000000..bd2eeba
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_LCD.xml
@@ -0,0 +1,70 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="-409" enabled="true" follows="left|top|right|bottom"
3 height="408" hidden="false" label="Logitech LCD" left="102"
4 mouse_opaque="true" name="LCD Options" width="517">
5 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
6 bottom="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
7 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
8 left="10" mouse_opaque="true" name="LCD Destination:" v_pad="0"
9 width="266">
10 LCD Destination:
11 </text>
12
13 <radio_group bottom="-45" control_name="LCDDestination" draw_border="true" enabled="true"
14 follows="left|top" height="36" hidden="false" left="148"
15 mouse_opaque="true" name="LCDDestination" width="193">
16 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" hidden="false"
17 tool_tip="Display forms selected appear on Logitech G15 Keyboard LCD"
18 left="3" mouse_opaque="true" name="DestinationG15" width="463">
19 Logitech G15 Gaming Keyboard
20 </radio_item>
21 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16" hidden="false"
22 tool_tip="Display forms selected appear on Logitech Z10 Speaker LCD"
23 left="3" mouse_opaque="true" name="DestinationZ10" width="463">
24 Logitech Z10 Speakers
25 </radio_item>
26 </radio_group>
27
28 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
29 bottom="-68" drop_shadow_visible="true" enabled="true" follows="left|top"
30 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
31 left="10" mouse_opaque="true" name="LCD Display Options" v_pad="0"
32 width="266">
33 LCD Display Options:
34 </text>
35 <check_box bottom="-72" control_name="DisplayChat" enabled="true" follows="left|top"
36 font="SansSerifSmall" height="16" hidden="false" label="Display Chat"
37 left="148" mouse_opaque="true" name="DisplayChat" radio_style="false"
38 tool_tip="Display Last Chat line in LCD Window"
39 width="128" />
40 <check_box bottom="-90" control_name="DisplayIM" enabled="true"
41 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
42 initial_value="false" label="Display IM's"
43 left="148" mouse_opaque="true" name="DisplayIM"
44 radio_style="false"
45 tool_tip="Display Last IM in LCD Window" width="242" />
46 <check_box bottom="-108" control_name="DisplayRegion" enabled="true"
47 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
48 initial_value="false" label="Show Location Information" left="148"
49 mouse_opaque="true" name="DisplayRegion" radio_style="false"
50 tool_tip="Display current location information in LCD Window"
51 width="201" />
52 <check_box bottom="-126" control_name="DisplayLinden" enabled="true"
53 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
54 initial_value="false" label="Show Account Information" left="148"
55 mouse_opaque="true" name="DisplayLinden" radio_style="false"
56 tool_tip="Display current account information in LCD Window"
57 width="201" />
58 <check_box bottom="-144" control_name="DisplayDebug" enabled="true"
59 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
60 initial_value="false" label="Display Network Comms Info"
61 left="148" mouse_opaque="true" name="DisplayDebug"
62 radio_style="false"
63 tool_tip="Display debug information in LCD Window" width="242" />
64 <check_box bottom="-162" control_name="DisplayDebugConsole" enabled="true"
65 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
66 initial_value="false" label="Display Debug Info from Console"
67 left="148" mouse_opaque="true" name="DisplayDebugConsole"
68 radio_style="false"
69 tool_tip="Display console debug information in LCD Window" width="242" />
70</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
index 045be99..e02f1f6 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
@@ -35,7 +35,7 @@
35 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 35 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
36 left="205" name="parcel_changes_help" width="18" /> 36 left="205" name="parcel_changes_help" width="18" />
37 <check_box bottom_delta="-20" follows="left|top" height="20" 37 <check_box bottom_delta="-20" follows="left|top" height="20"
38 label="Block Parcel Search" left="10" tool_tip="Let people see this region and its parcels in 38 label="Block Land Show in Search" left="10" tool_tip="Let people see this region and its parcels in
39search results" name="block_parcel_search_check" width="80" /> 39search results" name="block_parcel_search_check" width="80" />
40 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 40 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
41 left="205" name="parcel_search_help" width="18" /> 41 left="205" name="parcel_search_help" width="18" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
index 51338f1..30bb347 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
@@ -15,7 +15,7 @@
15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom="-20" disabled_color="0 1 0 1" drop_shadow_visible="true" 16 bottom="-20" disabled_color="0 1 0 1" drop_shadow_visible="true"
17 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0" 17 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"
18 halign="right" height="18" hidden="false" left="-120" mouse_opaque="true" 18 halign="right" height="18" hidden="false" left="-210" mouse_opaque="true"
19 name="BalanceText" text_color="0 1 0 1" tool_tip="Account Balance" 19 name="BalanceText" text_color="0 1 0 1" tool_tip="Account Balance"
20 v_pad="2" width="76"> 20 v_pad="2" width="76">
21 Loading... 21 Loading...
@@ -26,13 +26,13 @@
26 image_disabled_selected="status_buy_currency_pressed.tga" 26 image_disabled_selected="status_buy_currency_pressed.tga"
27 image_selected="status_buy_currency_pressed.tga" 27 image_selected="status_buy_currency_pressed.tga"
28 image_unselected="status_buy_currency.tga" label="" label_selected="" 28 image_unselected="status_buy_currency.tga" label="" label_selected=""
29 left="-120" mouse_opaque="true" name="buycurrency" scale_image="true" 29 left="-210" mouse_opaque="true" name="buycurrency" scale_image="true"
30 tool_tip="Buy currency" width="16" /> 30 tool_tip="Buy currency" width="16" />
31 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false" 31 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false"
32 border_visible="false" 32 border_visible="false"
33 bottom="-20" disabled_color="1 1 1 1" drop_shadow_visible="true" 33 bottom="-20" disabled_color="1 1 1 1" drop_shadow_visible="true"
34 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0" 34 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"
35 halign="right" height="18" hidden="false" left="-210" mouse_opaque="true" 35 halign="right" height="18" hidden="false" left="-300" mouse_opaque="true"
36 name="TimeText" text_color="1 1 1 1" tool_tip="Current Time (Pacific)" 36 name="TimeText" text_color="1 1 1 1" tool_tip="Current Time (Pacific)"
37 v_pad="2" width="80"> 37 v_pad="2" width="80">
38 12:00 AM 38 12:00 AM
@@ -108,10 +108,49 @@
108 image_unselected="status_buy_land.tga" label="" label_selected="" 108 image_unselected="status_buy_land.tga" label="" label_selected=""
109 left="569" mouse_opaque="true" name="buyland" scale_image="true" 109 left="569" mouse_opaque="true" name="buyland" scale_image="true"
110 tool_tip="Buy this parcel" width="16" /> 110 tool_tip="Buy this parcel" width="16" />
111 <text hidden="true" name="packet_loss_tooltip"> 111
112 Packet Loss 112 <!-- When the user hits return we spawn the search directory,
113 </text> 113 which makes this lose focus. We don't want to commit twice.
114 <text hidden="true" name="bandwidth_tooltip"> 114 commit_on_focus_lost must be false. JC -->
115 Bandwidth 115 <line_editor bevel_style="in"
116 </text> 116 border_style="line"
117 border_thickness="1"
118 bottom="-18"
119 enabled="true"
120 follows="right|bottom"
121 font="SansSerif"
122 handle_edit_keys_directly="false"
123 commit_on_focus_lost="false"
124 height="20"
125 hidden="false"
126 label="Search"
127 left="-125"
128 max_length="254"
129 mouse_opaque="true"
130 name="search_editor"
131 select_all_on_focus_received="false"
132 select_on_focus="false"
133 tab_group="1"
134 tool_tip="Search Second Life"
135 width="104" />
136 <!-- *TODO: pressed state -->
137 <button bottom="-17"
138 enabled="true"
139 follows="right|bottom"
140 font="SansSerifSmall"
141 halign="center"
142 height="20"
143 hidden="false"
144 image_disabled="status_search.tga"
145 image_disabled_selected="status_search.tga"
146 image_selected="status_search.tga"
147 image_unselected="status_search.tga"
148 label=""
149 label_selected=""
150 left="-20"
151 mouse_opaque="true"
152 name="search_btn"
153 tool_tip="Search Second Life"
154 width="20" />
155
117</panel> 156</panel>
diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp
index a29185f..747d4e0 100644
--- a/linden/indra/newview/viewer.cpp
+++ b/linden/indra/newview/viewer.cpp
@@ -49,7 +49,6 @@
49#include <sys/stat.h> 49#include <sys/stat.h>
50#include <memory> 50#include <memory>
51#include <boost/tokenizer.hpp> 51#include <boost/tokenizer.hpp>
52#include "curl/curl.h"
53 52
54#if LL_WINDOWS 53#if LL_WINDOWS
55#include <fcntl.h> //_O_APPEND 54#include <fcntl.h> //_O_APPEND
@@ -156,7 +155,7 @@
156#include "llbutton.h" // For constants 155#include "llbutton.h" // For constants
157#include "llcallbacklist.h" 156#include "llcallbacklist.h"
158#include "llchatbar.h" 157#include "llchatbar.h"
159#include "llcombobox.h" // For constants 158//#include "llcombobox.h" // For constants
160#include "llconsole.h" 159#include "llconsole.h"
161#include "llcontainerview.h" 160#include "llcontainerview.h"
162#include "lldebugview.h" 161#include "lldebugview.h"
@@ -248,6 +247,13 @@
248#include "llwindebug.h" 247#include "llwindebug.h"
249#include "lldxhardware.h" 248#include "lldxhardware.h"
250#include "llwindowwin32.h" 249#include "llwindowwin32.h"
250
251// for Logitech LCD keyboards / speakers
252#ifndef LL_LOGITECH_LCD_H
253#include "lllogitechlcd.h"
254#endif
255extern void CreateLCDDebugWindows();
256
251#endif // LL_WINDOWS 257#endif // LL_WINDOWS
252 258
253#if LL_QUICKTIME_ENABLED 259#if LL_QUICKTIME_ENABLED
@@ -321,6 +327,9 @@ F32 gSimFrames;
321// 327//
322// Core Application globals 328// Core Application globals
323// 329//
330#if LL_WINDOWS
331llLCD *gLcdScreen = NULL;
332#endif
324 333
325LLString gSecondLife; 334LLString gSecondLife;
326LLString gWindowTitle; 335LLString gWindowTitle;
@@ -483,7 +492,6 @@ LLVector3 gRelativeWindVec(0.0, 0.0, 0.0);
483BOOL gVelocityInterpolate = TRUE; // (These are written once/frame with the data from gSavedSettings) 492BOOL gVelocityInterpolate = TRUE; // (These are written once/frame with the data from gSavedSettings)
484BOOL gPingInterpolate = TRUE; 493BOOL gPingInterpolate = TRUE;
485 494
486
487// 495//
488// System info 496// System info
489// 497//
@@ -1167,7 +1175,8 @@ int main( int argc, char **argv )
1167 // 1175 //
1168 // Check for another instance of the app running 1176 // Check for another instance of the app running
1169 // 1177 //
1170 //RN: if we received a URL, hand it off to the existing instance 1178
1179 // RN: if we received a URL, hand it off to the existing instance
1171 // don't call another_instance_running() when doing URL handoff, as 1180 // don't call another_instance_running() when doing URL handoff, as
1172 // it relies on checking a marker file which will not work when running 1181 // it relies on checking a marker file which will not work when running
1173 // out of different directories 1182 // out of different directories
@@ -1300,14 +1309,6 @@ int main( int argc, char **argv )
1300 if (gSecondInstance) 1309 if (gSecondInstance)
1301 { 1310 {
1302 gDisableVoice = TRUE; 1311 gDisableVoice = TRUE;
1303 /* Don't start another instance if using -multiple
1304 //RN: if we received a URL, hand it off to the existing instance
1305 if (LLURLSimString::parse())
1306 {
1307 LLURLSimString::send_to_other_instance();
1308 return 1;
1309 }
1310 */
1311 } 1312 }
1312 1313
1313 init_marker_file(); 1314 init_marker_file();
@@ -1689,6 +1690,13 @@ int main( int argc, char **argv )
1689 // Show watch cursor 1690 // Show watch cursor
1690 gViewerWindow->setCursor(UI_CURSOR_WAIT); 1691 gViewerWindow->setCursor(UI_CURSOR_WAIT);
1691 1692
1693
1694#if LL_WINDOWS && LL_LCD_COMPILE
1695 // start up an LCD window on a logitech keyboard, if there is one
1696 gLcdScreen = new llLCD(hInstance);
1697 CreateLCDDebugWindows();
1698#endif
1699
1692 // Finish view initialization 1700 // Finish view initialization
1693 gViewerWindow->initBase(); 1701 gViewerWindow->initBase();
1694 1702
@@ -1937,8 +1945,11 @@ void main_loop()
1937 gMovieMaker.Snap(); 1945 gMovieMaker.Snap();
1938 } 1946 }
1939#endif 1947#endif
1948#if LL_WINDOWS && LL_LCD_COMPILE
1949 // update LCD Screen
1950 gLcdScreen->UpdateDisplay();
1951#endif
1940 } 1952 }
1941
1942 } 1953 }
1943 1954
1944 // Sleep and run background threads 1955 // Sleep and run background threads
@@ -3509,6 +3520,14 @@ void update_statistics(U32 frame_count)
3509 3520
3510 LLViewerImageList::sTextureBits = 0; 3521 LLViewerImageList::sTextureBits = 0;
3511 LLViewerImageList::sTexturePackets = 0; 3522 LLViewerImageList::sTexturePackets = 0;
3523
3524#if LL_WINDOWS && LL_LCD_COMPILE
3525 bool LCDenabled = gLcdScreen->Enabled();
3526 gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, LCDenabled);
3527#else
3528 gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, false);
3529#endif
3530
3512} 3531}
3513 3532
3514// 3533//
@@ -5419,7 +5438,6 @@ int parse_args(int argc, char **argv)
5419 gArgs += argv[j]; 5438 gArgs += argv[j];
5420 gArgs += " "; 5439 gArgs += " ";
5421 5440
5422 LLString argument = argv[j];
5423 if ((!strcmp(argv[j], "-port")) && (++j < argc)) 5441 if ((!strcmp(argv[j], "-port")) && (++j < argc))
5424 { 5442 {
5425 sscanf(argv[j], "%u", &(gAgent.mViewerPort)); 5443 sscanf(argv[j], "%u", &(gAgent.mViewerPort));
@@ -6178,6 +6196,11 @@ void cleanup_app()
6178 gDXHardware.cleanup(); 6196 gDXHardware.cleanup();
6179#endif // LL_WINDOWS 6197#endif // LL_WINDOWS
6180 6198
6199#if LL_WINDOWS && LL_LCD_COMPILE
6200 // shut down the LCD window on a logitech keyboard, if there is one
6201 delete gLcdScreen;
6202#endif
6203
6181 if (!gVolumeMgr->cleanup()) 6204 if (!gVolumeMgr->cleanup())
6182 { 6205 {
6183 llwarns << "Remaining references in the volume manager!" << llendflush; 6206 llwarns << "Remaining references in the volume manager!" << llendflush;
diff --git a/linden/indra/newview/viewer.h b/linden/indra/newview/viewer.h
index c2ec173..afd62a7 100644
--- a/linden/indra/newview/viewer.h
+++ b/linden/indra/newview/viewer.h
@@ -36,7 +36,10 @@
36// Almost every file in the viewer depends on this file. 36// Almost every file in the viewer depends on this file.
37// If you need to add a shared class, put it in its own 37// If you need to add a shared class, put it in its own
38// little file. JC 38// little file. JC
39#include "lltransactiontypes.h" 39
40// *TODO: remove this, viewer.h doesn't need it, but there
41// are lots of .cpp files that depend on this recursive
42// dependency.
40#include "llviewercontrol.h" 43#include "llviewercontrol.h"
41 44
42// Enabled this definition to compile a 'hacked' viewer that 45// Enabled this definition to compile a 'hacked' viewer that
@@ -314,4 +317,9 @@ const std::vector<std::string>& getLoginURIs();
314const std::string& getHelperURI(); 317const std::string& getHelperURI();
315void resetURIs(); 318void resetURIs();
316 319
320#if LL_WINDOWS
321class llLCD;
322extern llLCD *gLcdScreen;
323#endif
324
317#endif 325#endif