From 3f27ba891ac4d032753b219b4b96d1ffbc9fb488 Mon Sep 17 00:00:00 2001
From: Jacek Antonelli
Date: Fri, 15 Aug 2008 23:45:16 -0500
Subject: Second Life viewer sources 1.18.5.0-RC
---
linden/doc/contributions.txt | 3 +
linden/etc/message.xml | 7 +
linden/indra/indra_complete/indra_complete.sln | 51 +-
linden/indra/indra_complete/indra_complete_vc8.sln | 4 +-
linden/indra/lib/python/indra/base/lluuid.py | 9 +-
linden/indra/llcommon/llpreprocessor.h | 3 +
linden/indra/llcommon/llstringtable.h | 8 +-
linden/indra/llcommon/llversionserver.h | 4 +-
linden/indra/llcommon/llversionviewer.h | 4 +-
linden/indra/llcommon/roles_constants.h | 9 +
linden/indra/llinventory/llparcel.cpp | 6 +-
linden/indra/llinventory/llparcel.h | 6 +-
linden/indra/llui/llalertdialog.cpp | 26 +-
linden/indra/llui/llalertdialog.h | 3 +
linden/indra/llui/llbutton.cpp | 2 +-
linden/indra/llui/llcallbackmap.h | 4 -
linden/indra/llui/llhtmlhelp.h | 2 +-
linden/indra/llui/lllineeditor.cpp | 8 +
linden/indra/llui/llmenugl.cpp | 18 +-
linden/indra/llui/llmenugl.h | 13 +-
linden/indra/llui/llresmgr.cpp | 9 +-
linden/indra/llui/llresmgr.h | 2 +-
linden/indra/llui/lltexteditor.cpp | 39 +-
linden/indra/llui/llui.h | 1 +
linden/indra/llui/lluixmltags.h | 4 +-
linden/indra/llvfs/lldir_win32.cpp | 1 +
linden/indra/llwindow/lllogitechlcd.cpp | 296 +++++++++
linden/indra/llwindow/lllogitechlcd.h | 135 ++++
linden/indra/llwindow/llwindow.vcproj | 14 +-
linden/indra/llwindow/llwindow_vc8.vcproj | 16 +-
linden/indra/llwindow/llwindowwin32.cpp | 18 +-
linden/indra/llwindow/llwindowwin32.h | 1 +
linden/indra/llxml/llcontrol.cpp | 2 +-
linden/indra/llxml/llxmlnode.h | 3 +-
.../indra/newview/English.lproj/InfoPlist.strings | 4 +-
linden/indra/newview/Info-SecondLife.plist | 2 +-
linden/indra/newview/files.lst | 7 +
linden/indra/newview/licenses-win32.txt | 39 ++
linden/indra/newview/llagent.cpp | 37 +-
linden/indra/newview/llagent.h | 6 +-
.../indra/newview/llclassifiedstatsresponder.cpp | 70 ++
linden/indra/newview/llclassifiedstatsresponder.h | 41 ++
linden/indra/newview/llconsole.cpp | 7 +
linden/indra/newview/llcontroldef.cpp | 31 +-
linden/indra/newview/llfloateravatarinfo.cpp | 150 ++---
linden/indra/newview/llfloateravatarinfo.h | 13 +-
linden/indra/newview/llfloaterchat.cpp | 17 +
linden/indra/newview/llfloaterclassified.cpp | 131 ++++
linden/indra/newview/llfloaterclassified.h | 54 ++
linden/indra/newview/llfloaterclothing.cpp | 2 +-
linden/indra/newview/llfloatercustomize.cpp | 12 +-
linden/indra/newview/llfloaterdirectory.cpp | 134 ++--
linden/indra/newview/llfloaterdirectory.h | 60 +-
linden/indra/newview/llfloaterevent.cpp | 120 ++++
linden/indra/newview/llfloaterevent.h | 52 ++
linden/indra/newview/llfloatergroupinfo.cpp | 13 +-
linden/indra/newview/llfloaterhtml.cpp | 21 +-
linden/indra/newview/llfloaterhtmlhelp.cpp | 23 +-
linden/indra/newview/llfloaterhtmlhelp.h | 2 +-
linden/indra/newview/llfloaterland.cpp | 7 +-
linden/indra/newview/llfloaterland.h | 6 +-
linden/indra/newview/llfloaterlandmark.cpp | 471 ++++++++++++++
linden/indra/newview/llfloaterlandmark.h | 107 ++++
linden/indra/newview/llfloatermap.cpp | 2 +-
linden/indra/newview/llfloatermap.h | 5 -
linden/indra/newview/llfloaterparcel.cpp | 133 ++++
linden/indra/newview/llfloaterparcel.h | 53 ++
linden/indra/newview/llfloaterpostcard.cpp | 2 +-
linden/indra/newview/llfloaterpreference.cpp | 42 +-
linden/indra/newview/llfloaterpreference.h | 4 +-
linden/indra/newview/llfloaterurldisplay.cpp | 84 +++
linden/indra/newview/llfloaterurldisplay.h | 61 ++
linden/indra/newview/llfloaterworldmap.cpp | 8 +-
linden/indra/newview/llfloaterworldmap.h | 8 +-
linden/indra/newview/llfolderview.cpp | 2 +-
linden/indra/newview/llgivemoney.cpp | 8 +-
linden/indra/newview/llimpanel.cpp | 108 +++-
linden/indra/newview/llimpanel.h | 17 +-
linden/indra/newview/llimview.cpp | 78 +++
linden/indra/newview/llimview.h | 9 +-
linden/indra/newview/llinventorybridge.cpp | 37 +-
linden/indra/newview/lllcd.cpp | 703 +++++++++++++++++++++
linden/indra/newview/lllcd.h | 110 ++++
linden/indra/newview/lloverlaybar.cpp | 7 +-
linden/indra/newview/lloverlaybar.h | 4 +-
linden/indra/newview/llpanelLCD.cpp | 131 ++++
linden/indra/newview/llpanelLCD.h | 62 ++
linden/indra/newview/llpanelclassified.cpp | 49 +-
linden/indra/newview/llpanelclassified.h | 4 +-
linden/indra/newview/llpaneldirbrowser.cpp | 99 ++-
linden/indra/newview/llpaneldirbrowser.h | 13 +-
linden/indra/newview/llpaneldirclassified.cpp | 4 +-
linden/indra/newview/llpaneldirevents.cpp | 4 +-
linden/indra/newview/llpaneldirfind.cpp | 361 ++++++++++-
linden/indra/newview/llpaneldirfind.h | 22 +-
linden/indra/newview/llpaneldirgroups.cpp | 4 +-
linden/indra/newview/llpaneldirland.cpp | 4 +-
linden/indra/newview/llpaneldirplaces.cpp | 4 +-
linden/indra/newview/llpaneldirpopular.cpp | 4 +-
linden/indra/newview/llpanelevent.cpp | 1 -
linden/indra/newview/llpanelgeneral.cpp | 4 +-
linden/indra/newview/llpanelgroupgeneral.cpp | 6 +-
linden/indra/newview/llpanelplace.cpp | 167 ++++-
linden/indra/newview/llpanelplace.h | 30 +-
linden/indra/newview/llpreviewlandmark.cpp | 103 +--
linden/indra/newview/llpreviewlandmark.h | 8 +-
linden/indra/newview/llremoteparcelrequest.cpp | 66 ++
linden/indra/newview/llremoteparcelrequest.h | 41 ++
linden/indra/newview/llstartup.cpp | 62 +-
linden/indra/newview/llstatusbar.cpp | 158 +++--
linden/indra/newview/llstatusbar.h | 40 +-
linden/indra/newview/lltoolpie.cpp | 2 +-
linden/indra/newview/llurldispatcher.cpp | 128 ++--
linden/indra/newview/llviewerdisplay.cpp | 1 +
linden/indra/newview/llviewerimagelist.cpp | 4 +
linden/indra/newview/llviewermenu.cpp | 213 ++++++-
linden/indra/newview/llviewerparcelmgr.cpp | 2 +-
linden/indra/newview/llviewerparcelmgr.h | 1 +
linden/indra/newview/llviewerregion.cpp | 40 +-
linden/indra/newview/llviewerregion.h | 3 +
linden/indra/newview/llviewerstats.cpp | 6 +-
linden/indra/newview/llviewerstats.h | 3 +-
linden/indra/newview/llviewertexteditor.cpp | 51 ++
linden/indra/newview/llviewertexteditor.h | 3 +
linden/indra/newview/llviewerwindow.cpp | 14 +-
linden/indra/newview/llvoavatar.cpp | 11 +-
linden/indra/newview/llvoavatar.h | 1 +
linden/indra/newview/llvoiceclient.cpp | 6 +-
linden/indra/newview/llweb.cpp | 2 +-
linden/indra/newview/llwebbrowserctrl.cpp | 61 +-
linden/indra/newview/llwebbrowserctrl.h | 8 +-
linden/indra/newview/llworldmap.cpp | 34 +-
linden/indra/newview/llworldmap.h | 12 +
linden/indra/newview/llworldmapview.cpp | 4 +-
.../newview/macview.xcodeproj/project.pbxproj | 52 +-
linden/indra/newview/newview.vcproj | 80 ++-
linden/indra/newview/newview_vc8.vcproj | 68 +-
linden/indra/newview/releasenotes.txt | 13 +
linden/indra/newview/res/newViewRes.rc | 9 +-
linden/indra/newview/res/resource.h | 3 +-
linden/indra/newview/skins/textures/textures.xml | 1 +
linden/indra/newview/skins/xui/en-us/LCD_text.xml | 28 +
linden/indra/newview/skins/xui/en-us/alerts.xml | 19 +-
.../newview/skins/xui/en-us/floater_about.xml | 2 +-
.../newview/skins/xui/en-us/floater_about_land.xml | 4 +-
.../newview/skins/xui/en-us/floater_directory.xml | 252 +++++---
.../newview/skins/xui/en-us/floater_html_help.xml | 24 +-
.../newview/skins/xui/en-us/floater_lagmeter.xml | 4 +-
.../skins/xui/en-us/floater_landmark_ctrl.xml | 40 ++
.../skins/xui/en-us/floater_preview_classified.xml | 8 +
.../skins/xui/en-us/floater_preview_event.xml | 8 +
.../en-us/floater_preview_existing_landmark.xml | 30 +-
.../skins/xui/en-us/floater_preview_url.xml | 8 +
.../newview/skins/xui/en-us/floater_tools.xml | 2 +-
.../newview/skins/xui/en-us/menu_inventory.xml | 4 +-
.../indra/newview/skins/xui/en-us/menu_slurl.xml | 17 +
.../indra/newview/skins/xui/en-us/menu_viewer.xml | 2 +-
linden/indra/newview/skins/xui/en-us/notify.xml | 5 +
.../indra/newview/skins/xui/en-us/panel_avatar.xml | 4 +-
.../skins/xui/en-us/panel_group_general.xml | 12 +-
.../indra/newview/skins/xui/en-us/panel_place.xml | 64 +-
.../newview/skins/xui/en-us/panel_place_small.xml | 62 +-
.../skins/xui/en-us/panel_preferences_LCD.xml | 70 ++
.../skins/xui/en-us/panel_region_general.xml | 2 +-
.../newview/skins/xui/en-us/panel_status_bar.xml | 57 +-
linden/indra/newview/viewer.cpp | 51 +-
linden/indra/newview/viewer.h | 10 +-
167 files changed, 5893 insertions(+), 1038 deletions(-)
create mode 100644 linden/indra/llwindow/lllogitechlcd.cpp
create mode 100644 linden/indra/llwindow/lllogitechlcd.h
create mode 100644 linden/indra/newview/llclassifiedstatsresponder.cpp
create mode 100644 linden/indra/newview/llclassifiedstatsresponder.h
create mode 100644 linden/indra/newview/llfloaterclassified.cpp
create mode 100644 linden/indra/newview/llfloaterclassified.h
create mode 100644 linden/indra/newview/llfloaterevent.cpp
create mode 100644 linden/indra/newview/llfloaterevent.h
create mode 100644 linden/indra/newview/llfloaterlandmark.cpp
create mode 100644 linden/indra/newview/llfloaterlandmark.h
create mode 100644 linden/indra/newview/llfloaterparcel.cpp
create mode 100644 linden/indra/newview/llfloaterparcel.h
create mode 100644 linden/indra/newview/llfloaterurldisplay.cpp
create mode 100644 linden/indra/newview/llfloaterurldisplay.h
create mode 100644 linden/indra/newview/lllcd.cpp
create mode 100644 linden/indra/newview/lllcd.h
create mode 100644 linden/indra/newview/llpanelLCD.cpp
create mode 100644 linden/indra/newview/llpanelLCD.h
create mode 100644 linden/indra/newview/llremoteparcelrequest.cpp
create mode 100644 linden/indra/newview/llremoteparcelrequest.h
create mode 100644 linden/indra/newview/skins/xui/en-us/LCD_text.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_landmark_ctrl.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_preview_classified.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_preview_event.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_preview_url.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/menu_slurl.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/panel_preferences_LCD.xml
(limited to 'linden')
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 2d3fa99..7a9a457 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -31,6 +31,7 @@ Alissa Sabre
VWR-1353
VWR-1410
VWR-2116
+ VWR-2826
Argent Stonecutter
VWR-68
Benja Kepler
@@ -149,6 +150,8 @@ Matthew Dowd
VWR-1761
McCabe Maxsted
VWR-1318
+Michelle2 Zenovka
+ VWR-2834
Mr Greggan
VWR-445
Nicholaz Beresford
diff --git a/linden/etc/message.xml b/linden/etc/message.xml
index 614d2b0..3d9d0eb 100644
--- a/linden/etc/message.xml
+++ b/linden/etc/message.xml
@@ -468,6 +468,13 @@
ProvisionVoiceAccountRequest
false
+
+ RemoteParcelRequest
+ false
+
+ SearchStatTracking
+ false
+
messageBans
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index 70bcbbd..513d9a8 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -69,6 +69,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "newview", "..\newview\newvi
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB} = {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}
{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
+ {648685F3-8760-4CC5-BB2B-CAF9DECC25A4} = {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
EndProjectSection
EndProject
@@ -235,46 +236,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build_all", "build_all.vcproj", "{D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}"
- ProjectSection(ProjectDependencies) = postProject
- {9D0C7E02-6506-4EE7-BC5C-75671D28D594} = {9D0C7E02-6506-4EE7-BC5C-75671D28D594}
- {2ADE3C14-94C4-40BF-B033-70F3C954EE90} = {2ADE3C14-94C4-40BF-B033-70F3C954EE90}
- {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
- {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08} = {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}
- {A5504A1E-8BA4-45D2-8144-1B6937E37E98} = {A5504A1E-8BA4-45D2-8144-1B6937E37E98}
- {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
- {93B2BA29-FBE9-4376-92C1-6108DCFE09D3} = {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}
- {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
- {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B} = {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}
- {FCC4483C-5B84-4944-B91F-4589A219BC0B} = {FCC4483C-5B84-4944-B91F-4589A219BC0B}
- {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552}
- {076DD042-2E58-42EA-9401-53210B65C1FC} = {076DD042-2E58-42EA-9401-53210B65C1FC}
- {6AEE004D-BFE8-4082-B4D3-E51163B01EEB} = {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}
- {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} = {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}
- {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241} = {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}
- {F56CA265-93E9-4068-8A67-8B104C876D70} = {F56CA265-93E9-4068-8A67-8B104C876D70}
- {DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
- {328D1968-924F-4863-AAE8-5F9A95BA68E5} = {328D1968-924F-4863-AAE8-5F9A95BA68E5}
- {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
- {B771CF1B-E253-47BD-8B0A-6B0440CC9228} = {B771CF1B-E253-47BD-8B0A-6B0440CC9228}
- {44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808}
- {BBAA6588-CA96-4A87-A988-B02270B8D02B} = {BBAA6588-CA96-4A87-A988-B02270B8D02B}
- {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
- {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC} = {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}
- {A5470DA6-0C3A-4602-B930-43DB25511A59} = {A5470DA6-0C3A-4602-B930-43DB25511A59}
- {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}
- {777F38BE-2DFE-4051-9AAD-2832ABC474CC} = {777F38BE-2DFE-4051-9AAD-2832ABC474CC}
- {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
- {D0FDC1C3-A589-40F2-ABCA-A84FF3835624} = {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}
- {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
- {4C8D64D5-649F-481E-96BE-EF1E82A77ACB} = {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}
- {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
- {648685F3-8760-4CC5-BB2B-CAF9DECC25A4} = {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}
- {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
- {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2} = {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}
- {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
- EndProjectSection
-EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
@@ -282,8 +243,6 @@ Global
ReleaseForDownload = ReleaseForDownload
ReleaseNoOpt = ReleaseNoOpt
EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32
@@ -563,14 +522,6 @@ Global
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseForDownload.Build.0 = Release|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.Debug.ActiveCfg = Debug|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.Debug.Build.0 = Debug|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.Release.ActiveCfg = Release|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.Release.Build.0 = Release|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.ReleaseForDownload.ActiveCfg = Release|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.ReleaseForDownload.Build.0 = Release|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
- {D2CE3C3B-714F-42C4-BDEC-EDB62528E1BE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln
index f6b4304..04e1e9a 100644
--- a/linden/indra/indra_complete/indra_complete_vc8.sln
+++ b/linden/indra/indra_complete/indra_complete_vc8.sln
@@ -324,8 +324,8 @@ Global
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseForDownload|Win32.Build.0 = Release|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
{328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
- {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32
- {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32
+ {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = ReleaseNoOpt|Win32
+ {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = ReleaseNoOpt|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
{E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/linden/indra/lib/python/indra/base/lluuid.py b/linden/indra/lib/python/indra/base/lluuid.py
index f302f8b..5209de4 100644
--- a/linden/indra/lib/python/indra/base/lluuid.py
+++ b/linden/indra/lib/python/indra/base/lluuid.py
@@ -27,6 +27,7 @@ $/LicenseInfo$
"""
import md5, random, socket, string, time, re
+import uuid
def _int2binstr(i,l):
s=''
@@ -187,14 +188,8 @@ class UUID(object):
from c++ implementation for portability reasons.
Returns self.
"""
- newid = self.__class__.lastid
- while newid == self.__class__.lastid:
- now = long(time.time() * 1000)
- newid = ("%016x" % now) + self.__class__.hexip
- newid += ("%03x" % (self.__class__.rand.randrange(0,4095)))
- self.__class__.lastid = newid
m = md5.new()
- m.update(newid)
+ m.update(uuid.uuid1().bytes)
self._bits = m.digest()
return self
diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h
index b3b79d0..459d086 100644
--- a/linden/indra/llcommon/llpreprocessor.h
+++ b/linden/indra/llcommon/llpreprocessor.h
@@ -124,6 +124,9 @@
#if defined(LL_WINDOWS)
#define BOOST_REGEX_NO_LIB 1
#define CURL_STATICLIB 1
+
+#define LL_LCD_COMPILE 1
+
#endif // LL_WINDOWS
diff --git a/linden/indra/llcommon/llstringtable.h b/linden/indra/llcommon/llstringtable.h
index b7412ef..f7206fe 100644
--- a/linden/indra/llcommon/llstringtable.h
+++ b/linden/indra/llcommon/llstringtable.h
@@ -47,8 +47,10 @@
//# define STRING_TABLE_HASH_MAP 1
#endif
-#if STRING_TABLE_HASH_MAP
+#if LL_WINDOWS
#include
+#else
+#include
#endif
const U32 MAX_STRINGS_LENGTH = 256;
@@ -99,7 +101,11 @@ public:
S32 mUniqueEntries;
#if STRING_TABLE_HASH_MAP
+#if LL_WINDOWS
typedef std::hash_multimap string_hash_t;
+#else
+ typedef __gnu_cxx::hash_multimap string_hash_t;
+#endif
string_hash_t mStringHash;
#else
typedef std::list string_list_t;
diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h
index 8891b47..e36702a 100644
--- a/linden/indra/llcommon/llversionserver.h
+++ b/linden/indra/llcommon/llversionserver.h
@@ -34,8 +34,8 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 18;
-const S32 LL_VERSION_PATCH = 4;
-const S32 LL_VERSION_BUILD = 0;
+const S32 LL_VERSION_PATCH = 3;
+const S32 LL_VERSION_BUILD = 73552;
const char * const LL_CHANNEL = "Second Life Server";
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h
index 71b7347..8d87e13 100644
--- a/linden/indra/llcommon/llversionviewer.h
+++ b/linden/indra/llcommon/llversionviewer.h
@@ -34,8 +34,8 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 18;
-const S32 LL_VERSION_PATCH = 4;
-const S32 LL_VERSION_BUILD = 3;
+const S32 LL_VERSION_PATCH = 5;
+const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Release";
diff --git a/linden/indra/llcommon/roles_constants.h b/linden/indra/llcommon/roles_constants.h
index 54e6827..1a7c977 100644
--- a/linden/indra/llcommon/roles_constants.h
+++ b/linden/indra/llcommon/roles_constants.h
@@ -142,11 +142,17 @@ const U64 GP_NOTICES_RECEIVE = 0x1LL << 43; // Receive Notices and View Notice
const U64 GP_PROPOSAL_START = 0x1LL << 44; // Start Proposal
const U64 GP_PROPOSAL_VOTE = 0x1LL << 45; // Vote on Proposal
+const U64 GP_SESSION_JOIN = 0x1LL << 46; //can join session
+const U64 GP_SESSION_VOICE = 0x1LL << 47; //can hear/talk
+const U64 GP_SESSION_MODERATOR = 0x1LL << 49; //can mute people's session
+
const U64 GP_DEFAULT_MEMBER = GP_ACCOUNTING_ACCOUNTABLE
| GP_LAND_ALLOW_SET_HOME
| GP_NOTICES_RECEIVE
| GP_PROPOSAL_START
| GP_PROPOSAL_VOTE
+ | GP_SESSION_JOIN
+ | GP_SESSION_VOICE
;
const U64 GP_DEFAULT_OFFICER = GP_ACCOUNTING_ACCOUNTABLE
@@ -187,5 +193,8 @@ const U64 GP_DEFAULT_OFFICER = GP_ACCOUNTING_ACCOUNTABLE
| GP_PROPOSAL_VOTE
| GP_ROLE_ASSIGN_MEMBER_LIMITED
| GP_ROLE_PROPERTIES
+ | GP_SESSION_MODERATOR
+ | GP_SESSION_JOIN
+ | GP_SESSION_VOICE
;
#endif
diff --git a/linden/indra/llinventory/llparcel.cpp b/linden/indra/llinventory/llparcel.cpp
index 3a67385..7cc3e57 100644
--- a/linden/indra/llinventory/llparcel.cpp
+++ b/linden/indra/llinventory/llparcel.cpp
@@ -38,6 +38,8 @@
#include "llstreamtools.h"
#include "llmath.h"
+#include "llsd.h"
+#include "llsdutil.h"
#include "lltransactiontypes.h"
#include "lltransactionflags.h"
#include "message.h"
@@ -1614,7 +1616,7 @@ void LLParcel::startSale(const LLUUID& buyer_id, BOOL is_buyer_group)
mSaleTimerExpires.setTimerExpirySec(DEFAULT_USEC_SALE_TIMEOUT / SEC_TO_MICROSEC);
mStatus = OS_LEASE_PENDING;
mClaimDate = time(NULL);
- mAuctionID = 0;
+ setAuctionID(0);
// clear the autoreturn whenever land changes hands
setCleanOtherTime(0);
}
@@ -1649,6 +1651,7 @@ void LLParcel::completeSale(U32& type, U8& flags,
// Purchased parcels are assumed to no longer be for sale.
// Otherwise someone can snipe the sale.
setForSale(FALSE);
+ setAuctionID(0);
// Turn off show directory, since it's a recurring fee that
// the buyer may not want.
@@ -1674,6 +1677,7 @@ void LLParcel::clearSale()
}
mAuthBuyerID.setNull();
setForSale(FALSE);
+ setAuctionID(0);
setPreviousOwnerID(LLUUID::null);
setPreviouslyGroupOwned(FALSE);
setSellWithObjects(FALSE);
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index 9c63008..3af1824 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -31,6 +31,9 @@
#ifndef LL_LLPARCEL_H
#define LL_LLPARCEL_H
+#include
+#include
+
#include "lluuid.h"
#include "llparcelflags.h"
#include "llpermissions.h"
@@ -100,6 +103,7 @@ const U32 RT_LIST = 0x1 << 4;
const U32 RT_SELL = 0x1 << 5;
class LLMessageSystem;
+class LLSD;
class LLAccessEntry
{
@@ -603,8 +607,6 @@ public:
std::map mBanList;
std::map mTempBanList;
std::map mTempAccessList;
-
- //LLDynamicArray mRenterList;
};
diff --git a/linden/indra/llui/llalertdialog.cpp b/linden/indra/llui/llalertdialog.cpp
index 0fa3585..258b523 100644
--- a/linden/indra/llui/llalertdialog.cpp
+++ b/linden/indra/llui/llalertdialog.cpp
@@ -56,6 +56,8 @@ const S32 MSG_PAD = 8;
/*static*/ LLControlGroup* LLAlertDialog::sSettings = NULL;
/*static*/ std::map LLAlertDialog::sUniqueActiveMap;
/*static*/ LLAlertDialog::display_callback_t LLAlertDialog::sDisplayCallback;
+/*static*/ LLString LLAlertDialog::sStringSkipNextTime("Skip this dialog next time");
+/*static*/ LLString LLAlertDialog::sStringAlwaysChoose("Always choose this option");
//static
LLAlertDialog* LLAlertDialog::createXml( const LLString& xml_desc,
@@ -153,17 +155,14 @@ LLAlertDialog::LLAlertDialog( const LLAlertDialogTemplate* xml_template,
setTitle(xml_template->mTitle);
if (xml_template->mIgnorable)
{
- //XUI:translate!
- LLString msg;
if (xml_template->mIgnorable == IGNORE_USE_DEFAULT)
{
- msg = "Skip this dialog next time";
+ setCheckBox(sStringSkipNextTime, xml_template->mIgnoreLabel);
}
else // xml_template->mIgnorable == IGNORE_USE_SAVED
{
- msg = "Always choose this option";
+ setCheckBox(sStringAlwaysChoose, xml_template->mIgnoreLabel);
}
- setCheckBox(msg, xml_template->mIgnoreLabel);
}
}
@@ -618,6 +617,23 @@ bool LLAlertDialog::parseAlerts(const LLString& xml_filename, LLControlGroup* se
for (LLXMLNode* alert = root->getFirstChild();
alert != NULL; alert = alert->getNextSibling())
{
+ if (alert->hasName("global"))
+ {
+ LLString global_name;
+ if (alert->getAttributeString("name", global_name))
+ {
+ if (global_name == "skipnexttime")
+ {
+ sStringSkipNextTime = alert->getTextContents();
+ }
+ else if (global_name == "alwayschoose")
+ {
+ sStringAlwaysChoose = alert->getTextContents();
+ }
+ }
+ continue;
+ }
+
if (!alert->hasName("alert"))
{
continue;
diff --git a/linden/indra/llui/llalertdialog.h b/linden/indra/llui/llalertdialog.h
index acd0b7f..ddf4112 100644
--- a/linden/indra/llui/llalertdialog.h
+++ b/linden/indra/llui/llalertdialog.h
@@ -135,6 +135,9 @@ public:
static LLControlGroup* sSettings;
static std::map sUniqueActiveMap;
static display_callback_t sDisplayCallback;
+
+ static LLString sStringSkipNextTime;
+ static LLString sStringAlwaysChoose;
};
//============================================================================
diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp
index 65cbcf3..36ccc32 100644
--- a/linden/indra/llui/llbutton.cpp
+++ b/linden/indra/llui/llbutton.cpp
@@ -1037,7 +1037,7 @@ void clicked_help(void* data)
return;
}
- LLUI::sHtmlHelp->show(self->getHelpURL());
+ LLUI::sHtmlHelp->show(self->getHelpURL(), "");
}
// static
diff --git a/linden/indra/llui/llcallbackmap.h b/linden/indra/llui/llcallbackmap.h
index 0efda5d..496d722 100644
--- a/linden/indra/llui/llcallbackmap.h
+++ b/linden/indra/llui/llcallbackmap.h
@@ -29,10 +29,6 @@
* $/LicenseInfo$
*/
-// llcallbackmap.h
-//
-// Copyright 2006, Linden Research, Inc.
-
#ifndef LL_CALLBACK_MAP_H
#define LL_CALLBACK_MAP_H
diff --git a/linden/indra/llui/llhtmlhelp.h b/linden/indra/llui/llhtmlhelp.h
index 816d0dd..9658f8f 100644
--- a/linden/indra/llui/llhtmlhelp.h
+++ b/linden/indra/llui/llhtmlhelp.h
@@ -36,7 +36,7 @@ class LLHtmlHelp
{
public:
virtual ~LLHtmlHelp() {}
- virtual void show(std::string start_url = "")=0;
+ virtual void show(std::string start_url, std::string title) = 0;
virtual BOOL getFloaterOpened()=0;
};
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 9671065..78fe29c 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -1642,6 +1642,9 @@ void LLLineEditor::draw()
{
mLastIMEPosition.mX = ime_pos.mX;
mLastIMEPosition.mY = ime_pos.mY;
+
+ ime_pos.mX = (S32) (ime_pos.mX * LLUI::sGLScaleFactor.mV[VX]);
+ ime_pos.mY = (S32) (ime_pos.mY * LLUI::sGLScaleFactor.mV[VY]);
getWindow()->setLanguageTextInput( ime_pos );
}
}
@@ -2219,6 +2222,11 @@ LLView* LLLineEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
{
line_editor->setHandleEditKeysDirectly(handle_edit_keys_directly);
}
+ BOOL commit_on_focus_lost = TRUE;
+ if (node->getAttributeBOOL("commit_on_focus_lost", commit_on_focus_lost))
+ {
+ line_editor->setCommitOnFocusLost(commit_on_focus_lost);
+ }
line_editor->setColorParameters(node);
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index 5d2a052..8ec5656 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -2495,6 +2495,9 @@ void LLMenuGL::cleanupSpilloverBranch()
mItems.erase(found_iter);
}
+ delete mSpilloverBranch;
+ mSpilloverBranch = NULL;
+
// pop off spillover items
while (mSpilloverMenu->getItemCount())
{
@@ -2607,6 +2610,8 @@ void LLMenuGL::createJumpKeys()
// remove all items on the menu
void LLMenuGL::empty( void )
{
+ cleanupSpilloverBranch();
+
mItems.clear();
deleteAllChildren();
@@ -4245,11 +4250,14 @@ void LLMenuBarGL::arrange( void )
for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter)
{
LLMenuItemGL* item = *item_iter;
- rect.mLeft = pos;
- pos += item->getNominalWidth();
- rect.mRight = pos;
- item->setRect( rect );
- item->buildDrawLabel();
+ if (item->getVisible())
+ {
+ rect.mLeft = pos;
+ pos += item->getNominalWidth();
+ rect.mRight = pos;
+ item->setRect( rect );
+ item->buildDrawLabel();
+ }
}
reshape(rect.mRight, rect.getHeight());
}
diff --git a/linden/indra/llui/llmenugl.h b/linden/indra/llui/llmenugl.h
index 6dc9282..ce33f8a 100644
--- a/linden/indra/llui/llmenugl.h
+++ b/linden/indra/llui/llmenugl.h
@@ -238,11 +238,6 @@ protected:
on_disabled_callback mOnDisabledCallback;
public:
-
-
- void setMenuCallback(menu_callback callback, void* data) { mCallback = callback; mUserData = data; };
- void setEnabledCallback(enabled_callback callback) { mEnabledCallback = callback; };
-
// normal constructor
LLMenuItemCallGL( const LLString& name,
menu_callback clicked_cb,
@@ -288,7 +283,13 @@ public:
void setEnabledControl(LLString enabled_control, LLView *context);
void setVisibleControl(LLString enabled_control, LLView *context);
- virtual void setUserData(void *userdata) { mUserData = userdata; }
+ void setMenuCallback(menu_callback callback, void* data) { mCallback = callback; mUserData = data; };
+ menu_callback getMenuCallback() const { return mCallback; }
+
+ void setEnabledCallback(enabled_callback callback) { mEnabledCallback = callback; };
+
+ void setUserData(void *userdata) { mUserData = userdata; }
+ void* getUserData() const { return mUserData; }
// called to rebuild the draw label
virtual void buildDrawLabel( void );
diff --git a/linden/indra/llui/llresmgr.cpp b/linden/indra/llui/llresmgr.cpp
index e77faa9..0e1b9bf 100644
--- a/linden/indra/llui/llresmgr.cpp
+++ b/linden/indra/llui/llresmgr.cpp
@@ -247,8 +247,10 @@ char LLResMgr::getMonetaryThousandsSeparator() const
// Sets output to a string of integers with monetary separators inserted according to the locale.
-void LLResMgr::getMonetaryString( LLString& output, S32 input ) const
+std::string LLResMgr::getMonetaryString( S32 input ) const
{
+ std::string output;
+
LLLocale locale(LLLocale::USER_LOCALE);
struct lconv *conv = localeconv();
@@ -295,7 +297,6 @@ void LLResMgr::getMonetaryString( LLString& output, S32 input ) const
LLString digits = llformat("%u", abs(input));
if( !grouping || !grouping[0] )
{
- output.assign("L$");
if( negative_before )
{
output.append( negative_sign );
@@ -305,7 +306,7 @@ void LLResMgr::getMonetaryString( LLString& output, S32 input ) const
{
output.append( negative_sign );
}
- return;
+ return output;
}
S32 groupings[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
@@ -367,7 +368,6 @@ void LLResMgr::getMonetaryString( LLString& output, S32 input ) const
forward_output[ output_pos - 1 - i ] = reversed_output[ i ];
}
- output.assign("L$");
if( negative_before )
{
output.append( negative_sign );
@@ -377,6 +377,7 @@ void LLResMgr::getMonetaryString( LLString& output, S32 input ) const
{
output.append( negative_sign );
}
+ return output;
}
void LLResMgr::getIntegerString( LLString& output, S32 input ) const
diff --git a/linden/indra/llui/llresmgr.h b/linden/indra/llui/llresmgr.h
index d9e58bc..be2a355 100644
--- a/linden/indra/llui/llresmgr.h
+++ b/linden/indra/llui/llresmgr.h
@@ -132,7 +132,7 @@ public:
char getMonetaryDecimalPoint() const;
char getMonetaryThousandsSeparator() const;
- void getMonetaryString( LLString& output, S32 input ) const;
+ std::string getMonetaryString( S32 input ) const;
void getIntegerString( LLString& output, S32 input ) const;
// const char* getRes( LLSTR_ID string_id ) const { return mStrings[ string_id ]; }
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 12ad339..1f13bbb 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -967,17 +967,6 @@ void LLTextEditor::endSelection()
mIsSelecting = FALSE;
mSelectionEnd = mCursorPos;
}
- if (mParseHTML && mHTML.length() > 0)
- {
- //Special handling for slurls
- if ( (mSecondlifeURLcallback!=NULL) && !(*mSecondlifeURLcallback)(mHTML) )
- {
- if (mURLcallback!=NULL) (*mURLcallback)(mHTML.c_str());
-
- //load_url(url.c_str());
- }
- mHTML="";
- }
}
BOOL LLTextEditor::selectionContainsLineBreaks()
@@ -1408,6 +1397,7 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
if( hasMouseCapture() )
{
gFocusMgr.setMouseCapture( NULL );
+
handled = TRUE;
}
@@ -2831,7 +2821,10 @@ void LLTextEditor::drawCursor()
{
mLastIMEPosition.mX = ime_pos.mX;
mLastIMEPosition.mY = ime_pos.mY;
- getWindow()->setLanguageTextInput( ime_pos );
+
+ ime_pos.mX = (S32) (ime_pos.mX * LLUI::sGLScaleFactor.mV[VX]);
+ ime_pos.mY = (S32) (ime_pos.mY * LLUI::sGLScaleFactor.mV[VY]);
+ getWindow()->setLanguageTextInput( ime_pos );
}
}
}
@@ -3814,6 +3807,22 @@ void LLTextEditor::findEmbeddedItemSegments()
BOOL LLTextEditor::handleMouseUpOverSegment(S32 x, S32 y, MASK mask)
{
+ if ( hasMouseCapture() )
+ {
+ // This mouse up was part of a click.
+ // Regardless of where the cursor is, see if we recently touched a link
+ // and launch it if we did.
+ if (mParseHTML && mHTML.length() > 0)
+ {
+ //Special handling for slurls
+ if ( (mSecondlifeURLcallback!=NULL) && !(*mSecondlifeURLcallback)(mHTML) )
+ {
+ if (mURLcallback!=NULL) (*mURLcallback)(mHTML.c_str());
+ }
+ mHTML="";
+ }
+ }
+
return FALSE;
}
@@ -4245,6 +4254,12 @@ BOOL LLTextEditor::findHTML(const LLString &line, S32 *begin, S32 *end)
strpos = url.find(slurlID);
}
+ if (strpos < 0)
+ {
+ slurlID="sl://";
+ strpos = url.find(slurlID);
+ }
+
if (strpos >= 0)
{
strpos+=slurlID.length();
diff --git a/linden/indra/llui/llui.h b/linden/indra/llui/llui.h
index b806f7a..b78b046 100644
--- a/linden/indra/llui/llui.h
+++ b/linden/indra/llui/llui.h
@@ -222,6 +222,7 @@ typedef enum e_widget_type
WIDGET_TYPE_PAD, // used in XML for positioning, not a real widget
WIDGET_TYPE_RADIO_GROUP,
WIDGET_TYPE_ICON,
+ WIDGET_TYPE_LANDMARK_PICKER,
WIDGET_TYPE_LOCATE, // used in XML for positioning, not a real widget
WIDGET_TYPE_VIEW_BORDER, // decorative border
WIDGET_TYPE_PANEL,
diff --git a/linden/indra/llui/lluixmltags.h b/linden/indra/llui/lluixmltags.h
index 305223d..93e9fe0 100644
--- a/linden/indra/llui/lluixmltags.h
+++ b/linden/indra/llui/lluixmltags.h
@@ -116,8 +116,8 @@
#define LL_FOLDER_VIEW_ITEM_TAG LLString("folder_item")
#define LL_FOLDER_VIEW_FOLDER_TAG LLString("folder")
#define LL_TEXTURE_BAR_TAG LLString("texture_bar")
-#define LL_JOYSTICK_SLIDE "joystick_slide"
-#define LL_JOYSTICK_TURN "joystick_turn"
+#define LL_JOYSTICK_SLIDE LLString("joystick_slide")
+#define LL_JOYSTICK_TURN LLString("joystick_turn")
#define LL_GROUP_DROP_TARGET_TAG LLString("group_drop_target")
#define LL_LAYOUT_STACK_TAG LLString("layout_stack")
#endif
diff --git a/linden/indra/llvfs/lldir_win32.cpp b/linden/indra/llvfs/lldir_win32.cpp
index f3edbc3..b5db6ef 100644
--- a/linden/indra/llvfs/lldir_win32.cpp
+++ b/linden/indra/llvfs/lldir_win32.cpp
@@ -39,6 +39,7 @@
#include "shlobj.h"
#include
+#include
#include
#include
#include
diff --git a/linden/indra/llwindow/lllogitechlcd.cpp b/linden/indra/llwindow/lllogitechlcd.cpp
new file mode 100644
index 0000000..8141ba3
--- /dev/null
+++ b/linden/indra/llwindow/lllogitechlcd.cpp
@@ -0,0 +1,296 @@
+/**
+ * @file lcd.cpp
+ * @brief cLcd panel class
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llpreprocessor.h"
+
+#if LL_LCD_COMPILE
+
+#include "linden_common.h"
+#include "../win_crash_logger/StdAfx.h"
+
+#include "EZ_LCD.h"
+#include "../newview/res/resource.h"
+#include "llcontrol.h"
+extern LLControlGroup gSavedSettings;
+
+#ifndef LL_LOGITECH_LCD_H
+#include "lllogitechlcd.h"
+#endif
+
+#define WAIT_DURATION 7
+#define DEBOUNCE_DURATION 0.3f
+
+llLCDPageGroup::llLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon):
+mType(type),
+mSLIcon(SLIcon),
+mDisplayPage(false),
+mLCD(LCD)
+{
+ mPageArray.clear();
+}
+
+llLCDPageGroup::~llLCDPageGroup()
+{
+ mPageArray.clear();
+}
+
+void llDefaultPageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+}
+
+void llDefaultPageGroup::GetDisplayable()
+{
+
+}
+
+llDefaultPageGroup::llDefaultPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_MEDIUM, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 20);
+ mLCD->SetText(title, _T("Second Life Display"));
+ newPage.mDisplayItemArray.push_back(title);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+llLCD::llLCD(HINSTANCE instance):
+mInited(false),
+mDisplayTimer(),
+mDebounceTimer(),
+mPageToShow(-1),
+mInstance(instance),
+mDestinationLCD(-1),
+mFirstTimeThru(true)
+{
+ HRESULT res_ = S_OK;
+
+ // Create instance of EzLcd.
+ mLCD = new CEzLcd();
+
+ // Have it initialize itself
+ res_ = mLCD->InitYourself(_T("Second Life"));
+
+ if (res_ != S_OK)
+ {
+ // Something went wrong, when connecting to the LCD Manager software. We need to get out now
+ delete mLCD;
+ return;
+ }
+ mInited = true;
+
+ // preload the Second Life Icon
+ mSLIcon = static_cast(LoadImage(mInstance,
+ MAKEINTRESOURCE(IDI_LCD_LL_ICON),
+ IMAGE_ICON,
+ 32,
+ 32,
+ LR_MONOCHROME));
+
+ // have to do this first so screens are added to the list and updateDisplay actually does something.
+ mLCD->Update();
+}
+
+llLCD::~llLCD()
+{
+ // remove the instance of the LCD controller
+ if (mInited == true)
+ {
+ delete mLCD;
+
+ // free up the used pages
+ int loopSize = mPageGroupArray.size();
+ for(int i= 0; imDisplayPage)
+ {
+ // now walk all the pages in the page group we are looking at
+ int numPages = mPageGroupArray[x]->mPageArray.size();
+ for (int zx = 0; zx< numPages; zx++)
+ {
+ // found it.
+ if (mPageToShow == mPageGroupArray[x]->mPageArray[zx].mPageIndex)
+ {
+ // move to the next one
+ if (zx < numPages-1)
+ {
+ mPageToShow = mPageGroupArray[x]->mPageArray[zx+1].mPageIndex;
+ return mPageGroupArray[x];
+ }
+ else
+ {
+ for(int y=x+1; y< groupSize; y++)
+ {
+ if (mPageGroupArray[y]->mDisplayPage)
+ {
+ mPageToShow = mPageGroupArray[y]->mPageArray[0].mPageIndex;
+ return mPageGroupArray[y];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // ok, didn't find it. Start again at the beginning and find the first group that's enabled
+ for(int x=1; x< groupSize; x++)
+ {
+ if (mPageGroupArray[x]->mDisplayPage)
+ {
+ mPageToShow = mPageGroupArray[x]->mPageArray[0].mPageIndex;
+ return mPageGroupArray[x];
+ }
+ }
+ // if we got this far, we should display the default screen
+ mPageToShow = mPageGroupArray[0]->mPageArray[0].mPageIndex;
+ return mPageGroupArray[0];
+}
+
+void llLCD::SetUpDisplayPages()
+{
+ // work out if destination has changed
+ int destinationLCD = gSavedSettings.getS32("LCDDestination");
+ switch(destinationLCD)
+ {
+ case 0:
+ destinationLCD = LGLCD_DEVICE_FAMILY_KEYBOARD_G15;
+ break;
+ case 1:
+ destinationLCD = LGLCD_DEVICE_FAMILY_SPEAKERS_Z10;
+ break;
+ }
+ // set destination if it's changed
+ if (mDestinationLCD != destinationLCD)
+ {
+ mDestinationLCD = destinationLCD;
+ mLCD->SetDeviceFamilyToUse(destinationLCD);
+ }
+ int loopSize = mPageGroupArray.size();
+ for(int i= 0; iGetDisplayable();
+ }
+}
+
+void llLCD::UpdateDisplay()
+{
+ if (mInited)
+ {
+ // reset pages if anything has changed
+ SetUpDisplayPages();
+ if (mLCD->IsConnected())
+ {
+ // Switching back and forth between the pages that we've created
+ if (mDisplayTimer.getElapsedTimeF32() > WAIT_DURATION || mFirstTimeThru)
+ {
+ mCurrentGroupBeingShown = GetNextPageToDisplay();
+ mDisplayTimer.reset();
+ mFirstTimeThru = false;
+ }
+
+ // Check if button 1 triggered
+ if ((mLCD->ButtonIsPressed(LG_BUTTON_1)
+ || mLCD->ButtonIsPressed(LG_BUTTON_2)
+ || mLCD->ButtonIsPressed(LG_BUTTON_3)
+ || mLCD->ButtonIsPressed(LG_BUTTON_4)
+ ) && mDebounceTimer.getElapsedTimeF32() > DEBOUNCE_DURATION)
+ {
+ // if so, move us on a page
+ mCurrentGroupBeingShown = GetNextPageToDisplay();
+ mDisplayTimer.reset();
+ mDebounceTimer.reset();
+ }
+
+ // update that which is being show
+ mCurrentGroupBeingShown->UpdateDetails();
+
+ // set which page is shown
+ mLCD->ShowPage(mPageToShow);
+
+ // Must run the following every loop.
+ mLCD->Update();
+ }
+ }
+}
+
+
+// accessor functions
+bool llLCD::Enabled()
+{
+ return mInited;
+}
+
+BOOL llLCD::AreZ10Available()
+{
+ if (mInited == true)
+ {
+ return mLCD->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10);
+ }
+ return false;
+}
+
+BOOL llLCD::IsG15Available()
+{
+ if (mInited == true)
+ {
+ return mLCD->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_KEYBOARD_G15);
+ }
+ return false;
+}
+
+#endif
diff --git a/linden/indra/llwindow/lllogitechlcd.h b/linden/indra/llwindow/lllogitechlcd.h
new file mode 100644
index 0000000..6804bef
--- /dev/null
+++ b/linden/indra/llwindow/lllogitechlcd.h
@@ -0,0 +1,135 @@
+/**
+ * @file lcd.h
+ * @brief Description of the LCD owner class.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LOGITECH_LCD_H
+#define LL_LOGITECH_LCD_H
+
+#include
+#include "llFrametimer.h"
+
+class CEzLcd;
+
+// TO Add a new display page groups, duplicate the Region or Debug or Chat class, then modify what's actually displayed (ie how many pages and whats in them)
+// in the constructor and update display functions.
+// Remember to add in a new enum type for the new display type, and add in functions to actually create/update or remove this page in the SetupDisplayPages function
+// And, of course, add the new option to the Menu in llpanelLCDoption.xml, and save details (duplicate the ones for debug or region).
+
+// this defines one pages worth of display items.
+class llLCDSpecificPage
+{
+public:
+ int mPageIndex;
+ typedef std::vector displayItemArray_t;
+ // array of indexes that come from the lcd display sdk for specific items being displayed on a given page
+ displayItemArray_t mDisplayItemArray;
+};
+
+// this defines a group of pages - associated with a specific type of display, like Debug, Linden Account info, region etc
+// NOTE this can have more than one page associated with it - so it has an array of cLCDSpecificPage for each page.
+class llLCDPageGroup
+{
+public:
+ llLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual ~llLCDPageGroup();
+ virtual void UpdateDetails() = 0;
+ virtual void GetDisplayable() = 0;
+ int mType;
+ HANDLE mHandle;
+ typedef std::vector pageArray_t;
+ pageArray_t mPageArray;
+ BOOL mDisplayPage;
+protected:
+
+ CEzLcd *mLCD;
+ HICON mSLIcon;
+};
+
+
+// class that defines the Default page - used if nothing else is enabled
+class llDefaultPageGroup : public llLCDPageGroup
+{
+public:
+ llDefaultPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+};
+
+// Root class - contains pointers to actual LCD display object, and arrays of page groups to be displayed
+class llLCD
+{
+public:
+ enum
+ {
+ kLCDDefault,
+ kLCDDebug,
+ kLCDChat,
+ kLCDRegion,
+ kLCDLinden,
+ kLCDIM,
+ kLCDDebugConsole,
+ kMaxLCDPageGroups
+ };
+ llLCD(HINSTANCE instance);
+ ~llLCD();
+ void UpdateDisplay();
+ bool Enabled();
+ BOOL AreZ10Available();
+ BOOL IsG15Available();
+
+ typedef std::vector pageGroupArray_t;
+ pageGroupArray_t mPageGroupArray;
+ HICON mSLIcon;
+ CEzLcd *mLCD;
+private:
+
+ // member functions to display data
+ void SetUpDisplayPages();
+ llLCDPageGroup *GetNextPageToDisplay();
+
+ llLCDPageGroup *mCurrentGroupBeingShown;
+
+ // members
+ bool mInited;
+
+ int mPageToShow;
+ LLFrameTimer mDisplayTimer;
+ LLFrameTimer mDebounceTimer;
+ HINSTANCE mInstance; // necessary for loading some icons for the dot matrix LCD display to use
+ bool mFirstTimeThru;
+
+
+ // actual display set up variables
+ int mDestinationLCD;
+};
+
+
+
+#endif
\ No newline at end of file
diff --git a/linden/indra/llwindow/llwindow.vcproj b/linden/indra/llwindow/llwindow.vcproj
index f2f4e32..cb49783 100644
--- a/linden/indra/llwindow/llwindow.vcproj
+++ b/linden/indra/llwindow/llwindow.vcproj
@@ -19,7 +19,7 @@
+
+
+
+
+
+
@@ -355,6 +359,10 @@
>
+
+
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index bb99d4c..c84611b 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -89,6 +89,7 @@ void show_window_creation_error(const char* title)
BOOL LLWindowWin32::sIsClassRegistered = FALSE;
BOOL LLWindowWin32::sLanguageTextInputAllowed = TRUE;
+BOOL LLWindowWin32::sWinIMEOpened = FALSE;
HKL LLWindowWin32::sWinInputLocale = 0;
DWORD LLWindowWin32::sWinIMEConversionMode = IME_CMODE_NATIVE;
DWORD LLWindowWin32::sWinIMESentenceMode = IME_SMODE_AUTOMATIC;
@@ -3324,7 +3325,7 @@ void LLWindowWin32::focusClient()
void LLWindowWin32::allowLanguageTextInput(BOOL b)
{
- if ( !LLWinImm::isAvailable() )
+ if (b == sLanguageTextInputAllowed || !LLWinImm::isAvailable())
{
return;
}
@@ -3335,14 +3336,13 @@ void LLWindowWin32::allowLanguageTextInput(BOOL b)
// Allowing: Restore the previous IME status, so that the user has a feeling that the previous
// text input continues naturally. Be careful, however, the IME status is meaningful only during the user keeps
// using same Input Locale (aka Keyboard Layout).
- HIMC himc = LLWinImm::getContext(mWindowHandle);
- LLWinImm::setOpenStatus(himc, TRUE);
- if (GetKeyboardLayout(0) == sWinInputLocale && sWinIMEConversionMode != IME_CMODE_RESERVED)
+ if (sWinIMEOpened && GetKeyboardLayout(0) == sWinInputLocale)
{
+ HIMC himc = LLWinImm::getContext(mWindowHandle);
+ LLWinImm::setOpenStatus(himc, TRUE);
LLWinImm::setConversionStatus(himc, sWinIMEConversionMode, sWinIMESentenceMode);
- sWinIMEConversionMode = IME_CMODE_RESERVED; // Set saved state so we won't do this repeatedly
+ LLWinImm::releaseContext(mWindowHandle, himc);
}
- LLWinImm::releaseContext(mWindowHandle, himc);
}
else
{
@@ -3350,10 +3350,12 @@ void LLWindowWin32::allowLanguageTextInput(BOOL b)
// However, do it after saving the current IME status. We need to restore the status when
// allowing language text input again.
sWinInputLocale = GetKeyboardLayout(0);
- if ( LLWinImm::isIME(sWinInputLocale) )
+ sWinIMEOpened = LLWinImm::isIME(sWinInputLocale);
+ if (sWinIMEOpened)
{
HIMC himc = LLWinImm::getContext(mWindowHandle);
- if ( LLWinImm::getOpenStatus(himc) )
+ sWinIMEOpened = LLWinImm::getOpenStatus(himc);
+ if (sWinIMEOpened)
{
LLWinImm::getConversionStatus(himc, &sWinIMEConversionMode, &sWinIMESentenceMode);
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h
index 938ece9..f1e977e 100644
--- a/linden/indra/llwindow/llwindowwin32.h
+++ b/linden/indra/llwindow/llwindowwin32.h
@@ -184,6 +184,7 @@ protected:
// They are all static, since one context is shared by all LLWindowWin32
// instances.
static BOOL sLanguageTextInputAllowed;
+ static BOOL sWinIMEOpened;
static HKL sWinInputLocale;
static DWORD sWinIMEConversionMode;
static DWORD sWinIMESentenceMode;
diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp
index 30c6394..11f3c13 100644
--- a/linden/indra/llxml/llcontrol.cpp
+++ b/linden/indra/llxml/llcontrol.cpp
@@ -536,7 +536,7 @@ void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
void LLControlGroup::setRect(const LLString& name, const LLRect &val)
{
LLControlBase* control = getControl(name);
-
+
if (control && control->isType(TYPE_RECT))
{
control->set(val.getValue());
diff --git a/linden/indra/llxml/llxmlnode.h b/linden/indra/llxml/llxmlnode.h
index 7c22157..e2019a8 100644
--- a/linden/indra/llxml/llxmlnode.h
+++ b/linden/indra/llxml/llxmlnode.h
@@ -183,7 +183,8 @@ public:
const LLString& getValue() const { return mValue; }
LLString getTextContents() const;
const LLStringTableEntry* getName() const { return mName; }
- BOOL hasName(LLString name) const { return mName == gStringTable.checkStringEntry(name); }
+ BOOL hasName(const char* name) const { return mName == gStringTable.checkStringEntry(name); }
+ BOOL hasName(LLString name) const { return mName == gStringTable.checkStringEntry(name.c_str()); }
const LLString& getID() const { return mID; }
U32 getChildCount() const;
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 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.18.4.3";
-CFBundleGetInfoString = "Second Life version 1.18.4.3, Copyright 2004-2007 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.18.5.0";
+CFBundleGetInfoString = "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 @@
CFBundleVersion
- 1.18.4.3
+ 1.18.5.0
CSResourcesFileMapped
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
newview/llfloaterlagmeter.cpp
newview/llfloaterland.cpp
newview/llfloaterlandholdings.cpp
+newview/llfloaterlandmark.cpp
newview/llfloatermap.cpp
newview/llfloatermute.cpp
newview/llfloaternamedesc.cpp
@@ -341,3 +342,9 @@ newview/moviemaker.cpp
newview/noise.cpp
newview/pipeline.cpp
newview/viewer.cpp
+newview/llremoteparcelrequest.cpp
+newview/llfloaterurldisplay.cpp
+newview/llfloaterevent.cpp
+newview/llfloaterclassified.cpp
+newview/llfloaterparcel.cpp
+newview/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 @@
===========
+Logitech License
+===========
+
+End-User License Agreement for Logitech LCD SDK
+
+This 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.
+
+1 Grant of License and Restrictions.
+This Agreement grants You the following rights provided that You comply with all terms and conditions of this Agreement.
+(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.
+(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.
+(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.
+(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.
+
+2 Updates.
+Logitech 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.
+
+3 Intellectual Property Rights.
+The 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.
+
+4 Disclaimer of Warranty.
+TO 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.
+
+5 Limitation of Liability.
+IN 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.
+
+6 U.S. Government Rights.
+Use, 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.
+
+7 Export Law Assurances.
+You 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.
+
+8 Termination:
+This 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.
+
+9 General Terms and Conditions.
+If 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.
+
+===========
APR License
===========
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
{
return mRegionp && mRegionp->canManageEstate();
}
+
//-----------------------------------------------------------------------------
// sendMessage()
//-----------------------------------------------------------------------------
@@ -2934,6 +2935,7 @@ void LLAgent::endAnimationUpdateUI()
// Don't let this be called more than once if the camera
// mode hasn't changed. --JC
mLastCameraMode = mCameraMode;
+
}
@@ -4194,15 +4196,22 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL animate)
if (animate && !mAvatarObject.isNull())
{
sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
+ mAvatarObject->startMotion(ANIM_AGENT_CUSTOMIZE);
LLMotion* turn_motion = mAvatarObject->findMotion(ANIM_AGENT_CUSTOMIZE);
+
if (turn_motion)
{
mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
+
}
else
{
mAnimationDuration = gSavedSettings.getF32("ZoomTime");
}
+
+
+
+
gAgent.setFocusGlobal(LLVector3d::zero);
}
else
@@ -4709,6 +4718,22 @@ U8 LLAgent::getGodLevel() const
#endif
}
+bool LLAgent::isTeen() const
+{
+ return mAccess < SIM_ACCESS_MATURE;
+}
+
+void LLAgent::setTeen(bool teen)
+{
+ if (teen)
+ {
+ mAccess = SIM_ACCESS_PG;
+ }
+ else
+ {
+ mAccess = SIM_ACCESS_MATURE;
+ }
+}
void LLAgent::buildFullname(std::string& name) const
{
@@ -5627,7 +5652,7 @@ void LLAgent::teleportRequest(
}
// Landmark ID = LLUUID::null means teleport home
-void LLAgent::teleportViaLandmark(const LLUUID& landmark_id)
+void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
{
LLViewerRegion *regionp = getRegion();
if(regionp && teleportCore())
@@ -5637,7 +5662,7 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_id)
msg->nextBlockFast(_PREHASH_Info);
msg->addUUIDFast(_PREHASH_AgentID, getID());
msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
- msg->addUUIDFast(_PREHASH_LandmarkID, landmark_id);
+ msg->addUUIDFast(_PREHASH_LandmarkID, landmark_asset_id);
sendReliableMessage();
}
}
@@ -6850,7 +6875,7 @@ void LLAgent::removeWearable( EWearableType type )
{
LLWearable* old_wearable = mWearableEntry[ type ].mWearable;
- if ( (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if ( (gAgent.isTeen())
&& (type == WT_UNDERSHIRT || type == WT_UNDERPANTS))
{
// Can't take off underclothing in simple UI mode or on PG accounts
@@ -6985,8 +7010,8 @@ void LLAgent::setWearableOutfit(
wearables_to_remove[WT_SOCKS] = remove;
wearables_to_remove[WT_JACKET] = remove;
wearables_to_remove[WT_GLOVES] = remove;
- wearables_to_remove[WT_UNDERSHIRT] = (gAgent.mAccess >= SIM_ACCESS_MATURE) & remove;
- wearables_to_remove[WT_UNDERPANTS] = (gAgent.mAccess >= SIM_ACCESS_MATURE) & remove;
+ wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) & remove;
+ wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) & remove;
wearables_to_remove[WT_SKIRT] = remove;
S32 count = wearables.count();
@@ -7224,7 +7249,7 @@ void LLAgent::userRemoveWearable( void* userdata )
EWearableType type = (EWearableType)(intptr_t)userdata;
if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&&
- //!((gAgent.mAccess >= SIM_ACCESS_MATURE) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
+ //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
{
gAgent.removeWearable( type );
}
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:
BOOL isGodlike() const;
U8 getGodLevel() const;
+ bool isTeen() const;
+ void setTeen(bool teen);
BOOL isGroupTitleHidden() const { return mHideGroupTitle; }
BOOL isGroupMember() const { return !mGroupID.isNull(); } // This is only used for building titles!
const LLUUID &getGroupID() const { return mGroupID; }
@@ -666,8 +668,6 @@ public:
F32 mDrawDistance;
- // Access or "maturity" level
- U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG
U64 mGroupPowers;
BOOL mHideGroupTitle;
char mGroupTitle[DB_GROUP_TITLE_BUF_SIZE]; /*Flawfinder: ignore*/ // honorific, like "Sir"
@@ -703,6 +703,8 @@ public:
static std::map sTeleportProgressMessages;
private:
+ // Access or "maturity" level
+ U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG
ETeleportState mTeleportState;
LLString mTeleportMessage;
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 @@
+/**
+ * @file llparcelrequest.cpp
+ * @brief Implementation of the LLParcelRequest class.
+ *
+ * $LicenseInfo:firstyear=2006&license=internal$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llagent.h"
+#include "llclassifiedstatsresponder.h"
+
+#include "llpanelclassified.h"
+#include "llpanel.h"
+#include "llhttpclient.h"
+#include "llsdserialize.h"
+#include "llviewerregion.h"
+#include "llview.h"
+#include "message.h"
+
+LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLViewHandle classified_panel_handle)
+: mClassifiedPanelHandle(classified_panel_handle)
+{
+}
+/*virtual*/
+void LLClassifiedStatsResponder::result(const LLSD& content)
+{
+ LLUUID classified_id = content["classified_id"];
+ S32 teleport = content["teleport_clicks"].asInteger();
+ S32 map = content["map_clicks"].asInteger();
+ S32 profile = content["profile_clicks"].asInteger();
+ S32 search_teleport = content["search_teleport_clicks"].asInteger();
+ S32 search_map = content["search_map_clicks"].asInteger();
+ S32 search_profile = content["search_profile_clicks"].asInteger();
+
+ std::string msg = llformat("Clicks: %d teleport, %d map, %d profile",
+ teleport + search_teleport,
+ map + search_map,
+ profile + search_profile);
+
+ LLPanelClassified* classified_panelp = (LLPanelClassified*)LLPanel::getPanelByHandle(mClassifiedPanelHandle);
+
+ if(classified_panelp)
+ {
+ classified_panelp->setClickThroughText(msg);
+ }
+
+}
+
+/*virtual*/
+void LLClassifiedStatsResponder::error(U32 status, const std::string& reason)
+{
+ llinfos << "LLClassifiedStatsResponder::error("
+ << status << ": " << reason << ")" << llendl;
+}
+
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 @@
+/**
+ * @file llclassifiedstatsrequest.h
+ * @brief Responder class for classified stats request.
+ *
+ * $LicenseInfo:firstyear=2006&license=internal$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLCLASSIFIEDSTATSRESPONDER_H
+#define LL_LLCLASSIFIEDSTATSRESPONDER_H
+
+#include "llhttpclient.h"
+#include "llview.h"
+
+class LLClassifiedStatsResponder : public LLHTTPClient::Responder
+{
+public:
+ LLClassifiedStatsResponder(LLViewHandle classified_panel_handle);
+ //If we get back a normal response, handle it here
+ virtual void result(const LLSD& content);
+ //If we get back an error (not found, etc...), handle it here
+ virtual void error(U32 status, const std::string& reason);
+
+protected:
+ LLViewHandle mClassifiedPanelHandle;
+};
+
+#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 @@
#include "llstartup.h"
#include "viewer.h"
+// Used for LCD display
+extern void AddNewDebugConsoleToLCD(const LLWString &newLine);
+
LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow.
const F32 FADE_DURATION = 2.f;
@@ -254,6 +257,10 @@ void LLConsole::addLine(const LLWString& wline, F32 size, const LLColor4 &color)
mLineQueue.pop_front();
}
mLineQueue.push_back(LineInfo(wline, size, color, mTimer.getElapsedTimeF32()));
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // add to LCD screen
+ AddNewDebugConsoleToLCD(wline);
+#endif
}
void 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()
// This is a fairly complete Japanese font that ships with Mac OS X.
// The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
// The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
- 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)");
+ 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)");
#else
// 'unicode.ttf' doesn't exist, but hopefully an international
// user can take the hint and drop in their favourite local font.
@@ -467,7 +467,8 @@ void declare_settings()
gSavedSettings.declareF32("RenderNameShowTime", 10.f, "Fade avatar names after specified time (seconds)"); // seconds
gSavedSettings.declareF32("RenderNameFadeDuration", 1.f, "Time interval over which to fade avatar names (seconds)"); // seconds
gSavedSettings.declareBOOL("RenderNameHideSelf", FALSE, "Don't display own name above avatar");
- gSavedSettings.declareBOOL("RenderHideGroupTitle", FALSE, "Don't show group titles in name labels");
+ gSavedSettings.declareBOOL("RenderHideGroupTitle", FALSE, "Don't show my group title in my name label");
+ gSavedSettings.declareBOOL("RenderGroupTitleAll", TRUE, "Show group titles in name labels");
// Camera widget controls
const S32 CAMERA_LEFT = MOVE_BTN_FLY_RIGHT + 10;
@@ -971,6 +972,9 @@ void declare_settings()
gSavedSettings.declareRect("PreviewScriptRect", LLRect(0, 550, 500, 0), "Rectangle for script preview window" ); // Only width and height are used
gSavedSettings.declareRect("LSLHelpRect", LLRect(0, 400, 400, 0), "Rectangle for LSL help window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewLandmarkRect", LLRect(0, 90, 300, 0), "Rectangle for landmark preview window" ); // Only width and height are used
+ gSavedSettings.declareRect("PreviewURLRect", LLRect(0, 90, 300, 0), "Rectangle for URL preview window" ); // Only width and height are used
+ gSavedSettings.declareRect("PreviewEventRect", LLRect(0, 530, 420, 0), "Rectangle for Event preview window" ); // Only width and height are used
+ gSavedSettings.declareRect("PreviewClassifiedRect", LLRect(0, 530, 420, 0), "Rectangle for URL preview window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewSoundRect", LLRect(0, 85, 300, 0), "Rectangle for sound preview window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewObjectRect", LLRect(0, 85, 300, 0), "Rectangle for object preview window" ); // Only width and height are used
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()
gSavedSettings.declareRect("FloaterRegionInfo", LLRect(0, 512, 480, 0), "Rectangle for region info window");
+ // Landmark Picker
+ gSavedSettings.declareRect("FloaterLandmarkRect", LLRect(0, 290, 310, 0), "Rectangle for landmark picker" ); // Only width and height are used
+
// editors
// Only width and height are used
gSavedSettings.declareRect("NotecardEditorRect", LLRect(0, 400, 400, 0), "Rectangle for notecard editor");
@@ -1322,7 +1329,7 @@ void declare_settings()
gSavedSettings.declareBOOL("AutomaticFly", TRUE, "Fly by holding jump key or using \"Fly\" command (FALSE = fly by using \"Fly\" command only)");
// Index of the last find panel you opened.
- gSavedSettings.declareString("LastFindPanel", "all_panel", "Controls which find operation appears by default when clicking \"Find\" button ");
+ gSavedSettings.declareString("LastFindPanel", "find_all_panel", "Controls which find operation appears by default when clicking \"Find\" button ");
// grab keystrokes at last possible moment to minimize latency
gSavedSettings.declareBOOL("AsyncKeyboard", TRUE, "Improves responsiveness to keyboard input when at low framerates");
@@ -1369,6 +1376,15 @@ void declare_settings()
gSavedSettings.declareBOOL("MapShowInfohubs", TRUE, "Show infohubs on the world map");
gSavedSettings.declareBOOL("MapShowClassifieds", TRUE, "Show locations associated with classified ads on world map");
+ // Search panel in directory uses this URL for queries
+ // Trailing "/" matters.
+ gSavedSettings.declareString("SearchDefaultURL",
+ "http://secondlife.com/app/search/index.php?m=[MATURE]",
+ "URL to load for empty searches");
+ gSavedSettings.declareString("SearchQueryURL",
+ "http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]&m=[MATURE]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]",
+ "URL to use for searches");
+
// Arrow keys move avatar while in chat?
gSavedSettings.declareBOOL("ArrowKeysMoveAvatar", TRUE, "While cursor is in chat entry box, arrow keys still control your avatar");
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()
gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas).");
gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom.");
+ // logitech LCD settings
+ gSavedSettings.declareS32("LCDDestination", 0, "Which LCD to use");
+ gSavedSettings.declareBOOL("DisplayChat", TRUE, "Display Latest Chat message on LCD");
+ gSavedSettings.declareBOOL("DisplayIM", TRUE, "Display Latest IM message on LCD");
+ gSavedSettings.declareBOOL("DisplayRegion", TRUE, "Display Location information on LCD");
+ gSavedSettings.declareBOOL("DisplayDebug", TRUE, "Display Network Information on LCD");
+ gSavedSettings.declareBOOL("DisplayDebugConsole", TRUE, "Display Console Debug Information on LCD");
+ gSavedSettings.declareBOOL("DisplayLinden", TRUE, "Display Account Information on LCD");
+
// Vector Processor & Math
gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version.");
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 @@
/**
* @file llfloateravatarinfo.cpp
* @brief LLFloaterAvatarInfo class implementation
+ * Avatar information as shown in a floating window from right-click
+ * Profile. Used for editing your own avatar info. Just a wrapper
+ * for LLPanelAvatar, shared with the Find directory.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
@@ -28,54 +31,42 @@
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
-
-/**
- * Avatar information as shown in a floating window from right-click
- * Profile. Used for editing your own avatar info. Just a wrapper
- * for LLPanelAvatar, shared with the Find directory.
- */
-
-// system includes
-
-// linden prefix includes
#include "llviewerprecompiledheaders.h"
-// self include
#include "llfloateravatarinfo.h"
-// linden library includes
-#include "llcachename.h"
-#include "llfontgl.h"
-#include "llinventory.h"
-#include "message.h"
-
// viewer project includes
#include "llagentdata.h"
-#include "llbutton.h"
-#include "llcallingcard.h"
-#include "llcheckboxctrl.h"
+//#include "llbutton.h"
+//#include "llcallingcard.h"
+//#include "llcheckboxctrl.h"
+//#include "llcommandhandler.h"
+//#include "llfloaterworldmap.h"
+//#include "llfloatermute.h"
+//#include "llinventoryview.h"
+//#include "lllineeditor.h"
+//#include "llmutelist.h"
+//#include "llscrolllistctrl.h"
+//#include "lltabcontainer.h"
+//#include "llimview.h"
+//#include "lluiconstants.h"
+//#include "llviewerobject.h"
+//#include "llviewerobjectlist.h"
+//#include "llviewerregion.h"
+//#include "llviewborder.h"
+//#include "llinventorymodel.h"
+//#include "lltextbox.h"
+//#include "lltexturectrl.h"
+//#include "llviewertexteditor.h"
#include "llcommandhandler.h"
-#include "llfloaterworldmap.h"
-#include "llfloatermute.h"
-#include "llinventoryview.h"
-#include "lllineeditor.h"
-#include "llmutelist.h"
-#include "llscrolllistctrl.h"
-#include "lltabcontainer.h"
-#include "llimview.h"
-#include "lluiconstants.h"
-#include "llviewerobject.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llviewborder.h"
-#include "llinventorymodel.h"
-#include "lltextbox.h"
-#include "lltexturectrl.h"
-#include "llviewertexteditor.h"
#include "llpanelavatar.h"
-
#include "llvieweruictrlfactory.h"
+// linden library includes
+#include "llinventory.h"
+#include "lluuid.h"
+#include "message.h"
+
const char FLOATER_TITLE[] = "Profile";
const LLRect FAI_RECT(0, 530, 420, 0);
@@ -100,7 +91,7 @@ public:
if (params[1] == "about")
{
- LLFloaterAvatarInfo::showFromDirectory(agent_id);
+ LLFloaterAvatarInfo::show(agent_id);
return true;
}
return false;
@@ -172,79 +163,52 @@ void LLFloaterAvatarInfo::resetGroupList()
mPanelAvatarp->resetGroupList();
}
-
-// Open profile to a certian tab.
// static
-void LLFloaterAvatarInfo::showFromObject(
- const LLUUID& avatar_id,
- std::string tab_name)
+LLFloaterAvatarInfo* LLFloaterAvatarInfo::show(const LLUUID &avatar_id)
{
- if(avatar_id.isNull())
+ if (avatar_id.isNull())
{
- return;
+ return NULL;
}
- LLFloaterAvatarInfo *floater = NULL;
+ LLFloaterAvatarInfo *floater;
if (gAvatarInfoInstances.checkData(avatar_id))
{
// ...bring that window to front
floater = gAvatarInfoInstances.getData(avatar_id);
+ floater->open(); /*Flawfinder: ignore*/
}
else
{
floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
- avatar_id);
+ avatar_id );
floater->center();
- floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
-
+ floater->open(); /*Flawfinder: ignore*/
}
- floater->mPanelAvatarp->selectTabByName(tab_name);
- floater->open(); /*Flawfinder: ignore*/
+ return floater;
}
+// Open profile to a certain tab.
// static
-void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id)
+void LLFloaterAvatarInfo::showFromObject(
+ const LLUUID& avatar_id,
+ std::string tab_name)
{
- if(avatar_id.isNull())
+ LLFloaterAvatarInfo *floater = show(avatar_id);
+ if (floater)
{
- return;
- }
-
- LLFloaterAvatarInfo *floater;
- if (gAvatarInfoInstances.checkData(avatar_id))
- {
- // ...bring that window to front
- floater = gAvatarInfoInstances.getData(avatar_id);
- }
- else
- {
- floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
- avatar_id);
- floater->center();
floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
- }
- if(floater)
- {
- floater->open();
+ floater->mPanelAvatarp->selectTabByName(tab_name);
}
}
-
// static
-void LLFloaterAvatarInfo::showFromAvatar(LLViewerObject *avatar)
+void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id)
{
- if (gAvatarInfoInstances.checkData(avatar->getID()))
- {
- // ...bring that window to front
- LLFloaterAvatarInfo *f = gAvatarInfoInstances.getData(avatar->getID());
- f->open(); /*Flawfinder: ignore*/
- }
- else
+ LLFloaterAvatarInfo *floater = show(avatar_id);
+ if (floater)
{
- LLFloaterAvatarInfo *floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
- avatar->getID() );
- floater->center();
- floater->open(); /*Flawfinder: ignore*/
+ floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
}
}
@@ -252,21 +216,9 @@ void LLFloaterAvatarInfo::showFromAvatar(LLViewerObject *avatar)
// static
void LLFloaterAvatarInfo::showFromFriend(const LLUUID& agent_id, BOOL online)
{
- if(agent_id.isNull())
+ LLFloaterAvatarInfo *floater = show(agent_id);
+ if (floater)
{
- return;
- }
- if (gAvatarInfoInstances.checkData( agent_id ))
- {
- // ...bring that window to front
- LLFloaterAvatarInfo *f = gAvatarInfoInstances.getData( agent_id );
- f->open(); /*Flawfinder: ignore*/
- }
- else
- {
- LLFloaterAvatarInfo *floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT,
- agent_id);
- floater->center();
floater->mSuggestedOnlineStatus = online ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
}
}
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
: public LLPreview
{
public:
-
static void* createPanelAvatar(void* data);
virtual BOOL postBuild();
@@ -77,16 +76,14 @@ public:
/*virtual*/ void loadAsset();
/*virtual*/ EAssetStatus getAssetStatus();
- // Enables rate button, enables IM
+ static LLFloaterAvatarInfo* show(const LLUUID& avatar_id);
+ // Core method, doesn't do anything funny with online status or
+ // tab selection.
+
static void showFromObject(const LLUUID &avatar_id, std::string tab_name = std::string());
- // Disables the rate button, enables IM
static void showFromDirectory(const LLUUID &avatar_id);
- // Enables all buttons
- static void showFromAvatar(LLViewerObject *object);
-
- // Enables most buttons
static void showFromFriend(const LLUUID& agent_id, BOOL online);
static LLFloaterAvatarInfo* getInstance(const LLUUID &id);
@@ -94,8 +91,6 @@ public:
void resetGroupList();
private:
-
-protected:
LLUUID mAvatarID; // for which avatar is this window?
LLPanelAvatar* mPanelAvatarp;
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 @@
#include "llfloaterhtml.h"
#include "llweb.h"
+// Used for LCD display
+extern void AddNewIMToLCD(const LLString &newLine);
+extern void AddNewChatToLCD(const LLString &newLine);
//
// Constants
//
@@ -309,6 +312,20 @@ void LLFloaterChat::addChat(const LLChat& chat,
chat.mChatType == CHAT_TYPE_DEBUG_MSG
&& !gSavedSettings.getBOOL("ScriptErrorsAsChat");
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // add into LCD displays
+ if (!invisible_script_debug_chat)
+ {
+ if (!from_instant_message)
+ {
+ AddNewChatToLCD(chat.mText);
+ }
+ else
+ {
+ AddNewIMToLCD(chat.mText);
+ }
+ }
+#endif
if (!invisible_script_debug_chat
&& !chat.mMuted
&& 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 @@
+/**
+* @file llfloaterclassified.cpp
+* @brief LLFloaterClassifiedInfo class implementation
+*
+* Classified information as shown in a floating window from secondlife:// command
+* handler.
+*
+* $LicenseInfo:firstyear=2002&license=internal$
+*
+* Copyright (c) 2002-2007, Linden Research, Inc.
+*
+* The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+* this source code is governed by the Linden Lab Source Code Disclosure
+* Agreement ("Agreement") previously entered between you and Linden
+* Lab. By accessing, using, copying, modifying or distributing this
+* software, you acknowledge that you have been informed of your
+* obligations under the Agreement and agree to abide by those obligations.
+*
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterclassified.h"
+
+// viewer project includes
+#include "llcommandhandler.h"
+#include "llpanelclassified.h"
+#include "llvieweruictrlfactory.h"
+
+// linden library includes
+#include "lluuid.h"
+
+//-----------------------------------------------------------------------------
+// Globals
+//-----------------------------------------------------------------------------
+
+LLMap< const LLUUID, LLFloaterClassifiedInfo* > gClassifiedInfoInstances;
+////////////////////////////////////////////////////////////////////////////
+// LLFloaterEventDisplay
+
+class LLClassifiedHandler : public LLCommandHandler
+{
+public:
+ LLClassifiedHandler() : LLCommandHandler("classified") { }
+ bool handle(const std::vector& tokens)
+ {
+ if (tokens.size() < 2)
+ {
+ return false;
+ }
+ LLUUID classified_id;
+ if (!classified_id.set(tokens[0], FALSE))
+ {
+ return false;
+ }
+
+ if (tokens[1] == "about")
+ {
+ LLFloaterClassifiedInfo::show(classified_id);
+ return true;
+ }
+ return false;
+ }
+};
+LLClassifiedHandler gClassifiedHandler;
+
+LLFloaterClassifiedInfo::LLFloaterClassifiedInfo(const std::string& name, const LLUUID &id)
+: LLFloater(name),
+mClassifiedID( id )
+{
+ mFactoryMap["classified_details_panel"] = LLCallbackMap(LLFloaterClassifiedInfo::createClassifiedDetail, this);
+ gUICtrlFactory->buildFloater(this, "floater_preview_classified.xml", &getFactoryMap());
+ gClassifiedInfoInstances.addData(id, this);
+}
+
+LLFloaterClassifiedInfo::~LLFloaterClassifiedInfo()
+{
+ // child views automatically deleted
+ gClassifiedInfoInstances.removeData(mClassifiedID);
+
+}
+
+void LLFloaterClassifiedInfo::displayClassifiedInfo(const LLUUID& classified_id)
+{
+ mClassifiedPanel->setClassifiedID(classified_id);
+ mClassifiedPanel->sendClassifiedInfoRequest();
+ this->setFrontmost(true);
+}
+
+// static
+void* LLFloaterClassifiedInfo::createClassifiedDetail(void* userdata)
+{
+ LLFloaterClassifiedInfo *self = (LLFloaterClassifiedInfo*)userdata;
+ self->mClassifiedPanel = new LLPanelClassified(TRUE, TRUE);
+ self->mClassifiedPanel->childSetValue("classified_url", self->mClassifiedID);
+ return self->mClassifiedPanel;
+}
+
+// static
+LLFloaterClassifiedInfo* LLFloaterClassifiedInfo::show(const LLUUID &classified_id)
+{
+ if (classified_id.isNull())
+ {
+ return NULL;
+ }
+
+ LLFloaterClassifiedInfo *floater;
+ if (gClassifiedInfoInstances.checkData(classified_id))
+ {
+ // ...bring that window to front
+ floater = gClassifiedInfoInstances.getData(classified_id);
+ floater->open(); /*Flawfinder: ignore*/
+ floater->setFrontmost(true);
+ }
+ else
+ {
+ floater = new LLFloaterClassifiedInfo("calssifiedinfo", classified_id );
+ floater->center();
+ floater->open(); /*Flawfinder: ignore*/
+ floater->displayClassifiedInfo(classified_id);
+ floater->setFrontmost(true);
+ }
+
+ return floater;
+}
+
+
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 @@
+/**
+ * @file llfloaterclassified.h
+ * @brief LLFloaterClassifiedInfo class declaration
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+/**
+* Classified information as shown in a floating window from a secondlife:// url.
+* Just a wrapper for LLPanelClassified.
+*/
+
+
+#ifndef LL_FLOATERCLASSIFIED_H
+#define LL_FLOATERCLASSIFIED_H
+
+#include "llfloater.h"
+
+class LLPanelClassified;
+
+class LLFloaterClassifiedInfo : LLFloater
+{
+public:
+ LLFloaterClassifiedInfo(const std::string& name, const LLUUID &id );
+ virtual ~LLFloaterClassifiedInfo();
+
+ void displayClassifiedInfo(const LLUUID& classified_id);
+
+ static LLFloaterClassifiedInfo* show(const LLUUID& classified_id);
+
+ static void* createClassifiedDetail(void* userdata);
+
+private:
+
+ LLPanelClassified* mClassifiedPanel;
+ LLUUID mClassifiedID;
+
+};
+
+#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)
case WT_UNDERSHIRT:
case WT_UNDERPANTS:
// can't take off underpants with PG accounts
- return (gAgent.mAccess >= SIM_ACCESS_MATURE);
+ return (!gAgent.isTeen());
}
}
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:
LLString name = LLString("checkbox_") + LLWearable::typeToTypeLabel( (EWearableType)i );
mCheckBoxList.push_back(std::make_pair(name,i));
// Hide teen items
- if (gAgent.mAccess < SIM_ACCESS_MATURE &&
+ if (gAgent.isTeen() &&
!edit_wearable_for_teens((EWearableType)i))
{
// hide wearable checkboxes that don't apply to this account
@@ -462,7 +462,7 @@ BOOL LLPanelEditWearable::postBuild()
// If PG, can't take off underclothing or shirt
mCanTakeOff =
LLWearable::typeToAssetType( mType ) == LLAssetType::AT_CLOTHING &&
- !( gAgent.mAccess < SIM_ACCESS_MATURE && (mType == WT_UNDERSHIRT || mType == WT_UNDERPANTS) );
+ !( gAgent.isTeen() && (mType == WT_UNDERSHIRT || mType == WT_UNDERPANTS) );
childSetVisible("Take Off", mCanTakeOff);
childSetAction("Take Off", LLPanelEditWearable::onBtnTakeOff, this );
@@ -1606,8 +1606,8 @@ BOOL LLFloaterCustomize::postBuild()
childSetTabChangeCallback("customize tab container", "Underpants", onTabChanged, (void*)WT_UNDERPANTS );
childSetTabChangeCallback("customize tab container", "Skirt", onTabChanged, (void*)WT_SKIRT );
- // Remove underware panels for teens
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ // Remove underwear panels for teens
+ if (gAgent.isTeen())
{
LLTabContainerCommon* tab_container = LLUICtrlFactory::getTabContainerByName(this, "customize tab container");
if (tab_container)
@@ -1693,7 +1693,7 @@ void LLFloaterCustomize::onBtnMakeOutfit( void* userdata )
{
BOOL enabled = (gAgent.getWearable( (EWearableType) i ) != NULL);
BOOL selected = (enabled && (WT_SHIRT <= i) && (i < WT_COUNT)); // only select clothing by default
- if (gAgent.mAccess < SIM_ACCESS_MATURE
+ if (gAgent.isTeen()
&& !edit_wearable_for_teens((EWearableType)i))
{
dialog->setWearableToInclude( i, FALSE, FALSE );
@@ -1730,7 +1730,7 @@ void* LLFloaterCustomize::createWearablePanel(void* userdata)
WearablePanelData* data = (WearablePanelData*)userdata;
EWearableType type = data->mType;
LLPanelEditWearable* panel;
- if ((gAgent.mAccess < SIM_ACCESS_MATURE && !edit_wearable_for_teens(data->mType) ))
+ if ((gAgent.isTeen() && !edit_wearable_for_teens(data->mType) ))
{
panel = NULL;
}
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 @@
#include "lluiconstants.h"
#include "llviewercontrol.h"
-LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL;
-
-//////////////////////////////////////////////
-// LLFloaterDirectory
-
-const S32 MIN_WIDTH = 400;
-const S32 MIN_HEIGHT = 200;
-
#include "llagent.h"
#include "llpanelavatar.h"
#include "llpanelevent.h"
@@ -72,20 +64,18 @@ const S32 MIN_HEIGHT = 200;
#include "lldir.h"
#include "llvieweruictrlfactory.h"
+LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL;
+
LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
: LLFloater(name, "FloaterFindRect2", "")
{
sInstance = this;
-
- // INITIALIZE SUBPANELS TO NULL
+
+ mFindAllPanel = NULL;
mClassifiedPanel = NULL;
mEventsPanel = NULL;
mPopularPanel = NULL;
- mPlacesPanel = NULL;
mLandPanel = NULL;
- mPeoplePanel = NULL;
- mGroupsPanel = NULL;
- mFindPanel = NULL;
mPanelAvatarp = NULL;
mPanelEventp = NULL;
@@ -98,6 +88,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
// Build the floater with our tab panel classes
LLCallbackMap::map_t factory_map;
+ factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this);
factory_map["classified_panel"] = LLCallbackMap(createClassified, this);
factory_map["events_panel"] = LLCallbackMap(createEvents, this);
factory_map["popular_panel"] = LLCallbackMap(createPopular, this);
@@ -105,7 +96,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
factory_map["land_sales_panel"] = LLCallbackMap(createLand, this);
factory_map["people_panel"] = LLCallbackMap(createPeople, this);
factory_map["groups_panel"] = LLCallbackMap(createGroups, this);
- factory_map["all_panel"] = LLCallbackMap(createFind, this);
+ factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this);
factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this);
factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this);
@@ -117,12 +108,14 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this);
gUICtrlFactory->buildFloater(this, "floater_directory.xml", &factory_map);
+ moveResizeHandlesToFront();
if(mPanelAvatarp)
{
mPanelAvatarp->selectTab(0);
}
+ childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChangedFindAll, this);
childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this);
childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this);
childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this);
@@ -130,7 +123,28 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this);
childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this);
childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this);
- childSetTabChangeCallback("Directory Tabs", "all_panel", onTabChanged, this);
+ childSetTabChangeCallback("Directory Tabs", "find_all_old_panel", onTabChanged, this);
+}
+
+LLFloaterDirectory::~LLFloaterDirectory()
+{
+ sInstance = NULL;
+ delete mPanelAvatarp; mPanelAvatarp = NULL;
+ delete mPanelEventp; mPanelEventp = NULL;
+ delete mPanelGroupp; mPanelGroupp = NULL;
+ delete mPanelGroupHolderp; mPanelGroupHolderp = NULL;
+ delete mPanelPlacep; mPanelPlacep = NULL;
+ delete mPanelPlaceSmallp; mPanelPlaceSmallp = NULL;
+ delete mPanelClassifiedp; mPanelClassifiedp = NULL;
+ gSavedSettings.setBOOL("ShowDirectory", FALSE);
+}
+
+// static
+void *LLFloaterDirectory::createFindAll(void* userdata)
+{
+ LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
+ self->mFindAllPanel = LLPanelDirFindAllInterface::create(self);
+ return self->mFindAllPanel;
}
// static
@@ -161,8 +175,7 @@ void* LLFloaterDirectory::createPopular(void* userdata)
void* LLFloaterDirectory::createPlaces(void* userdata)
{
LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
- self->mPlacesPanel = new LLPanelDirPlaces("places_panel", self);
- return self->mPlacesPanel;
+ return new LLPanelDirPlaces("places_panel", self);
}
// static
@@ -178,24 +191,21 @@ void* LLFloaterDirectory::createLand(void* userdata)
void* LLFloaterDirectory::createPeople(void* userdata)
{
LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
- self->mPeoplePanel = new LLPanelDirPeople("people_panel", self);
- return self->mPeoplePanel;
+ return new LLPanelDirPeople("people_panel", self);
}
// static
void* LLFloaterDirectory::createGroups(void* userdata)
{
LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
- self->mGroupsPanel = new LLPanelDirGroups("groups_panel", self);
- return self->mGroupsPanel;
+ return new LLPanelDirGroups("groups_panel", self);
}
// static
-void *LLFloaterDirectory::createFind(void* userdata)
+void *LLFloaterDirectory::createFindAllOld(void* userdata)
{
LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
- self->mFindPanel = new LLPanelDirFind("find_panel", self);
- return self->mFindPanel;
+ return new LLPanelDirFindAllOld("find_all_old_panel", self);
}
// static
@@ -282,6 +292,13 @@ void LLFloaterDirectory::requestClassifieds()
}
}
+void LLFloaterDirectory::showFindAll(const std::string& search_text)
+{
+ showPanel("find_all_panel");
+ LLPanelDirFindAllInterface::search(sInstance->mFindAllPanel, search_text);
+}
+
+
void LLFloaterDirectory::showClassified(const LLUUID& classified_id)
{
showPanel("classified_panel");
@@ -348,19 +365,6 @@ void LLFloaterDirectory::refreshGroup(const LLUUID& group_id)
}
}
-LLFloaterDirectory::~LLFloaterDirectory()
-{
- sInstance = NULL;
- delete mPanelAvatarp; mPanelAvatarp = NULL;
- delete mPanelEventp; mPanelEventp = NULL;
- delete mPanelGroupp; mPanelGroupp = NULL;
- delete mPanelGroupHolderp; mPanelGroupHolderp = NULL;
- delete mPanelPlacep; mPanelPlacep = NULL;
- delete mPanelPlaceSmallp; mPanelPlaceSmallp = NULL;
- delete mPanelClassifiedp; mPanelClassifiedp = NULL;
- gSavedSettings.setBOOL("ShowDirectory", FALSE);
-}
-
void LLFloaterDirectory::focusCurrentPanel()
{
LLTabContainerCommon* tabs = LLUICtrlFactory::getTabContainerByName(this, "Directory Tabs");
@@ -373,25 +377,16 @@ void LLFloaterDirectory::focusCurrentPanel()
}
// static
-void LLFloaterDirectory::show(void *)
+void LLFloaterDirectory::showPanel(const std::string& tabname)
{
-#ifndef LL_RELEASE_FOR_DOWNLOAD
- delete sInstance;
- sInstance = NULL;
-#endif
+ // This function gets called when web browser clicks are processed,
+ // so we don't delete the existing panel, which would delete the
+ // web browser instance currently handling the click. JC
if (!sInstance)
{
sInstance = new LLFloaterDirectory("directory");
}
-
sInstance->open(); /*Flawfinder: ignore*/
- sInstance->focusCurrentPanel();
-}
-
-// static
-void LLFloaterDirectory::showPanel(const LLString& tabname)
-{
- show(NULL);
sInstance->childShowTab("Directory Tabs", tabname);
sInstance->focusCurrentPanel();
}
@@ -474,6 +469,21 @@ void LLFloaterDirectory::setVisible(BOOL visible)
LLFloater::setVisible(visible);
}
+// virtual
+void LLFloaterDirectory::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+ // Don't let this floater go below its minimum width and height, ever.
+ if (width < getMinWidth())
+ {
+ width = getMinWidth();
+ }
+ if (height < getMinHeight())
+ {
+ height = getMinHeight();
+ }
+ LLFloater::reshape(width, height, called_from_parent);
+}
+
void LLFloaterDirectory::onClose(bool app_quitting)
{
setVisible(FALSE);
@@ -491,3 +501,25 @@ void LLFloaterDirectory::onTabChanged(void* data, bool from_click)
gSavedSettings.setString("LastFindPanel", panel->getName());
}
}
+
+// static
+void LLFloaterDirectory::onTabChangedFindAll(void* data, bool from_click)
+{
+ LLFloaterDirectory* self = (LLFloaterDirectory*)data;
+ if (!self) return;
+
+ self->hideAllDetailPanels();
+ LLPanelDirFindAllInterface::focus(self->mFindAllPanel);
+ onTabChanged(data, from_click);
+}
+
+void LLFloaterDirectory::hideAllDetailPanels()
+{
+ if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE);
+ if (mPanelEventp) mPanelEventp->setVisible(FALSE);
+ if (mPanelGroupp) mPanelGroupp->setVisible(FALSE);
+ if (mPanelGroupHolderp) mPanelGroupHolderp->setVisible(FALSE);
+ if (mPanelPlacep) mPanelPlacep->setVisible(FALSE);
+ if (mPanelPlaceSmallp) mPanelPlaceSmallp->setVisible(FALSE);
+ if (mPanelClassifiedp) mPanelClassifiedp->setVisible(FALSE);
+}
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 @@
#define LL_LLFLOATERDIRECTORY_H
#include "llfloater.h"
-#include "lltabcontainer.h"
-#include "viewer.h"
class LLDirectoryCore;
-class LLPanelDirAdvanced;
class LLPanelDirBrowser;
+
+class LLPanelDirAdvanced;
+class LLPanelDirClassified;
class LLPanelDirEvents;
-class LLPanelDirFind;
+class LLPanelDirFindAll;
+class LLPanelDirFindAllOld;
class LLPanelDirGroups;
class LLPanelDirLand;
class LLPanelDirPeople;
-class LLPanelDirClassified;
class LLPanelDirPlaces;
class LLPanelDirPopular;
@@ -62,11 +62,15 @@ public:
/*virtual*/ ~LLFloaterDirectory();
/*virtual*/ void setVisible(BOOL visible);
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
// Used for toggling God mode, which changes to visibility of
// some picks.
static void requestClassifieds();
+ // Outside UI widgets can spawn this floater with various tabs
+ // selected.
+ static void showFindAll(const std::string& search_text);
static void showClassified(const LLUUID& classified_id);
static void showEvents(S32 event_id);
static void showPopular(const LLUUID& parcel_id);
@@ -78,39 +82,25 @@ public:
static void toggleEvents(void*);
static void toggleFind(void*);
static void onTabChanged(void*, bool);
+ static void onTabChangedFindAll(void*, bool);
+
+ void hideAllDetailPanels();
-protected:
- static void show(void *);
- static void showPanel(const LLString& tabname);
- /*virtual*/ void onClose(bool app_quitting);
+private:
+ static void showPanel(const std::string& tabname);
+ /*virtual*/ void onClose(bool app_quitting);
void focusCurrentPanel();
-protected:
-
- // This determines the order of panels in the directory
- // From Left to Right
- enum DIRECTORY_PANEL
- {
- DIRECTORY_PANEL_ALL,
- DIRECTORY_PANEL_CLASSIFIED,
- DIRECTORY_PANEL_EVENTS,
- DIRECTORY_PANEL_POPULAR,
- DIRECTORY_PANEL_LAND,
- DIRECTORY_PANEL_PLACES,
- DIRECTORY_PANEL_PEOPLE,
- DIRECTORY_PANEL_GROUPS,
- DIRECTORY_PANEL_TOTAL
- };
-
- LLPanelDirClassified* mClassifiedPanel;
- LLPanelDirEvents* mEventsPanel;
- LLPanelDirPopular* mPopularPanel;
- LLPanelDirPlaces* mPlacesPanel;
- LLPanelDirLand* mLandPanel;
- LLPanelDirPeople* mPeoplePanel;
- LLPanelDirGroups* mGroupsPanel;
- LLPanelDirFind* mFindPanel;
+private:
+ // Some special "showByID" functions use these cached pointers.
+ // They could be replaced by getPanelByName(), perhaps. JC
+ LLPanelDirFindAll* mFindAllPanel;
+ LLPanelDirClassified* mClassifiedPanel;
+ LLPanelDirEvents* mEventsPanel;
+ LLPanelDirPopular* mPopularPanel;
+ LLPanelDirLand* mLandPanel;
+ static void* createFindAll(void* userdata);
static void* createClassified(void* userdata);
static void* createEvents(void* userdata);
static void* createPopular(void* userdata);
@@ -118,7 +108,7 @@ protected:
static void* createLand(void* userdata);
static void* createPeople(void* userdata);
static void* createGroups(void* userdata);
- static void* createFind(void* userdata);
+ static void* createFindAllOld(void* userdata);
static void* createClassifiedDetail(void* userdata);
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 @@
+/**
+ * @file llfloaterevent.cpp
+ * @brief LLFloaterEventInfo class implementation
+ *
+ * Event information as shown in a floating window from secondlife:// command
+ * handler.
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterevent.h"
+
+// viewer project includes
+#include "llcommandhandler.h"
+#include "llpanelevent.h"
+#include "llvieweruictrlfactory.h"
+
+// linden library includes
+#include "lluuid.h"
+
+////////////////////////////////////////////////////////////////////////////
+// LLFloaterEventInfo
+
+//-----------------------------------------------------------------------------
+// Globals
+//-----------------------------------------------------------------------------
+
+LLMap< U32, LLFloaterEventInfo* > gEventInfoInstances;
+
+class LLEventHandler : public LLCommandHandler
+{
+public:
+ LLEventHandler() : LLCommandHandler("event") { }
+ bool handle(const std::vector& tokens)
+ {
+ if (tokens.size() < 2)
+ {
+ return false;
+ }
+ U32 event_id = atoi(tokens[0].c_str());
+ if (tokens[1] == "about")
+ {
+ LLFloaterEventInfo::show(event_id);
+ return true;
+ }
+ return false;
+ }
+};
+LLEventHandler gEventHandler;
+
+LLFloaterEventInfo::LLFloaterEventInfo(const std::string& name, const U32 event_id)
+: LLFloater(name),
+ mEventID( event_id )
+{
+
+ mFactoryMap["event_details_panel"] = LLCallbackMap(LLFloaterEventInfo::createEventDetail, this);
+ gUICtrlFactory->buildFloater(this, "floater_preview_event.xml", &getFactoryMap());
+ gEventInfoInstances.addData(event_id, this);
+}
+
+LLFloaterEventInfo::~LLFloaterEventInfo()
+{
+ // child views automatically deleted
+ gEventInfoInstances.removeData(mEventID);
+}
+
+void LLFloaterEventInfo::displayEventInfo(const U32 event_id)
+{
+ mPanelEventp->setEventID(event_id);
+ this->setFrontmost(true);
+}
+
+// static
+void* LLFloaterEventInfo::createEventDetail(void* userdata)
+{
+ LLFloaterEventInfo *self = (LLFloaterEventInfo*)userdata;
+ self->mPanelEventp = new LLPanelEvent();
+ gUICtrlFactory->buildPanel(self->mPanelEventp, "panel_event.xml");
+
+ return self->mPanelEventp;
+}
+
+// static
+LLFloaterEventInfo* LLFloaterEventInfo::show(const U32 event_id)
+{
+ LLFloaterEventInfo *floater;
+ if (gEventInfoInstances.checkData(event_id))
+ {
+ // ...bring that window to front
+ floater = gEventInfoInstances.getData(event_id);
+ floater->open(); /*Flawfinder: ignore*/
+ floater->setFrontmost(true);
+ }
+ else
+ {
+ floater = new LLFloaterEventInfo("eventinfo", event_id );
+ floater->center();
+ floater->open(); /*Flawfinder: ignore*/
+ floater->displayEventInfo(event_id);
+ floater->setFrontmost(true);
+ }
+
+ return floater;
+}
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 @@
+/**
+ * @file llfloaterevent.h
+ * @brief LLFloaterEvent class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+/**
+* Event information as shown in a floating window from a secondlife:// url.
+* Just a wrapper for LLPanelEvent.
+*/
+
+#ifndef LL_LLFLOATEREVENT_H
+#define LL_LLFLOATEREVENT_H
+
+#include "llfloater.h"
+
+class LLPanelEvent;
+
+class LLFloaterEventInfo : public LLFloater
+{
+public:
+ LLFloaterEventInfo(const std::string& name, const U32 event_id );
+ /*virtual*/ ~LLFloaterEventInfo();
+
+ void displayEventInfo(const U32 event_id);
+
+ static LLFloaterEventInfo* show(const U32 event_id);
+
+ static void* createEventDetail(void* userdata);
+
+private:
+ U32 mEventID; // for which event is this window?
+ LLPanelEvent* mPanelEventp;
+
+};
+
+#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 @@
/**
* @file llfloatergroupinfo.cpp
* @brief LLFloaterGroupInfo class implementation
+ * Floater used both for display of group information and for
+ * creating new groups.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
@@ -29,23 +31,18 @@
* $/LicenseInfo$
*/
-/**
- * Floater used both for display of group information and for
- * creating new groups.
- *
- * Help, I'm trapped in a software factory!
- */
-
#include "llviewerprecompiledheaders.h"
#include "llfloatergroupinfo.h"
#include "llagent.h"
-#include "llcachename.h"
+#include "llcommandhandler.h"
#include "llcommandhandler.h"
#include "llpanelgroup.h"
#include "llviewermessage.h" // for inventory_offer_callback
+//#include "llviewerwindow.h"
+#include "llcachename.h"
const char FLOATER_TITLE[] = "Group Information";
const 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()
// open links in internal browser
mWebBrowser->setOpenInExternalBrowser( false );
-// *FIX: code in merge sl-search-8
-// // don't automatically open secondlife links since we want to catch
-// // special ones that do other stuff (like open F1 Help)
-// mWebBrowser->setOpenSLURLsInMap( false );
+ // don't automatically open secondlife links since we want to catch
+ // special ones that do other stuff (like open F1 Help)
+ mWebBrowser->setOpenSLURLsInMap( false );
}
#endif // LL_LIBXUL_ENABLED
}
@@ -116,7 +115,7 @@ void LLFloaterHtml::draw()
bool enable_forward = mWebBrowser->canNavigateForward();
childSetEnabled( "forward_btn", enable_forward );
};
-#endif
+#endif // LL_LIBXUL_ENABLED
LLFloater::draw();
}
@@ -180,7 +179,7 @@ void LLFloaterHtml::onClickBack( void* data )
self->mWebBrowser->navigateBack();
};
};
-#endif
+#endif // LL_LIBXUL_ENABLED
}
////////////////////////////////////////////////////////////////////////////////
@@ -204,7 +203,7 @@ void LLFloaterHtml::onClickHome( void* data )
self->mWebBrowser->navigateTo( "http://google.com" );
}
};
-#endif
+#endif // LL_LIBXUL_ENABLED
};
}
@@ -220,7 +219,7 @@ void LLFloaterHtml::onClickForward( void* data )
{
self->mWebBrowser->navigateForward();
};
-#endif
+#endif // LL_LIBXUL_ENABLED
};
}
@@ -228,17 +227,17 @@ void LLFloaterHtml::onClickForward( void* data )
// static
void LLFloaterHtml::onCommitUrlEdit(LLUICtrl* ctrl, void* user_data)
{
+#if LL_LIBXUL_ENABLED
LLFloaterHtml* self = (LLFloaterHtml*)user_data;
LLLineEditor* editor = (LLLineEditor*)ctrl;
std::string url = editor->getText();
-#if LL_LIBXUL_ENABLED
if ( self->mWebBrowser )
{
self->mWebBrowser->navigateTo( url );
};
-#endif
+#endif // LL_LIBXUL_ENABLED
}
////////////////////////////////////////////////////////////////////////////////
@@ -256,7 +255,7 @@ void LLFloaterHtml::onClickGo( void* data )
{
self->mWebBrowser->navigateTo( url );
};
-#endif
+#endif // LL_LIBXUL_ENABLED
};
};
}
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 :
public LLWebBrowserCtrlObserver
{
public:
- LLFloaterHtmlHelp(std::string start_url = "");
+ LLFloaterHtmlHelp(std::string start_url, std::string title);
virtual ~LLFloaterHtmlHelp();
virtual void onClose( bool app_quitting );
virtual void draw();
- static void show();
- static void show(std::string url);
+ static void show(std::string url, std::string title);
static void onClickBack( void* data );
static void onClickHome( void* data );
static void onClickForward( void* data );
@@ -88,7 +87,7 @@ BOOL LLFloaterHtmlHelp::sFloaterOpened = FALSE;
////////////////////////////////////////////////////////////////////////////////
//
-LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url)
+LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title)
: LLFloater( "HTML Help" ),
mWebBrowser( 0 ),
mStatusTextContents( "" ),
@@ -102,10 +101,12 @@ LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url)
childSetAction("back_btn", onClickBack, this);
childSetAction("home_btn", onClickHome, this);
childSetAction("forward_btn", onClickForward, this);
- childSetAction("close_btn", onClickClose, this);
- setDefaultBtn("close_btn");
-
+ if (!title.empty())
+ {
+ setTitle(title);
+ }
+
mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_help_browser" );
if ( mWebBrowser )
{
@@ -168,7 +169,7 @@ void LLFloaterHtmlHelp::draw()
////////////////////////////////////////////////////////////////////////////////
//
-void LLFloaterHtmlHelp::show(std::string url)
+void LLFloaterHtmlHelp::show(std::string url, std::string title)
{
gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, (void*) NULL);
@@ -188,7 +189,7 @@ void LLFloaterHtmlHelp::show(std::string url)
return;
}
- LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url);
+ LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url, title);
// reposition floater from saved settings
LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" );
@@ -313,9 +314,9 @@ LLViewerHtmlHelp::~LLViewerHtmlHelp()
LLUI::setHtmlHelp(NULL);
}
-void LLViewerHtmlHelp::show(std::string url)
+void LLViewerHtmlHelp::show(std::string url, std::string title)
{
- LLFloaterHtmlHelp::show(url);
+ LLFloaterHtmlHelp::show(url, title);
}
BOOL 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:
LLViewerHtmlHelp();
virtual ~LLViewerHtmlHelp();
- /*virtual*/ void show(std::string start_url = std::string());
+ /*virtual*/ void show(std::string start_url = "", std::string title = "");
/*virtual*/ BOOL getFloaterOpened();
};
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()
childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe);
childSetUserData("Name", this);
-
mEditDesc = LLUICtrlFactory::getTextEditorByName(this, "Description");
mEditDesc->setCommitOnFocusLost(TRUE);
mEditDesc->setCommitCallback(onCommitAny);
@@ -1865,13 +1864,11 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
mLocationText(NULL),
mSetBtn(NULL),
mClearBtn(NULL),
- mAllowPublishCtrl(NULL),
mMatureCtrl(NULL),
mPushRestrictionCtrl(NULL),
mPublishHelpButton(NULL),
mParcel(parcel)
{
-
}
@@ -1932,7 +1929,7 @@ BOOL LLPanelLandOptions::postBuild()
mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
// Disable these buttons if they are PG (Teen) users
mPublishHelpButton->setVisible(FALSE);
@@ -2147,7 +2144,7 @@ void LLPanelLandOptions::refresh()
mMatureCtrl->setEnabled( can_change_identity );
mPublishHelpButton->setEnabled( can_change_identity );
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
// Disable these buttons if they are PG (Teen) users
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 @@
typedef std::set uuid_list_t;
const F32 CACHE_REFRESH_TIME = 2.5f;
-class LLTextBox;
+class LLButton;
class LLCheckBoxCtrl;
class LLRadioGroup;
class LLComboBox;
-class LLButton;
class LLNameListCtrl;
class LLSpinCtrl;
class LLLineEditor;
class LLRadioGroup;
class LLParcelSelectionObserver;
class LLTabContainer;
+class LLTextBox;
+class LLTextEditor;
class LLTextureCtrl;
class LLViewerTextEditor;
class LLParcelSelection;
@@ -347,7 +348,6 @@ protected:
LLButton* mSetBtn;
LLButton* mClearBtn;
- LLCheckBoxCtrl *mAllowPublishCtrl;
LLCheckBoxCtrl *mMatureCtrl;
LLCheckBoxCtrl *mPushRestrictionCtrl;
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 @@
+/**
+ * @file lllandmark.cpp
+ * @author Richard Nelson, James Cook, Sam Kolb
+ * @brief LLLandmarkCtrl class implementation including related functions
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterlandmark.h"
+
+#include "llagent.h"
+#include "llviewerimagelist.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llbutton.h"
+#include "lldraghandle.h"
+#include "llfocusmgr.h"
+#include "llviewerimage.h"
+#include "llviewerparcelmgr.h"
+#include "llfolderview.h"
+#include "llinventory.h"
+#include "llinventorymodel.h"
+#include "llinventoryview.h"
+#include "lllineeditor.h"
+#include "llui.h"
+#include "llviewerinventory.h"
+#include "llpermissions.h"
+#include "llsaleinfo.h"
+#include "llassetstorage.h"
+#include "lltextbox.h"
+#include "llparcel.h"
+#include "llresizehandle.h"
+#include "llscrollcontainer.h"
+#include "lltoolmgr.h"
+#include "lltoolpipette.h"
+
+#include "lltool.h"
+#include "llviewerwindow.h"
+#include "llviewerobject.h"
+#include "llviewercontrol.h"
+#include "llglheaders.h"
+#include "llvieweruictrlfactory.h"
+
+#include "roles_constants.h"
+
+
+
+static const S32 CLOSE_BTN_WIDTH = 100;
+const S32 PIPETTE_BTN_WIDTH = 32;
+static const S32 HPAD = 4;
+static const S32 VPAD = 4;
+static const S32 LINE = 16;
+static const S32 SMALL_BTN_WIDTH = 64;
+static const S32 TEX_PICKER_MIN_WIDTH =
+ (HPAD +
+ CLOSE_BTN_WIDTH +
+ HPAD +
+ CLOSE_BTN_WIDTH +
+ HPAD +
+ SMALL_BTN_WIDTH +
+ HPAD +
+ SMALL_BTN_WIDTH +
+ HPAD +
+ 30 +
+ RESIZE_HANDLE_WIDTH * 2);
+static const S32 CLEAR_BTN_WIDTH = 50;
+static const S32 TEX_PICKER_MIN_HEIGHT = 290;
+static const S32 FOOTER_HEIGHT = 100;
+static const S32 BORDER_PAD = HPAD;
+static const S32 TEXTURE_INVENTORY_PADDING = 30;
+static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;
+static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;
+static const F32 CONTEXT_FADE_TIME = 0.08f;
+
+//static const char CURRENT_IMAGE_NAME[] = "Current Landmark";
+//static const char WHITE_IMAGE_NAME[] = "Blank Landmark";
+//static const char NO_IMAGE_NAME[] = "None";
+
+
+LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
+ :
+ mTentativeLabel(NULL),
+ mResolutionLabel(NULL),
+ mIsDirty( FALSE ),
+ mActive( TRUE ),
+ mSearchEdit(NULL),
+ mContextConeOpacity(0.f)
+{
+ gUICtrlFactory->buildFloater(this,"floater_landmark_ctrl.xml");
+
+ mTentativeLabel = LLUICtrlFactory::getTextBoxByName(this,"Multiple");
+
+ mResolutionLabel = LLUICtrlFactory::getTextBoxByName(this,"unknown");
+
+
+ childSetCommitCallback("show_folders_check", onShowFolders, this);
+ childSetVisible("show_folders_check", FALSE);
+
+ mSearchEdit = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR);
+ mSearchEdit->setSearchCallback(onSearchEdit, this);
+
+ mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("inventory panel", WIDGET_TYPE_INVENTORY_PANEL);
+
+ if(mInventoryPanel)
+ {
+ U32 filter_types = 0x0;
+ filter_types |= 0x1 << LLInventoryType::IT_LANDMARK;
+ // filter_types |= 0x1 << LLInventoryType::IT_SNAPSHOT;
+
+ mInventoryPanel->setFilterTypes(filter_types);
+ //mInventoryPanel->setFilterPermMask(getFilterPermMask()); //Commented out due to no-copy texture loss.
+ mInventoryPanel->setSelectCallback(onSelectionChange, this);
+ mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ mInventoryPanel->setAllowMultiSelect(FALSE);
+
+ // store this filter as the default one
+ mInventoryPanel->getRootFolder()->getFilter()->markDefault();
+
+ // Commented out to stop opening all folders with textures
+ mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_LANDMARK);
+
+ // don't put keyboard focus on selected item, because the selection callback
+ // will assume that this was user input
+ mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO);
+ }
+
+ mSavedFolderState = new LLSaveFolderState();
+ mNoCopyLandmarkSelected = FALSE;
+
+ childSetAction("Close", LLFloaterLandmark::onBtnClose,this);
+ childSetAction("New", LLFloaterLandmark::onBtnNew,this);
+ childSetAction("NewFolder", LLFloaterLandmark::onBtnNewFolder,this);
+ childSetAction("Edit", LLFloaterLandmark::onBtnEdit,this);
+ childSetAction("Rename", LLFloaterLandmark::onBtnRename,this);
+ childSetAction("Delete", LLFloaterLandmark::onBtnDelete,this);
+
+ setCanMinimize(FALSE);
+
+ mSavedFolderState->setApply(FALSE);
+}
+
+LLFloaterLandmark::~LLFloaterLandmark()
+{
+ delete mSavedFolderState;
+}
+
+void LLFloaterLandmark::setActive( BOOL active )
+{
+ mActive = active;
+}
+
+// virtual
+BOOL LLFloaterLandmark::handleDragAndDrop(
+ S32 x, S32 y, MASK mask,
+ BOOL drop,
+ EDragAndDropType cargo_type, void *cargo_data,
+ EAcceptance *accept,
+ LLString& tooltip_msg)
+{
+ BOOL handled = FALSE;
+
+ if (cargo_type == DAD_LANDMARK)
+ {
+ LLInventoryItem *item = (LLInventoryItem *)cargo_data;
+
+ BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+ BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
+ BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
+ gAgent.getID());
+
+ PermissionMask item_perm_mask = 0;
+ if (copy) item_perm_mask |= PERM_COPY;
+ if (mod) item_perm_mask |= PERM_MODIFY;
+ if (xfer) item_perm_mask |= PERM_TRANSFER;
+
+ //PermissionMask filter_perm_mask = getFilterPermMask(); Commented out due to no-copy texture loss.
+ PermissionMask filter_perm_mask = mImmediateFilterPermMask;
+ if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask )
+ {
+
+ *accept = ACCEPT_YES_SINGLE;
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ }
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ }
+
+ handled = TRUE;
+ lldebugst(LLERR_USER_INPUT) << "dragAndDrop handled by LLFloaterLandmark " << getName() << llendl;
+
+ return handled;
+}
+
+BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
+{
+ LLFolderView* root_folder = mInventoryPanel->getRootFolder();
+
+ if (root_folder && mSearchEdit)
+ {
+ if (!called_from_parent && mSearchEdit->hasFocus() &&
+ (key == KEY_RETURN || key == KEY_DOWN) &&
+ mask == MASK_NONE)
+ {
+ if (!root_folder->getCurSelectedItem())
+ {
+ LLFolderViewItem* itemp = root_folder->getItemByID(gAgent.getInventoryRootID());
+ if (itemp)
+ {
+ root_folder->setSelection(itemp, FALSE, FALSE);
+ }
+ }
+ root_folder->scrollToShowSelection();
+
+ // move focus to inventory proper
+ root_folder->setFocus(TRUE);
+
+ return TRUE;
+ }
+
+ if (root_folder->hasFocus() && key == KEY_UP)
+ {
+ mSearchEdit->focusFirstItem(TRUE);
+ }
+ }
+
+ return LLFloater::handleKeyHere(key, mask, called_from_parent);
+}
+
+// virtual
+void LLFloaterLandmark::onClose(bool app_quitting)
+{
+ destroy();
+}
+
+
+
+const LLUUID& LLFloaterLandmark::findItemID(const LLUUID& asset_id, BOOL copyable_only)
+{
+ LLViewerInventoryCategory::cat_array_t cats;
+ LLViewerInventoryItem::item_array_t items;
+ LLAssetIDMatches asset_id_matches(asset_id);
+ gInventory.collectDescendentsIf(LLUUID::null,
+ cats,
+ items,
+ LLInventoryModel::INCLUDE_TRASH,
+ asset_id_matches);
+
+ if (items.count())
+ {
+ // search for copyable version first
+ for (S32 i = 0; i < items.count(); i++)
+ {
+ LLInventoryItem* itemp = items[i];
+ LLPermissions item_permissions = itemp->getPermissions();
+ if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
+ {
+ return itemp->getUUID();
+ }
+ }
+ // otherwise just return first instance, unless copyable requested
+ if (copyable_only)
+ {
+ return LLUUID::null;
+ }
+ else
+ {
+ return items[0]->getUUID();
+ }
+ }
+
+ return LLUUID::null;
+}
+
+// static
+void LLFloaterLandmark::onBtnClose(void* userdata)
+{
+ LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
+ self->mIsDirty = FALSE;
+ self->close();
+}
+
+// static
+void LLFloaterLandmark::onBtnEdit(void* userdata)
+{
+ LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
+ // There isn't one, so make a new preview
+ LLViewerInventoryItem* itemp = gInventory.getItem(self->mImageAssetID);
+ if(itemp)
+ {
+ open_landmark(itemp, itemp->getName(), TRUE);
+ }
+}
+// static
+void LLFloaterLandmark::onBtnNew(void* userdata)
+{
+ LLViewerRegion* agent_region = gAgent.getRegion();
+ if(!agent_region)
+ {
+ llwarns << "No agent region" << llendl;
+ return;
+ }
+ LLParcel* agent_parcel = gParcelMgr->getAgentParcel();
+ if (!agent_parcel)
+ {
+ llwarns << "No agent parcel" << llendl;
+ return;
+ }
+ if (!agent_parcel->getAllowLandmark()
+ && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK))
+ {
+ gViewerWindow->alertXml("CannotCreateLandmarkNotOwner");
+ return;
+ }
+
+ LLUUID folder_id;
+ folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+ std::string pos_string;
+ gAgent.buildLocationString(pos_string);
+
+ create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
+ folder_id, LLTransactionID::tnull,
+ pos_string, pos_string, // name, desc
+ LLAssetType::AT_LANDMARK,
+ LLInventoryType::IT_LANDMARK,
+ NOT_WEARABLE, PERM_ALL,
+ NULL);
+}
+// static
+void LLFloaterLandmark::onBtnNewFolder(void* userdata)
+{
+
+}
+// static
+void LLFloaterLandmark::onBtnDelete(void* userdata)
+{
+ LLFloaterLandmark* self = (LLFloaterLandmark*)userdata;
+
+ LLViewerInventoryItem* item = gInventory.getItem(self->mImageAssetID);
+ if(item)
+ {
+ // Move the item to the trash
+ LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+ if (item->getParentUUID() != trash_id)
+ {
+ LLInventoryModel::update_list_t update;
+ LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
+ update.push_back(old_folder);
+ LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1);
+ update.push_back(new_folder);
+ gInventory.accountForUpdate(update);
+
+ LLPointer new_item = new LLViewerInventoryItem(item);
+ new_item->setParent(trash_id);
+ // no need to restamp it though it's a move into trash because
+ // it's a brand new item already.
+ new_item->updateParentOnServer(FALSE);
+ gInventory.updateItem(new_item);
+ gInventory.notifyObservers();
+ }
+ }
+
+ // Delete the item entirely
+ /*
+ item->removeFromServer();
+ gInventory.deleteObject(item->getUUID());
+ gInventory.notifyObservers();
+ */
+
+
+}
+
+// static
+void LLFloaterLandmark::onBtnRename(void* userdata)
+{
+
+}
+
+// static
+void LLFloaterLandmark::onSelectionChange(const std::deque &items, BOOL user_action, void* data)
+{
+ LLFloaterLandmark* self = (LLFloaterLandmark*)data;
+ if (items.size())
+ {
+ LLFolderViewItem* first_item = items.front();
+ LLInventoryItem* itemp = gInventory.getItem(first_item->getListener()->getUUID());
+ self->mNoCopyLandmarkSelected = FALSE;
+ if (itemp)
+ {
+ if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+ {
+ self->mNoCopyLandmarkSelected = TRUE;
+ }
+ self->mImageAssetID = itemp->getUUID();
+ self->mIsDirty = TRUE;
+ }
+ }
+}
+
+// static
+void LLFloaterLandmark::onShowFolders(LLUICtrl* ctrl, void *user_data)
+{
+ LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
+ LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
+
+ if (check_box->get())
+ {
+ picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ }
+ else
+ {
+ picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NO_FOLDERS);
+ }
+}
+
+void LLFloaterLandmark::onSearchEdit(const LLString& search_string, void* user_data )
+{
+ LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
+
+ std::string upper_case_search_string = search_string;
+ LLString::toUpper(upper_case_search_string);
+
+ if (upper_case_search_string.empty())
+ {
+ if (picker->mInventoryPanel->getFilterSubString().empty())
+ {
+ // current filter and new filter empty, do nothing
+ return;
+ }
+
+ picker->mSavedFolderState->setApply(TRUE);
+ picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
+ // add folder with current item to list of previously opened folders
+ LLOpenFoldersWithSelection opener;
+ picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener);
+ picker->mInventoryPanel->getRootFolder()->scrollToShowSelection();
+
+ }
+ else if (picker->mInventoryPanel->getFilterSubString().empty())
+ {
+ // first letter in search term, save existing folder open state
+ if (!picker->mInventoryPanel->getRootFolder()->isFilterModified())
+ {
+ picker->mSavedFolderState->setApply(FALSE);
+ picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
+ }
+ }
+
+ picker->mInventoryPanel->setFilterSubString(upper_case_search_string);
+}
+
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 @@
+/**
+ * @file lltexturectrl.h
+ * @author Richard Nelson, James Cook
+ * @brief LLTextureCtrl class header file including related functions
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERLANDMARK_H
+#define LL_LLFLOATERLANDMARK_H
+
+#include "llcoord.h"
+#include "llfloater.h"
+#include "llstring.h"
+#include "lluictrl.h"
+#include "llpermissionsflags.h"
+
+class LLButton;
+class LLFloaterTexturePicker;
+class LLInventoryItem;
+class LLTextBox;
+class LLViewBorder;
+class LLFolderViewItem;
+class LLSearchEditor;
+class LLInventoryPanel;
+class LLSaveFolderState;
+
+// used for setting drag & drop callbacks.
+typedef BOOL (*drag_n_drop_callback)(LLUICtrl*, LLInventoryItem*, void*);
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// LLFloaterLandmark
+
+class LLFloaterLandmark: public LLFloater, public LLUISingleton
+{
+public:
+ LLFloaterLandmark(const LLSD& data);
+ virtual ~LLFloaterLandmark();
+
+ // LLView overrides
+ virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
+ BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
+ EAcceptance *accept,
+ LLString& tooltip_msg);
+ virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
+
+ // LLFloater overrides
+ virtual void onClose(bool app_quitting);
+
+ const LLUUID& getAssetID() { return mImageAssetID; }
+ const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only);
+
+ void setDirty( BOOL b ) { mIsDirty = b; }
+ BOOL isDirty() { return mIsDirty; }
+ void setActive( BOOL active );
+
+ static void onBtnClose( void* userdata );
+ static void onBtnNew( void* userdata );
+ static void onBtnEdit( void* userdata );
+ static void onBtnDelete( void* userdata );
+ static void onBtnNewFolder( void* userdata );
+ static void onBtnRename( void* userdata );
+ static void onSelectionChange(const std::deque &items, BOOL user_action, void* data);
+ static void onShowFolders(LLUICtrl* ctrl, void* userdata);
+ static void onSearchEdit(const LLString& search_string, void* user_data );
+
+protected:
+ LLPointer mLandmarkp;
+
+ LLUUID mImageAssetID; // Currently selected texture
+
+ LLUUID mWhiteImageAssetID;
+ LLUUID mSpecialCurrentImageAssetID; // Used when the asset id has no corresponding texture in the user's inventory.
+ LLUUID mOriginalImageAssetID;
+
+ LLTextBox* mTentativeLabel;
+ LLTextBox* mResolutionLabel;
+
+ LLString mPendingName;
+ BOOL mIsDirty;
+ BOOL mActive;
+
+ LLSearchEditor* mSearchEdit;
+ LLInventoryPanel* mInventoryPanel;
+ PermissionMask mImmediateFilterPermMask;
+ PermissionMask mNonImmediateFilterPermMask;
+ BOOL mNoCopyLandmarkSelected;
+ F32 mContextConeOpacity;
+ LLSaveFolderState* mSavedFolderState;
+};
+
+#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 @@
#include "llspinctrl.h"
#include "llstatgraph.h"
#include "llstatusbar.h"
-#include "lltextbox.h"
+//#include "lltextbox.h"
#include "llui.h"
#include "llviewermenu.h"
#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 @@
#include "llfloater.h"
class LLNetMap;
-class LLSliderCtrl;
-class LLStatGraph;
-class LLTextBox;
-class LLUICtrl;
-class LLViewerImage;
//
// 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 @@
+/**
+ * @file llfloaterparcel.cpp
+ * @brief LLFloaterParcel class implementation
+ * Parcel information as shown in a floating window from secondlife:// command
+ * handler.
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterparcel.h"
+
+// viewer project includes
+#include "llcommandhandler.h"
+#include "llpanelplace.h"
+#include "llvieweruictrlfactory.h"
+
+// linden library includes
+#include "lluuid.h"
+
+//-----------------------------------------------------------------------------
+// Globals
+//-----------------------------------------------------------------------------
+
+LLMap< const LLUUID, LLFloaterParcelInfo* > gPlaceInfoInstances;
+
+class LLParcelHandler : public LLCommandHandler
+{
+public:
+ LLParcelHandler() : LLCommandHandler("parcel") { }
+ bool handle(const std::vector& params)
+ {
+ if (params.size() < 2)
+ {
+ return false;
+ }
+ LLUUID parcel_id;
+ if (!parcel_id.set(params[0], FALSE))
+ {
+ return false;
+ }
+ if (params[1] == "about")
+ {
+ LLFloaterParcelInfo::show(parcel_id);
+ return true;
+ }
+ return false;
+ }
+};
+LLParcelHandler gParcelHandler;
+
+//-----------------------------------------------------------------------------
+// Member functions
+//-----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+
+void* LLFloaterParcelInfo::createPanelPlace(void* data)
+{
+ LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data;
+ self->mPanelParcelp = new LLPanelPlace(); // allow edit self
+ gUICtrlFactory->buildPanel(self->mPanelParcelp, "panel_place.xml");
+ return self->mPanelParcelp;
+}
+
+//----------------------------------------------------------------------------
+
+
+LLFloaterParcelInfo::LLFloaterParcelInfo(const std::string& name, const LLUUID &parcel_id)
+: LLFloater(name),
+ mParcelID( parcel_id )
+{
+ mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this);
+ gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
+ gPlaceInfoInstances.addData(parcel_id, this);
+}
+
+// virtual
+LLFloaterParcelInfo::~LLFloaterParcelInfo()
+{
+ // child views automatically deleted
+ gPlaceInfoInstances.removeData(mParcelID);
+
+}
+
+void LLFloaterParcelInfo::displayParcelInfo(const LLUUID& parcel_id)
+{
+ mPanelParcelp->setParcelID(parcel_id);
+}
+
+// static
+LLFloaterParcelInfo* LLFloaterParcelInfo::show(const LLUUID &parcel_id)
+{
+ if (parcel_id.isNull())
+ {
+ return NULL;
+ }
+
+ LLFloaterParcelInfo *floater;
+ if (gPlaceInfoInstances.checkData(parcel_id))
+ {
+ // ...bring that window to front
+ floater = gPlaceInfoInstances.getData(parcel_id);
+ floater->open(); /*Flawfinder: ignore*/
+ floater->setFrontmost(true);
+ }
+ else
+ {
+ floater = new LLFloaterParcelInfo("parcelinfo", parcel_id );
+ floater->center();
+ floater->open(); /*Flawfinder: ignore*/
+ floater->displayParcelInfo(parcel_id);
+ floater->setFrontmost(true);
+ }
+
+ return floater;
+}
+
+
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 @@
+/**
+ * @file llfloaterparcelinfo.h
+ * @brief LLFloaterParcelInfo class definition
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+/**
+ * Parcel information as shown in a floating window from a sl-url.
+ * Just a wrapper for LLPanelPlace, shared with the Find directory.
+ */
+
+#ifndef LL_FLOATERPARCELINFO_H
+#define LL_FLOATERPARCELINFO_H
+
+#include "llfloater.h"
+
+class LLPanelPlace;
+
+class LLFloaterParcelInfo
+: public LLFloater
+{
+public:
+ static void* createPanelPlace(void* data);
+
+ LLFloaterParcelInfo(const std::string& name, const LLUUID &parcel_id );
+ /*virtual*/ ~LLFloaterParcelInfo();
+
+ void displayParcelInfo(const LLUUID& parcel_id);
+
+ static LLFloaterParcelInfo* show(const LLUUID& parcel_id);
+
+private:
+ LLUUID mParcelID; // for which parcel is this window?
+ LLPanelPlace* mPanelParcelp;
+};
+
+
+#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()
childDisable("from_form");
childSetAction("publish_help_btn", onClickPublishHelp, this);
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
// Disable these buttons if they are PG (Teen) users
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 @@
#include "llpaneldebug.h"
#include "llpanelgeneral.h"
#include "llpanelinput.h"
+#include "llpanelLCD.h"
#include "llpanelmsgs.h"
#include "llpanelweb.h"
#include "llprefschat.h"
@@ -80,6 +81,14 @@ const S32 PREF_FLOATER_MIN_HEIGHT = 2 * SCROLLBAR_SIZE + 2 * LLPANEL_BORDER_WIDT
LLFloaterPreference* LLFloaterPreference::sInstance = NULL;
+#if LL_WINDOWS
+// for Logitech LCD keyboards / speakers
+#ifndef LL_LOGITECH_LCD_H
+#include "lllogitechlcd.h"
+#endif
+extern llLCD *gLcdScreen;
+#endif
+
// Must be done at run time, not compile time. JC
S32 pref_min_width()
{
@@ -108,7 +117,8 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainerCommon* tab_container, LLButton
mDisplayPanel(NULL),
mDisplayPanel2(NULL),
mAudioPanel(NULL),
- mMsgPanel(NULL)
+ mMsgPanel(NULL),
+ mLCDPanel(NULL)
{
mGeneralPanel = new LLPanelGeneral();
mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
@@ -156,6 +166,20 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainerCommon* tab_container, LLButton
mTabContainer->addTabPanel(mPrefsIM->getPanel(), mPrefsIM->getPanel()->getLabel(), FALSE, onTabChanged, mTabContainer);
mPrefsIM->getPanel()->setDefaultBtn(default_btn);
+#if LL_WINDOWS && LL_LCD_COMPILE
+
+ // only add this option if we actually have a logitech keyboard / speaker set
+ if (gLcdScreen->Enabled())
+ {
+ mLCDPanel = new LLPanelLCD();
+ mTabContainer->addTabPanel(mLCDPanel, mLCDPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mLCDPanel->setDefaultBtn(default_btn);
+ }
+
+#else
+ mLCDPanel = NULL;
+#endif
+
mMsgPanel = new LLPanelMsgs();
mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
mMsgPanel->setDefaultBtn(default_btn);
@@ -240,6 +264,14 @@ void LLPreferenceCore::apply()
#if LL_LIBXUL_ENABLED
mWebPanel->apply();
#endif
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // only add this option if we actually have a logitech keyboard / speaker set
+ if (gLcdScreen->Enabled())
+ {
+ mLCDPanel->apply();
+ }
+#endif
+// mWebPanel->apply();
}
@@ -259,6 +291,14 @@ void LLPreferenceCore::cancel()
#if LL_LIBXUL_ENABLED
mWebPanel->cancel();
#endif
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // only add this option if we actually have a logitech keyboard / speaker set
+ if (gLcdScreen->Enabled())
+ {
+ mLCDPanel->cancel();
+ }
+#endif
+// mWebPanel->cancel();
}
// 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 @@
class LLPanelGeneral;
class LLPanelInput;
+class LLPanelLCD;
class LLPanelDisplay;
class LLPanelDisplay2;
class LLPanelDisplay3;
@@ -89,8 +90,9 @@ private:
LLPrefsChat *mPrefsChat;
LLPrefsVoice *mPrefsVoice;
LLPrefsIM *mPrefsIM;
- LLPanelMsgs *mMsgPanel;
LLPanelWeb *mWebPanel;
+ LLPanelMsgs *mMsgPanel;
+ LLPanelLCD *mLCDPanel;
};
// 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 @@
+/**
+ * @file llpreviewlandmark.cpp
+ * @brief LLFloaterURLDisplayList class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterurldisplay.h"
+
+#include "llpanelplace.h"
+#include "llvieweruictrlfactory.h"
+
+#include "v3dmath.h"
+
+////////////////////////////////////////////////////////////////////////////
+// LLFloaterURLDisplay
+
+
+LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd)
+{
+ mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this);
+ gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
+ this->setVisible(false);
+}
+
+LLFloaterURLDisplay::~LLFloaterURLDisplay()
+{
+}
+
+void LLFloaterURLDisplay::displayParcelInfo(U64 region_handle, const LLVector3& pos_local)
+{
+ mRegionHandle = region_handle;
+ mRegionPosition = pos_local;
+ LLVector3d pos_global = from_region_handle(region_handle);
+ pos_global += (LLVector3d)pos_local;
+
+ LLUUID region_id; // don't know this
+ LLUUID landmark_asset_id; // don't know this either
+ mPlacePanel->displayParcelInfo(pos_local, landmark_asset_id, region_id, pos_global);
+
+ this->setVisible(true);
+ this->setFrontmost(true);
+}
+
+void LLFloaterURLDisplay::setSnapshotDisplay(const LLUUID& snapshot_id)
+{
+ mPlacePanel->setSnapshot(snapshot_id);
+}
+
+void LLFloaterURLDisplay::setName(const std::string& name)
+{
+ mPlacePanel->setName(name);
+}
+
+void LLFloaterURLDisplay::setLocationString(const std::string& name)
+{
+ mPlacePanel->setLocationString(name);
+}
+
+// static
+void* LLFloaterURLDisplay::createPlaceDetail(void* userdata)
+{
+ LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata;
+ self->mPlacePanel = new LLPanelPlace();
+ gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml");
+
+ return self->mPlacePanel;
+}
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 @@
+/**
+ * @file llfloaterurldisplay.h
+ * @brief LLFloaterURLDisplay class implementation
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERURLDISPLAY_H
+#define LL_LLFLOATERURLDISPLAY_H
+
+#include "llfloater.h"
+#include "v3math.h"
+
+class LLPanelPlace;
+class LLSD;
+class LLUUID;
+
+class LLFloaterURLDisplay : public LLFloater, public LLUISingleton
+{
+public:
+ LLFloaterURLDisplay(const LLSD& sd);
+ virtual ~LLFloaterURLDisplay();
+
+ void displayParcelInfo(U64 region_handle, const LLVector3& pos);
+ void setSnapshotDisplay(const LLUUID& snapshot_id);
+ void setName(const std::string& name);
+ void setLocationString(const std::string& name);
+
+ static void* createPlaceDetail(void* userdata);
+
+private:
+ LLVector3 mRegionPosition;
+ U64 mRegionHandle;
+ LLPanelPlace* mPlacePanel;
+};
+
+#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()
childSetKeystrokeCallback("location", (void (*)(LLLineEditor*,void*))updateSearchEnabled, NULL);
childSetCommitCallback("search_results", onCommitSearchResult, this);
- childSetDoubleClickCallback("search_results", onTeleportBtn);
+ childSetDoubleClickCallback("search_results", onClickTeleportBtn);
childSetCommitCallback("spin x", onCommitLocation, this);
childSetCommitCallback("spin y", onCommitLocation, this);
childSetCommitCallback("spin z", onCommitLocation, this);
@@ -252,7 +252,7 @@ BOOL LLFloaterWorldMap::postBuild()
childSetAction("Go Home", onGoHome, this);
- childSetAction("Teleport", onTeleportBtn, this);
+ childSetAction("Teleport", onClickTeleportBtn, this);
childSetAction("Show Destination", onShowTargetBtn, this);
childSetAction("Show My Location", onShowAgentBtn, this);
@@ -264,7 +264,7 @@ BOOL LLFloaterWorldMap::postBuild()
setDefaultBtn(NULL);
- if ( gAgent.mAccess <= SIM_ACCESS_PG )
+ if ( gAgent.isTeen() )
{
// Hide Mature Events controls
childHide("events_mature_icon");
@@ -1288,7 +1288,7 @@ void LLFloaterWorldMap::onShowAgentBtn(void* data)
}
// static
-void LLFloaterWorldMap::onTeleportBtn(void* data)
+void LLFloaterWorldMap::onClickTeleportBtn(void* data)
{
LLFloaterWorldMap* self = (LLFloaterWorldMap*)data;
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:
// Catch changes in the sim list
void updateSims(bool found_null_sim);
+ // teleport to the tracked item, if there is one
+ void teleport();
+
protected:
static void onPanBtn( void* userdata );
@@ -123,7 +126,7 @@ protected:
static void onClearBtn(void*);
static void onFlyBtn(void*);
- static void onTeleportBtn(void*);
+ static void onClickTeleportBtn(void*);
static void onShowTargetBtn(void*);
static void onShowAgentBtn(void*);
static void onCopySLURL(void*);
@@ -136,9 +139,6 @@ protected:
// fly to the tracked item, if there is one
void fly();
- // teleport to the tracked item, if there is one
- void teleport();
-
void buildLandmarkIDLists();
static void onGoToLandmarkDialog(S32 option,void* userdata);
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()
{
if (mAmTrash == LLFolderViewFolder::UNKNOWN)
{
- mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
+ mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
}
return mAmTrash == LLFolderViewFolder::TRASH;
}
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)
msg->getS32Fast(_PREHASH_ButtonData,_PREHASH_PayButton,pay_button,i);
if (pay_button > 0)
{
- LLString button_str;
- gResMgr->getMonetaryString( button_str, pay_button );
+ LLString button_str = "L$";
+ button_str += gResMgr->getMonetaryString( pay_button );
self->mQuickPayButton[i]->setLabelSelected(button_str);
self->mQuickPayButton[i]->setLabelUnselected(button_str);
@@ -260,8 +260,8 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
}
// build a string containing the maximum value and calc nerw button width from it.
- LLString balance_str;
- gResMgr->getMonetaryString( balance_str, max_pay_amount );
+ LLString balance_str = "L$";
+ balance_str += gResMgr->getMonetaryString( max_pay_amount );
const LLFontGL* font = gResMgr->getRes(LLFONT_SANSSERIF);
S32 new_button_width = font->getWidth( LLString(balance_str));
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 @@
const S32 LINE_HEIGHT = 16;
const S32 MIN_WIDTH = 200;
const S32 MIN_HEIGHT = 130;
+const U32 DEFAULT_RETRIES_COUNT = 3;
//
// Statics
@@ -502,6 +503,8 @@ void LLVoiceChannel::initClass()
LLVoiceChannelGroup::LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name) :
LLVoiceChannel(session_id, session_name)
{
+ mRetries = DEFAULT_RETRIES_COUNT;
+ mIsRetrying = FALSE;
}
LLVoiceChannelGroup::~LLVoiceChannelGroup()
@@ -548,18 +551,92 @@ void LLVoiceChannelGroup::getChannelInfo()
}
}
+void LLVoiceChannelGroup::setChannelInfo(
+ const LLString& uri,
+ const LLString& credentials)
+{
+ setURI(uri);
+
+ mCredentials = credentials;
+
+ if (mState == STATE_NO_CHANNEL_INFO)
+ {
+ if(!mURI.empty() && !mCredentials.empty())
+ {
+ setState(STATE_READY);
+
+ // if we are supposed to be active, reconnect
+ // this will happen on initial connect, as we request credentials on first use
+ if (sCurrentVoiceChannel == this)
+ {
+ // just in case we got new channel info while active
+ // should move over to new channel
+ activate();
+ }
+ }
+ else
+ {
+ //*TODO: notify user
+ llwarns << "Received invalid credentials for channel " << mSessionName << llendl;
+ deactivate();
+ }
+ }
+ else if ( mIsRetrying )
+ {
+ // we have the channel info, just need to use it now
+ LLVoiceClient::getInstance()->setNonSpatialChannel(
+ mURI,
+ mCredentials);
+ }
+}
+
+void LLVoiceChannelGroup::handleStatusChange(EStatusType type)
+{
+ // status updates
+ switch(type)
+ {
+ case STATUS_JOINED:
+ mRetries = 3;
+ mIsRetrying = FALSE;
+ default:
+ break;
+ }
+
+ LLVoiceChannel::handleStatusChange(type);
+}
+
void LLVoiceChannelGroup::handleError(EStatusType status)
{
std::string notify;
switch(status)
{
- case ERROR_CHANNEL_LOCKED:
- case ERROR_CHANNEL_FULL:
+ case ERROR_CHANNEL_LOCKED:
+ case ERROR_CHANNEL_FULL:
notify = "VoiceChannelFull";
break;
- case ERROR_UNKNOWN:
+ case ERROR_NOT_AVAILABLE:
+ //clear URI and credentials
+ //set the state to be no info
+ //and activate
+ if ( mRetries > 0 )
+ {
+ mRetries--;
+ mIsRetrying = TRUE;
+ mIgnoreNextSessionLeave = TRUE;
+
+ getChannelInfo();
+ return;
+ }
+ else
+ {
+ notify = "VoiceChannelJoinFailed";
+ mRetries = DEFAULT_RETRIES_COUNT;
+ mIsRetrying = FALSE;
+ }
+
break;
- default:
+ case ERROR_UNKNOWN:
+ default:
break;
}
@@ -570,10 +647,27 @@ void LLVoiceChannelGroup::handleError(EStatusType status)
// echo to im window
gIMMgr->addMessage(mSessionID, LLUUID::null, SYSTEM_FROM, LLNotifyBox::getTemplateMessage(notify, mNotifyArgs).c_str());
}
-
+
LLVoiceChannel::handleError(status);
}
+void LLVoiceChannelGroup::setState(EState state)
+{
+ switch(state)
+ {
+ case STATE_RINGING:
+ if ( !mIsRetrying )
+ {
+ gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
+ }
+
+ mState = state;
+ break;
+ default:
+ LLVoiceChannel::setState(state);
+ }
+}
+
//
// LLVoiceChannelProximal
//
@@ -710,7 +804,7 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type)
break;
}
- LLVoiceChannelGroup::handleStatusChange(type);
+ LLVoiceChannel::handleStatusChange(type);
}
void LLVoiceChannelP2P::handleError(EStatusType type)
@@ -724,7 +818,7 @@ void LLVoiceChannelP2P::handleError(EStatusType type)
break;
}
- LLVoiceChannelGroup::handleError(type);
+ LLVoiceChannel::handleError(type);
}
void 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:
LLVoiceChannel(const LLUUID& session_id, const LLString& session_name);
virtual ~LLVoiceChannel();
- void setChannelInfo(const LLString& uri, const LLString& credentials);
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
virtual void handleStatusChange(EStatusType status);
virtual void handleError(EStatusType status);
virtual void deactivate();
virtual void activate();
+ virtual void setChannelInfo(
+ const LLString& uri,
+ const LLString& credentials);
virtual void getChannelInfo();
virtual BOOL isActive();
virtual BOOL callStarted();
@@ -82,7 +84,7 @@ public:
static void initClass();
protected:
- void setState(EState state);
+ virtual void setState(EState state);
void setURI(LLString uri);
LLString mURI;
@@ -109,10 +111,21 @@ public:
LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name);
virtual ~LLVoiceChannelGroup();
+ /*virtual*/ void handleStatusChange(EStatusType status);
/*virtual*/ void handleError(EStatusType status);
/*virtual*/ void activate();
/*virtual*/ void deactivate();
+ /*vritual*/ void setChannelInfo(
+ const LLString& uri,
+ const LLString& credentials);
/*virtual*/ void getChannelInfo();
+
+protected:
+ virtual void setState(EState state);
+
+private:
+ U32 mRetries;
+ BOOL mIsRetrying;
};
class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton
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() :
delete dummy_floater;
mPendingVoiceInvitations = LLSD::emptyMap();
+ mPendingAgentListUpdates = LLSD::emptyMap();
}
LLIMMgr::~LLIMMgr()
@@ -725,15 +726,41 @@ public:
if (floaterp)
{
+ //we've accepted our invitation
+ //and received a list of agents that were
+ //currently in the session when the reply was sent
+ //to us. Now, it is possible that there were some agents
+ //to slip in/out between when that message was sent to us
+ //and now.
+
+ //the agent list updates we've received have been
+ //accurate from the time we were added to the session
+ //but unfortunately, our base that we are receiving here
+ //may not be the most up to date. It was accurate at
+ //some point in time though.
floaterp->setSpeakersList(content["agents"]);
+ //we now have our base of users in the session
+ //that was accurate at some point, but maybe not now
+ //so now we apply all of the udpates we've received
+ //in case of race conditions
+
+ //reapplying a user entrance will do nothing
+ //reapplying a user leaving will not have the user
+ //in our base. So it's all good
+ floaterp->updateSpeakersList(
+ gIMMgr->getPendingAgentListUpdates(mSessionID));
+
if ( mIsVoiceInvitiation )
{
floaterp->requestAutoConnect();
LLFloaterIMPanel::onClickStartCall(floaterp);
+ // always open IM window when connecting to voice
+ LLFloaterChatterBox::showInstance(TRUE);
}
}
+ gIMMgr->clearPendingAgentListUpdates(mSessionID);
if ( mIsVoiceInvitiation )
{
gIMMgr->clearPendingVoiceInviation(mSessionID);
@@ -779,6 +806,8 @@ void LLIMMgr::inviteUserResponse(S32 option, void* user_data)
{
im_floater->requestAutoConnect();
LLFloaterIMPanel::onClickStartCall(im_floater);
+ // always open IM window when connecting to voice
+ LLFloaterChatterBox::showInstance(TRUE);
}
gIMMgr->clearPendingVoiceInviation(invitep->mSessionID);
@@ -911,6 +940,41 @@ void LLIMMgr::clearPendingVoiceInviation(const LLUUID& session_id)
}
}
+LLSD LLIMMgr::getPendingAgentListUpdates(const LLUUID& session_id)
+{
+ if ( mPendingAgentListUpdates.has(session_id.asString()) )
+ {
+ return mPendingAgentListUpdates[session_id.asString()];
+ }
+ else
+ {
+ return LLSD();
+ }
+}
+
+void LLIMMgr::addPendingAgentListUpdates(
+ const LLUUID& session_id,
+ const LLSD& updates)
+{
+ LLSD::map_const_iterator iter;
+
+ for ( iter = updates.beginMap();
+ iter != updates.endMap();
+ iter++)
+ {
+ //we only want to include the last update for a given agent
+ mPendingAgentListUpdates[session_id.asString()][iter->first] =
+ iter->second;
+ }
+}
+
+void LLIMMgr::clearPendingAgentListUpdates(const LLUUID& session_id)
+{
+ if ( mPendingAgentListUpdates.has(session_id.asString()) )
+ {
+ mPendingAgentListUpdates.erase(session_id.asString());
+ }
+}
// create a floater and update internal representation for
// consistency. Returns the pointer, caller (the class instance since
@@ -1078,7 +1142,12 @@ public:
if (floaterp)
{
floaterp->setSpeakersList(body["agents"]);
+
+ //aply updates we've possibly received previously
+ floaterp->updateSpeakersList(
+ gIMMgr->getPendingAgentListUpdates(session_id));
}
+ gIMMgr->clearPendingAgentListUpdates(session_id);
}
else
{
@@ -1191,6 +1260,15 @@ public:
{
floaterp->updateSpeakersList(input["body"]["updates"]);
}
+ else
+ {
+ //we don't have a floater yet..something went wrong
+ //we are probably receiving an update here before
+ //a start or an acceptance of an invitation. Race condition.
+ gIMMgr->addPendingAgentListUpdates(
+ input["body"]["session_id"].asUUID(),
+ input["body"]["updates"]);
+ }
}
};
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:
static LLUUID computeSessionID(EInstantMessage dialog, const LLUUID& other_participant_id);
void clearPendingVoiceInviation(const LLUUID& session_id);
-
+
+ LLSD getPendingAgentListUpdates(const LLUUID& session_id);
+ void addPendingAgentListUpdates(
+ const LLUUID& sessioN_id,
+ const LLSD& updates);
+ void clearPendingAgentListUpdates(const LLUUID& session_id);
+
private:
class LLIMSessionInvite;
@@ -188,6 +194,7 @@ private:
BOOL mIMReceived;
LLSD mPendingVoiceInvitations;
+ LLSD mPendingAgentListUpdates;
};
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)
else if(isAgentInventory()) // do not allow creating in library
{
// only mature accounts can create undershirts/underwear
- /*if (gAgent.mAccess >= SIM_ACCESS_MATURE)
+ /*if (!gAgent.isTeen())
{
sub_menu->append(new LLMenuItemCallGL("New Undershirt",
&createNewUndershirt,
@@ -2524,6 +2524,14 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
}
}
}
+ if ("about" == action)
+ {
+ LLViewerInventoryItem* item = getItem();
+ if(item)
+ {
+ open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE);
+ }
+ }
else LLItemBridge::performAction(folder, model, action);
}
@@ -2555,12 +2563,35 @@ void open_landmark(LLViewerInventoryItem* inv_item,
}
}
+static void open_landmark_callback(S32 option, void* data)
+{
+ LLUUID* asset_idp = (LLUUID*)data;
+ if (option == 0)
+ {
+ // HACK: This is to demonstrate teleport on double click for landmarks
+ gAgent.teleportViaLandmark( *asset_idp );
+
+ // we now automatically track the landmark you're teleporting to
+ // because you'll probably arrive at a telehub instead
+ if( gFloaterWorldMap )
+ {
+ gFloaterWorldMap->trackLandmark( *asset_idp );
+ }
+ }
+ delete asset_idp;
+}
+
void LLLandmarkBridge::openItem()
{
LLViewerInventoryItem* item = getItem();
if( item )
{
- open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE);
+ // Opening (double-clicking) a landmark immediately teleports,
+ // but warns you the first time.
+ // open_landmark(item, LLString(" ") + getPrefix() + item->getName(), FALSE);
+ LLUUID* asset_idp = new LLUUID(item->getAssetUUID());
+ LLAlertDialog::showXml("TeleportFromLandmark",
+ open_landmark_callback, (void*)asset_idp);
}
}
@@ -4463,7 +4494,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
EWearableType type = wearable->getType();
if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR ) ) //&&
- //!((gAgent.mAccess >= SIM_ACCESS_MATURE) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
+ //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
{
gAgent.removeWearable( type );
}
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 @@
+/**
+ * @file lllcd.cpp
+ * @brief Lcd panel class
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+#include "llcontrol.h"
+#include "llstatusbar.h"
+#include "llviewerregion.h"
+#include "llviewerstats.h"
+#include "llvieweruictrlfactory.h"
+
+#if LL_LCD_COMPILE
+
+extern LLControlGroup gSavedSettings;
+
+#define ICON_WIDTH 28
+
+#if LL_WINDOWS
+// for Logitech LCD keyboards / speakers
+#include "EZ_LCD.h"
+#include "lllogitechlcd.h"
+#include "lllcd.h"
+
+// not happy about this, but there's no local class to put it in.
+LLPanel *bogus = NULL;
+
+// 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
+void CreateLCDDebugWindows()
+{
+ if (gLcdScreen->Enabled())
+ {
+ // load up the text so we are sure it's externalized and localized correctly.
+ bogus = new LLPanel();
+ gUICtrlFactory->buildPanel(bogus, "lcd_text.xml");
+
+ llLCDPageGroup *pageGroup = NULL;
+ pageGroup = new llDefaultPageGroup(gLcdScreen->mLCD, llLCD::kLCDDefault, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llChatPageGroup(gLcdScreen->mLCD, llLCD::kLCDChat, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llIMPageGroup(gLcdScreen->mLCD, llLCD::kLCDIM, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llDebugPageGroup(gLcdScreen->mLCD, llLCD::kLCDDebug, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llLindenPageGroup(gLcdScreen->mLCD, llLCD::kLCDLinden, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llRegionPageGroup(gLcdScreen->mLCD, llLCD::kLCDRegion, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+
+ pageGroup = new llDebugConsolePageGroup(gLcdScreen->mLCD, llLCD::kLCDDebugConsole, gLcdScreen->mSLIcon);
+ // push this new group onto the array
+ gLcdScreen->mPageGroupArray.push_back(pageGroup);
+ }
+}
+
+// functions that allow the chat and IM handler to insert new lines directly into the LCD page group handlers
+void AddNewIMToLCD(const LLString &newLine)
+{
+ if (gLcdScreen->Enabled())
+ {
+ llIMPageGroup *imGroup = (llIMPageGroup *)gLcdScreen->mPageGroupArray[2];
+ imGroup->InsertText(newLine);
+ }
+}
+
+void AddNewChatToLCD(const LLString &newLine)
+{
+ if (gLcdScreen->Enabled())
+ {
+ llChatPageGroup *chatGroup = (llChatPageGroup *)gLcdScreen->mPageGroupArray[1];
+ chatGroup->InsertText(newLine);
+ }
+}
+
+void AddNewDebugConsoleToLCD(const LLWString &newLine)
+{
+ if (gLcdScreen->Enabled())
+ {
+ llDebugConsolePageGroup *debugGroup = (llDebugConsolePageGroup *)gLcdScreen->mPageGroupArray[6];
+ debugGroup->InsertText(newLine);
+ }
+}
+
+/////////////////////////////////////
+//
+// Debug Console Page group class
+//
+/////////////////////////////////////
+
+void llDebugConsolePageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(wstring_to_utf16str(mLine1).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(wstring_to_utf16str(mLine2).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(wstring_to_utf16str(mLine3).c_str()));
+}
+
+void llDebugConsolePageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayDebugConsole");
+}
+
+void llDebugConsolePageGroup::InsertText(const LLWString &newLine)
+{
+ mLine1 = mLine2;
+ mLine2 = mLine3;
+ mLine3 = newLine;
+}
+
+llDebugConsolePageGroup::llDebugConsolePageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ // create a new specific pagea
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, _T("Debug Console"));
+
+ // add line
+ HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+/////////////////////////////////////
+//
+// Network Comms Page group class
+//
+/////////////////////////////////////
+
+void llDebugPageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ LLString ping = llformat("1000");
+ LLString packetsIn = llformat("0");
+ LLString packetsOut = llformat("0");
+ LLString packetLoss = llformat("0");
+ LLString fps = llformat("0");
+ LLString simfps = llformat("0");
+ // region name
+ if (gStatusBar)
+ {
+ ping = llformat("%d", gStatusBar->mRegionDetails.mPing);
+ }
+
+ if (gViewerStats)
+ {
+ packetLoss = llformat("%.1f%%", gViewerStats->mPacketsLostPercentStat.getCurrent());
+ simfps = llformat("%d", (int)gViewerStats->mSimFPS.getCurrent());
+ fps = llformat("%.1f%", gViewerStats->mFPSStat.getMeanPerSec());
+ packetsIn = llformat("%d", (int)gViewerStats->mSimInPPS.getCurrent());
+ packetsOut = llformat("%d", (int)gViewerStats->mSimOutPPS.getCurrent());
+ }
+
+ // fps
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(fps).c_str()));
+ // simfps
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(simfps).c_str()));
+ // packets in
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(packetsIn).c_str()));
+ // packets out
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(packetsOut).c_str()));
+ // packet loss
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[4], (LPCTSTR)(utf8str_to_utf16str(packetLoss).c_str()));
+ // ping
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[5], (LPCTSTR)(utf8str_to_utf16str(ping).c_str()));
+}
+
+void llDebugPageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayDebug");
+}
+
+llDebugPageGroup::llDebugPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("DebugInfo")).c_str()));
+
+ HANDLE fpsStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
+ mLCD->SetOrigin(fpsStatic, ICON_WIDTH, 11);
+ mLCD->SetText(fpsStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("FPS")).c_str()));
+
+ HANDLE fps = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
+ mLCD->SetOrigin(fps, ICON_WIDTH+25, 11);
+ mLCD->SetText(fps, _T(""));
+ newPage.mDisplayItemArray.push_back(fps);
+
+ HANDLE simfpsStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 35);
+ mLCD->SetOrigin(simfpsStatic, ICON_WIDTH+37+25, 11);
+ mLCD->SetText(simfpsStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("SimFPS")).c_str()));
+
+ HANDLE simfps = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
+ mLCD->SetOrigin(simfps, ICON_WIDTH+37+27+37, 11);
+ mLCD->SetText(simfps, _T(""));
+ newPage.mDisplayItemArray.push_back(simfps);
+
+ HANDLE packetsinStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
+ mLCD->SetOrigin(packetsinStatic, ICON_WIDTH, 22);
+ mLCD->SetText(packetsinStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Pin")).c_str()));
+
+ HANDLE packetsin = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
+ mLCD->SetOrigin(packetsin, ICON_WIDTH+32, 22);
+ mLCD->SetText(packetsin, _T(""));
+ newPage.mDisplayItemArray.push_back(packetsin);
+
+ HANDLE packetsoutStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(packetsoutStatic, ICON_WIDTH+37+25, 22);
+ mLCD->SetText(packetsoutStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Pout")).c_str()));
+
+ HANDLE packetsout = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 25);
+ mLCD->SetOrigin(packetsout, ICON_WIDTH+37+27+37, 22);
+ mLCD->SetText(packetsout, _T(""));
+ newPage.mDisplayItemArray.push_back(packetsout);
+
+ HANDLE packetlossStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(packetlossStatic, ICON_WIDTH, 33);
+ mLCD->SetText(packetlossStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("PLoss")).c_str()));
+
+ HANDLE packetloss = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 35);
+ mLCD->SetOrigin(packetloss, ICON_WIDTH+33, 33);
+ mLCD->SetText(packetloss, _T(""));
+ newPage.mDisplayItemArray.push_back(packetloss);
+
+ HANDLE pingStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 20);
+ mLCD->SetOrigin(pingStatic, ICON_WIDTH+32+38, 33);
+ mLCD->SetText(pingStatic,(LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Ping")).c_str()));
+
+ HANDLE ping = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(ping, ICON_WIDTH+37+27+37, 33);
+ mLCD->SetText(ping, _T(""));
+ newPage.mDisplayItemArray.push_back(ping);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+/////////////////////////////////////
+//
+// Linden Account group class
+//
+/////////////////////////////////////
+
+void llLindenPageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ LLString time = llformat("Unknown");
+ LLString balance = llformat("Unknown");
+ // region name
+ if (gStatusBar)
+ {
+ time = gStatusBar->mRegionDetails.mTime;
+ balance = llformat("%d", gStatusBar->mRegionDetails.mBalance);
+ }
+
+ // time name
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(time).c_str()));
+ // balance
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(balance).c_str()));
+}
+
+void llLindenPageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayLinden");
+}
+
+llLindenPageGroup::llLindenPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("AccountDetails")).c_str()));
+
+ HANDLE timeStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(timeStatic, ICON_WIDTH, 11);
+ mLCD->SetText(timeStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Time")).c_str()));
+
+ HANDLE time = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 32);
+ mLCD->SetOrigin(time, ICON_WIDTH+32, 11);
+ mLCD->SetText(time, _T(""));
+ newPage.mDisplayItemArray.push_back(time);
+
+ HANDLE balanceStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(balanceStatic, ICON_WIDTH, 22);
+ mLCD->SetText(balanceStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LBal")).c_str()));
+
+ HANDLE balance = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 35);
+ mLCD->SetOrigin(balance, ICON_WIDTH+35, 22);
+ mLCD->SetText(balance, _T(""));
+ newPage.mDisplayItemArray.push_back(balance);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+/////////////////////////////////////
+//
+// Region Group page
+//
+/////////////////////////////////////
+
+void llRegionPageGroup::UpdateDetails()
+{
+ LLString pos = llformat("Unknown");
+ LLString parcel = llformat("Unknown");
+ LLString region = llformat("Unknown");
+ LLString owner = llformat("Unknown");
+ LLString forsale = bogus->childGetText("No");
+ LLString rtype = llformat("Unknown");
+ LLString sqm = llformat("0");
+ LLString traffic = llformat("0");
+
+ // region name
+ if (gStatusBar)
+ {
+ pos = llformat(" %d, %d, %d", gStatusBar->mRegionDetails.mX, gStatusBar->mRegionDetails.mY, gStatusBar->mRegionDetails.mZ);
+ parcel = llformat("%s", gStatusBar->mRegionDetails.mParcelName);
+ region = gStatusBar->mRegionDetails.mRegionName;
+ rtype = llformat("%s", gStatusBar->mRegionDetails.mAccesString);
+ sqm = llformat("%d", gStatusBar->mRegionDetails.mArea);
+ if (gStatusBar->mRegionDetails.mForSale)
+ {
+ forsale = bogus->childGetText("Yes");
+ }
+ owner = llformat("%s", gStatusBar->mRegionDetails.mOwner);
+ traffic = llformat("%d", (int)gStatusBar->mRegionDetails.mTraffic);
+ }
+
+ // update first page
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ // region name
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(region).c_str()));
+ // parcel name
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(parcel).c_str()));
+ // position name
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(pos).c_str()));
+ // Sqm
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(sqm).c_str()));
+
+ // update second page
+ mLCD->ModifyControlsOnPage(mPageArray[1].mPageIndex);
+ // owner
+ mLCD->SetText(mPageArray[1].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(owner).c_str()));
+ // access type
+ mLCD->SetText(mPageArray[1].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(rtype).c_str()));
+ // forsale
+ mLCD->SetText(mPageArray[1].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(forsale).c_str()));
+ // traffic
+ mLCD->SetText(mPageArray[1].mDisplayItemArray[3], (LPCTSTR)(utf8str_to_utf16str(traffic).c_str()));
+
+}
+
+void llRegionPageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayRegion");
+}
+
+llRegionPageGroup::llRegionPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LocationDetails1")).c_str()));
+
+ HANDLE regionNameStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(regionNameStatic, ICON_WIDTH, 11);
+ mLCD->SetText(regionNameStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Region")).c_str()));
+
+ HANDLE regionName = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH - 30 - 2);
+ mLCD->SetOrigin(regionName, ICON_WIDTH+32, 11);
+ mLCD->SetText(regionName, _T(""));
+ newPage.mDisplayItemArray.push_back(regionName);
+
+ HANDLE parcelStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(parcelStatic, ICON_WIDTH, 22);
+ mLCD->SetText(parcelStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Parcel")).c_str()));
+
+ HANDLE parcel = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_CENTER, 160 - ICON_WIDTH - 30 - 2);
+ mLCD->SetOrigin(parcel, ICON_WIDTH+32, 22);
+ mLCD->SetText(parcel, _T(""));
+ newPage.mDisplayItemArray.push_back(parcel);
+
+ HANDLE positionStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
+ mLCD->SetOrigin(positionStatic, 0, 33);
+ mLCD->SetText(positionStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Parcel")).c_str()));
+
+ HANDLE position = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 60);
+ mLCD->SetOrigin(position, 20, 33);
+ mLCD->SetText(position, _T("100, 100, 100"));
+ newPage.mDisplayItemArray.push_back(position);
+
+ HANDLE sqmStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 18);
+ mLCD->SetOrigin(sqmStatic, 90, 33);
+ mLCD->SetText(sqmStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Sqm")).c_str()));
+
+ HANDLE sqm = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
+ mLCD->SetOrigin(sqm, 90 + 20, 33);
+ mLCD->SetText(sqm, _T("1000"));
+ newPage.mDisplayItemArray.push_back(sqm);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+
+ // create a new specific page
+ llLCDSpecificPage newPage2;
+ newPage2.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage2.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("LocationDetails2")).c_str()));
+
+ HANDLE ownerStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(ownerStatic, ICON_WIDTH, 11);
+ mLCD->SetText(ownerStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Owner")).c_str()));
+
+ HANDLE owner = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - 30 - ICON_WIDTH - 2);
+ mLCD->SetOrigin(owner, ICON_WIDTH+32, 11);
+ mLCD->SetText(owner, _T(""));
+ newPage2.mDisplayItemArray.push_back(owner);
+
+ HANDLE typeStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(typeStatic, ICON_WIDTH, 22);
+ mLCD->SetText(typeStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Type")).c_str()));
+
+ HANDLE rtype = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 160 - 30 - ICON_WIDTH - 2);
+ mLCD->SetOrigin(rtype, ICON_WIDTH+32, 22);
+ mLCD->SetText(rtype, _T(""));
+ newPage2.mDisplayItemArray.push_back(rtype);
+
+ HANDLE forsaleStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
+ mLCD->SetOrigin(forsaleStatic, 0, 33);
+ mLCD->SetText(forsaleStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Forsale")).c_str()));
+
+ HANDLE forsale = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(forsale, 42, 33);
+ mLCD->SetText(forsale, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("No")).c_str()));
+ newPage2.mDisplayItemArray.push_back(forsale);
+
+ HANDLE trafficStatic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 50);
+ mLCD->SetOrigin(trafficStatic, 70, 33);
+ mLCD->SetText(trafficStatic, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Traffic")).c_str()));
+
+ HANDLE traffic = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 30);
+ mLCD->SetOrigin(traffic, 122, 33);
+ mLCD->SetText(traffic, _T("200"));
+ newPage2.mDisplayItemArray.push_back(traffic);
+
+ // and then insert it
+ mPageArray.push_back(newPage2);
+}
+
+/////////////////////////////////////
+//
+// Chat group Page class
+//
+/////////////////////////////////////
+
+void llChatPageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(mLine1).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(mLine2).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(mLine3).c_str()));
+}
+
+void llChatPageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayChat");
+}
+
+void llChatPageGroup::InsertText(const LLString &newLine)
+{
+ mLine1 = mLine2;
+ mLine2 = mLine3;
+ mLine3 = newLine;
+}
+
+llChatPageGroup::llChatPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ mLine1 = llformat("");
+ mLine2 = llformat("");
+ mLine3 = llformat("");
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Last3ChatLines")).c_str()));
+
+ // add line
+ HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+/////////////////////////////////////
+//
+// IM Page Group class
+//
+/////////////////////////////////////
+
+void llIMPageGroup::UpdateDetails()
+{
+ mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(mLine1).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[1], (LPCTSTR)(utf8str_to_utf16str(mLine2).c_str()));
+ mLCD->SetText(mPageArray[0].mDisplayItemArray[2], (LPCTSTR)(utf8str_to_utf16str(mLine3).c_str()));
+}
+
+void llIMPageGroup::GetDisplayable()
+{
+ mDisplayPage = gSavedSettings.getBOOL("DisplayIM");
+}
+
+void llIMPageGroup::InsertText(const LLString &newLine)
+{
+ mLine1 = mLine2;
+ mLine2 = mLine3;
+ mLine3 = newLine;
+}
+
+llIMPageGroup::llIMPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
+:llLCDPageGroup(LCD, type, SLIcon)
+{
+ mLine1 = llformat("");
+ mLine2 = llformat("");
+ mLine3 = llformat("");
+ // create a new specific page
+ llLCDSpecificPage newPage;
+ newPage.mPageIndex = mLCD->AddNewPage() - 1;
+ mLCD->ModifyControlsOnPage(newPage.mPageIndex);
+
+ // add in all the display parts for this specific page
+
+ // add in the icon - all pages have this - we don't need to track this because we never update it
+ HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
+ mLCD->SetOrigin(m_rightIcon, 0, 0);
+
+ // add Title
+ HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_SMALL, DT_CENTER, 128);
+ mLCD->SetOrigin(title, 32, 0);
+ mLCD->SetText(title, (LPCTSTR)(utf8str_to_utf16str(bogus->childGetText("Last3IMLines")).c_str()));
+
+ // add line
+ HANDLE chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 11);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 22);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // add line
+ chatLine = mLCD->AddText(LG_SCROLLING_TEXT, LG_SMALL, DT_LEFT, 160 - ICON_WIDTH);
+ mLCD->SetOrigin(chatLine, ICON_WIDTH, 33);
+ mLCD->SetText(chatLine, _T(""));
+ newPage.mDisplayItemArray.push_back(chatLine);
+
+ // and then insert it
+ mPageArray.push_back(newPage);
+}
+
+#endif //LL_WINDOWS
+#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 @@
+/**
+ * @file lllcd.h
+ * @brief Description of the LCDdisplay class.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#define LL_LLLCD_H
+
+#ifndef LL_LOGITECH_LCD_H
+#include "lllogitechlcd.h"
+#endif
+
+
+// class that defines the specific Debug page group of pages
+class llDebugPageGroup : public llLCDPageGroup
+{
+public:
+ llDebugPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+};
+
+// class that defines the specific Debug Console group of pages
+class llDebugConsolePageGroup : public llLCDPageGroup
+{
+public:
+ llDebugConsolePageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+ void InsertText(const LLWString &newLine);
+private:
+ LLWString mLine1;
+ LLWString mLine2;
+ LLWString mLine3;
+};
+
+// class that defines the specific Linden Account group of pages
+class llLindenPageGroup : public llLCDPageGroup
+{
+public:
+ llLindenPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+};
+
+// class that defines the specific Chat group of pages
+class llChatPageGroup : public llLCDPageGroup
+{
+public:
+ llChatPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+ void InsertText(const LLString &newLine);
+private:
+ LLString mLine1;
+ LLString mLine2;
+ LLString mLine3;
+};
+
+// class that defines the specific IM group of pages
+class llIMPageGroup : public llLCDPageGroup
+{
+public:
+ llIMPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+ void InsertText(const LLString &newLine);
+private:
+ LLString mLine1;
+ LLString mLine2;
+ LLString mLine3;
+};
+
+// class that defines the specific Region group of pages
+class llRegionPageGroup : public llLCDPageGroup
+{
+public:
+ llRegionPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
+ virtual void UpdateDetails();
+ virtual void GetDisplayable();
+};
+
+class llLCD;
+extern llLCD *gLcdScreen;
+
+//#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 @@
#include "llfocusmgr.h"
#include "llimview.h"
#include "llmediaengine.h"
+#include "llmediaremotectrl.h"
#include "llpanelaudiovolume.h"
#include "llparcel.h"
#include "lltextbox.h"
@@ -124,7 +125,7 @@ LLOverlayBar::LLOverlayBar(const std::string& name, const LLRect& rect)
setMouseOpaque(FALSE);
setIsChrome(TRUE);
- isBuilt = FALSE;
+ mBuilt = false;
LLCallbackMap::map_t factory_map;
factory_map["master_volume"] = LLCallbackMap(LLOverlayBar::createMasterRemote, this);
@@ -141,7 +142,7 @@ LLOverlayBar::LLOverlayBar(const std::string& name, const LLRect& rect)
childSetAction("Stand Up",onClickStandUp,this);
mIsFocusRoot = TRUE;
- isBuilt = true;
+ mBuilt = true;
// make overlay bar conform to window size
setRect(rect);
@@ -168,7 +169,7 @@ void LLOverlayBar::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLView::reshape(width, height, called_from_parent);
- if (isBuilt)
+ if (mBuilt)
{
layoutButtons();
}
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 @@
#define LL_LLOVERLAYBAR_H
#include "llpanel.h"
-#include "llmediaremotectrl.h"
// "Constants" loaded from settings.xml at start time
extern S32 STATUS_BAR_HEIGHT;
class LLButton;
class LLLineEditor;
+class LLMediaRemoteCtrl;
class LLMessageSystem;
class LLTextBox;
class LLTextEditor;
@@ -102,7 +102,7 @@ protected:
LLMediaRemoteCtrl* mMusicRemote;
LLMediaRemoteCtrl* mMediaRemote;
LLVoiceRemoteCtrl* mVoiceRemote;
- BOOL isBuilt;
+ bool mBuilt; // dialog constructed yet?
enum { STOPPED=0, PLAYING=1, PAUSED=2 };
BOOL mMediaState;
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 @@
+/**
+ * @file llpanellcd.cpp
+ * @brief lcd options panel
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelLCD.h"
+
+// linden library includes
+#include "llerror.h"
+#include "llrect.h"
+#include "llfontgl.h"
+#include "message.h"
+#include "llvieweruictrlfactory.h"
+
+// project includes
+#include "llviewerwindow.h"
+#include "llcheckboxctrl.h"
+#include "llradiogroup.h"
+#include "llresmgr.h"
+#include "lltextbox.h"
+#include "llui.h"
+#include "viewer.h"
+
+//Ventrella
+#include "llagent.h"
+//end Ventrella
+
+// for Logitech LCD keyboards / speakers
+#ifndef LL_LCD_H
+#include "lllcd.h"
+#endif
+
+
+//
+// Globals
+//
+
+//
+// Static functions
+//
+
+
+LLPanelLCD::LLPanelLCD()
+{
+ gUICtrlFactory->buildPanel(this, "panel_preferences_lcd.xml");
+}
+
+BOOL LLPanelLCD::postBuild()
+{
+ requires("LCDDestination", WIDGET_TYPE_RADIO_GROUP);
+ requires("DisplayLinden", WIDGET_TYPE_CHECKBOX);
+ requires("DisplayDebug", WIDGET_TYPE_CHECKBOX);
+ requires("DisplayDebugConsole", WIDGET_TYPE_CHECKBOX);
+ requires("DisplayRegion", WIDGET_TYPE_CHECKBOX);
+ requires("DisplayChat", WIDGET_TYPE_CHECKBOX);
+ requires("DisplayIM", WIDGET_TYPE_CHECKBOX);
+
+ if (!checkRequirements())
+ {
+ return FALSE;
+ }
+
+ refresh();
+
+ return TRUE;
+}
+
+
+LLPanelLCD::~LLPanelLCD()
+{
+ // Children all cleaned up by default view destructor.
+}
+
+void LLPanelLCD::refresh()
+{
+ mLCDDestination = gSavedSettings.getS32("LCDDestination");
+ mDisplayChat = gSavedSettings.getBOOL("DisplayChat");
+ mDisplayIM = gSavedSettings.getBOOL("DisplayIM");
+ mDisplayRegion = gSavedSettings.getBOOL("DisplayRegion");
+ mDisplayDebug = gSavedSettings.getBOOL("DisplayDebug");
+ mDisplayDebugConsole = gSavedSettings.getBOOL("DisplayDebugConsole");
+ mDisplayLinden = gSavedSettings.getBOOL("DisplayLinden");
+
+ LLPanel::refresh();
+}
+
+void LLPanelLCD::apply()
+{
+ // nothing really to do here.
+}
+
+
+void LLPanelLCD::cancel()
+{
+ // doing this to restore situation when we entered this function
+ gSavedSettings.setS32("LCDDestination", mLCDDestination);
+ gSavedSettings.setBOOL("DisplayChat", mDisplayChat);
+ gSavedSettings.setBOOL("DisplayIM", mDisplayIM);
+ gSavedSettings.setBOOL("DisplayRegion", mDisplayRegion);
+ gSavedSettings.setBOOL("DisplayDebug", mDisplayDebug);
+ gSavedSettings.setBOOL("DisplayDebugConsole", mDisplayDebugConsole);
+ gSavedSettings.setBOOL("DisplayLinden", mDisplayLinden);
+}
\ 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 @@
+/**
+ * @file llpanelLCD.h
+ * @brief lcd options panel
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_PANEL_LCD_H
+#define LL_PANEL_LCD_H
+
+#include "llpanel.h"
+
+class LLCheckBoxCtrl;
+
+
+class LLPanelLCD : public LLPanel
+{
+public:
+ LLPanelLCD();
+ virtual ~LLPanelLCD();
+
+ virtual BOOL postBuild();
+ virtual void refresh();
+ void apply();
+ void cancel();
+
+protected:
+ S32 mLCDDestination;
+ BOOL mDisplayChat;
+ BOOL mDisplayRegion;
+ BOOL mDisplayDebug;
+ BOOL mDisplayDebugConsole;
+ BOOL mDisplayLinden;
+ BOOL mDisplayIM;
+
+};
+
+#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 @@
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llclassifiedflags.h"
+#include "llclassifiedstatsresponder.h"
#include "llviewercontrol.h"
#include "lllineeditor.h"
#include "llfloateravatarinfo.h"
+#include "llfloaterclassified.h"
#include "lltabcontainervertical.h"
#include "lltextbox.h"
#include "llcombobox.h"
@@ -62,6 +64,7 @@
#include "llworldmap.h"
#include "llfloaterworldmap.h"
#include "llviewergenericmessage.h" // send_generic_message
+#include "llviewerregion.h"
#include "llviewerwindow.h" // for window width, height
#include "viewer.h" // app_abort_quit()
@@ -98,9 +101,10 @@ static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
//static
std::list LLPanelClassified::sAllPanels;
-LLPanelClassified::LLPanelClassified(BOOL in_finder)
+LLPanelClassified::LLPanelClassified(BOOL in_finder, bool from_search)
: LLPanel("Classified Panel"),
mInFinder(in_finder),
+ mFromSearch(from_search),
mDirty(false),
mForceClose(false),
mLocationChanged(false),
@@ -225,7 +229,7 @@ BOOL LLPanelClassified::postBuild()
mMatureCheck = LLViewerUICtrlFactory::getCheckBoxByName(this, "classified_mature_check");
mMatureCheck->setCommitCallback(onCommitAny);
mMatureCheck->setCallbackUserData(this);
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
// Teens don't get to set mature flag. JC
mMatureCheck->setVisible(FALSE);
@@ -364,7 +368,11 @@ void LLPanelClassified::setClassifiedID(const LLUUID& id)
mClassifiedID = id;
}
-
+void LLPanelClassified::setClickThroughText(const std::string& text)
+{
+ if(mClickThroughText)
+ this->mClickThroughText->setText(text);
+}
//static
void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
S32 teleport,
@@ -380,6 +388,16 @@ void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
continue;
}
+ // We need to see if we should use the new stat table or the old.
+ // If the SearchStatRequest capability exists, then the data will come
+ // from the new table.
+ std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
+
+ if (!url.empty())
+ {
+ return;
+ }
+
if (self->mClickThroughText)
{
std::string msg = llformat("Clicks: %d teleport, %d map, %d profile",
@@ -421,6 +439,18 @@ void LLPanelClassified::sendClassifiedInfoRequest()
mDataRequested = TRUE;
mRequestedID = mClassifiedID;
+
+ // While we're at it let's get the stats from the new table if that
+ // capability exists.
+ std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
+ LLSD body;
+ body["classified_id"] = mClassifiedID;
+
+ if (!url.empty())
+ {
+ llinfos << "Classified stat request via capability" << llendl;
+ LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(this->getHandle()));
+ }
}
}
@@ -900,6 +930,19 @@ void LLPanelClassified::sendClassifiedClickMessage(const char* type)
strings.push_back(type);
LLUUID no_invoice;
send_generic_message("classifiedclick", strings, no_invoice);
+
+ // New classified click-through handling
+ LLSD body;
+ body["type"] = type;
+ body["from_search"] = mFromSearch;
+ body["classified_id"] = mClassifiedID;
+ std::string url = gAgent.getRegion()->getCapability("SearchStatTracking");
+
+ if (!url.empty())
+ {
+ llinfos << "LLPanelClassified::sendClassifiedClickMessage via capability" << llendl;
+ LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
+ }
}
////////////////////////////////////////////////////////////////////////////////////////////
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;
class LLPanelClassified : public LLPanel
{
public:
- LLPanelClassified(BOOL in_finder);
+ LLPanelClassified(BOOL in_finder, bool from_search = false);
/*virtual*/ ~LLPanelClassified();
void reset();
@@ -79,6 +79,7 @@ public:
void initNewClassified();
void setClassifiedID(const LLUUID& id);
+ void setClickThroughText(const std::string& text);
static void setClickThrough(const LLUUID& classified_id,
S32 teleport, S32 map, S32 profile);
@@ -118,6 +119,7 @@ protected:
protected:
BOOL mInFinder;
+ bool mFromSearch;
BOOL mDirty;
bool mForceClose;
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)
// Start with everyone invisible
if (self->mFloaterDirectory)
{
- if (self->mFloaterDirectory->mPanelAvatarp) self->mFloaterDirectory->mPanelAvatarp->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelEventp) self->mFloaterDirectory->mPanelEventp->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelGroupp) self->mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelGroupHolderp) self->mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelPlacep) self->mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelPlaceSmallp) self->mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
- if (self->mFloaterDirectory->mPanelClassifiedp) self->mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
+ self->mFloaterDirectory->hideAllDetailPanels();
}
if (FALSE == list->getCanSelect())
@@ -317,62 +311,70 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
return;
}
- LLUUID id = list->getCurrentID();
+ LLSD item_id = list->getCurrentID();
S32 type = self->mResultsContents[id_str]["type"];
- LLString name = self->mResultsContents[id_str]["name"].asString();
-
+ if (type == EVENT_CODE)
+ {
+ // all but events use the UUID above
+ item_id = self->mResultsContents[id_str]["event_id"];
+ }
+
+ //LLString name = self->mResultsContents[id_str]["name"].asString();
+ self->showDetailPanel(type, item_id);
+}
+
+void LLPanelDirBrowser::showDetailPanel(S32 type, LLSD id)
+{
switch(type)
{
- // These are both people searches. Let the panel decide if they are online or offline.
- case ONLINE_CODE:
- case OFFLINE_CODE:
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelAvatarp)
+ case AVATAR_CODE:
+ if (mFloaterDirectory && mFloaterDirectory->mPanelAvatarp)
{
- self->mFloaterDirectory->mPanelAvatarp->setVisible(TRUE);
- self->mFloaterDirectory->mPanelAvatarp->setAvatarID(id, name, ONLINE_STATUS_NO);
+ mFloaterDirectory->mPanelAvatarp->setVisible(TRUE);
+ mFloaterDirectory->mPanelAvatarp->setAvatarID(id.asUUID(), "", ONLINE_STATUS_NO);
}
break;
case EVENT_CODE:
{
- U32 event_id = (U32)self->mResultsContents[id_str]["event_id"].asInteger();
- self->showEvent(event_id);
+ U32 event_id = (U32)id.asInteger();
+ showEvent(event_id);
}
break;
case GROUP_CODE:
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelGroupHolderp)
+ if (mFloaterDirectory && mFloaterDirectory->mPanelGroupHolderp)
{
- self->mFloaterDirectory->mPanelGroupHolderp->setVisible(TRUE);
+ mFloaterDirectory->mPanelGroupHolderp->setVisible(TRUE);
}
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelGroupp)
+ if (mFloaterDirectory && mFloaterDirectory->mPanelGroupp)
{
- self->mFloaterDirectory->mPanelGroupp->setVisible(TRUE);
- self->mFloaterDirectory->mPanelGroupp->setGroupID(id);
+ mFloaterDirectory->mPanelGroupp->setVisible(TRUE);
+ mFloaterDirectory->mPanelGroupp->setGroupID(id.asUUID());
}
break;
case CLASSIFIED_CODE:
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelClassifiedp)
+ if (mFloaterDirectory && mFloaterDirectory->mPanelClassifiedp)
{
- self->mFloaterDirectory->mPanelClassifiedp->setVisible(TRUE);
- self->mFloaterDirectory->mPanelClassifiedp->setClassifiedID(id);
- self->mFloaterDirectory->mPanelClassifiedp->sendClassifiedInfoRequest();
+ mFloaterDirectory->mPanelClassifiedp->setVisible(TRUE);
+ mFloaterDirectory->mPanelClassifiedp->setClassifiedID(id.asUUID());
+ mFloaterDirectory->mPanelClassifiedp->sendClassifiedInfoRequest();
}
break;
case FOR_SALE_CODE:
case AUCTION_CODE:
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelPlaceSmallp)
+ if (mFloaterDirectory && mFloaterDirectory->mPanelPlaceSmallp)
{
- self->mFloaterDirectory->mPanelPlaceSmallp->setVisible(TRUE);
- self->mFloaterDirectory->mPanelPlaceSmallp->setParcelID(id);
- self->mFloaterDirectory->mPanelPlaceSmallp->sendParcelInfoRequest();
+ mFloaterDirectory->mPanelPlaceSmallp->setVisible(TRUE);
+ mFloaterDirectory->mPanelPlaceSmallp->resetLocation();
+ mFloaterDirectory->mPanelPlaceSmallp->setParcelID(id.asUUID());
}
break;
case PLACE_CODE:
case POPULAR_CODE:
- if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelPlacep)
+ if (mFloaterDirectory && mFloaterDirectory->mPanelPlacep)
{
- self->mFloaterDirectory->mPanelPlacep->setVisible(TRUE);
- self->mFloaterDirectory->mPanelPlacep->setParcelID(id);
- self->mFloaterDirectory->mPanelPlacep->sendParcelInfoRequest();
+ mFloaterDirectory->mPanelPlacep->setVisible(TRUE);
+ mFloaterDirectory->mPanelPlacep->resetLocation();
+ mFloaterDirectory->mPanelPlacep->setParcelID(id.asUUID());
}
break;
default:
@@ -389,12 +391,7 @@ void LLPanelDirBrowser::showEvent(const U32 event_id)
// Start with everyone invisible
if (mFloaterDirectory)
{
- if (mFloaterDirectory->mPanelAvatarp) mFloaterDirectory->mPanelAvatarp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelGroupp) mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelGroupHolderp) mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelPlacep) mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
- if (mFloaterDirectory->mPanelPlaceSmallp) mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelClassifiedp) mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
+ mFloaterDirectory->hideAllDetailPanels();
if (mFloaterDirectory->mPanelEventp)
{
mFloaterDirectory->mPanelEventp->setVisible(TRUE);
@@ -436,9 +433,6 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
rows = self->showNextButton(rows);
- LLString online_type = llformat("%d", ONLINE_CODE);
- LLString offline_type = llformat("%d", OFFLINE_CODE);
-
for (S32 i = 0; i < rows; i++)
{
msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_FirstName, DB_FIRST_NAME_BUF_SIZE, first_name, i);
@@ -467,7 +461,7 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = image_id;
- content["type"] = OFFLINE_CODE;
+ content["type"] = AVATAR_CODE;
LLString fullname = LLString(first_name) + " " + LLString(last_name);
row["columns"][1]["column"] = "name";
@@ -1183,13 +1177,7 @@ void LLPanelDirBrowser::setupNewSearch()
mHaveSearchResults = FALSE;
// Set all panels to be invisible
- if (mFloaterDirectory->mPanelAvatarp) mFloaterDirectory->mPanelAvatarp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelEventp) mFloaterDirectory->mPanelEventp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelGroupp) mFloaterDirectory->mPanelGroupp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelGroupHolderp) mFloaterDirectory->mPanelGroupHolderp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelPlacep) mFloaterDirectory->mPanelPlacep->setVisible(FALSE);
- if (mFloaterDirectory->mPanelPlaceSmallp) mFloaterDirectory->mPanelPlaceSmallp->setVisible(FALSE);
- if (mFloaterDirectory->mPanelClassifiedp) mFloaterDirectory->mPanelClassifiedp->setVisible(FALSE);
+ mFloaterDirectory->hideAllDetailPanels();
updateResultCount();
}
@@ -1237,11 +1225,6 @@ void LLPanelDirBrowser::addHelpText(const char* text)
}
-BOOL enable_never(void*)
-{
- return FALSE;
-}
-
void LLPanelDirBrowser::onKeystrokeName(LLLineEditor* line, void* data)
{
LLPanelDirBrowser *self = (LLPanelDirBrowser*)data;
@@ -1270,7 +1253,7 @@ S32 LLPanelDirBrowser::showNextButton(S32 rows)
{
// HACK: This hack doesn't work for llpaneldirfind (ALL)
// because other data is being returned as well.
- if ( getName() != "all_panel")
+ if ( getName() != "find_all_old_panel")
{
// HACK: The (mResultsPerPage)+1th entry indicates there are 'more'
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 @@
#include "llpanel.h"
-#include "llmemory.h" // LLPointer
#include "lluuid.h"
#include "llframetimer.h"
-#include "llviewerimage.h"
#include "llmap.h"
class LLMessageSystem;
@@ -78,6 +76,10 @@ public:
U32 getSelectedEventID() const;
void getSelectedInfo(LLUUID* id, S32 *type);
+ void showDetailPanel(S32 type, LLSD item_id);
+ // type is EVENT_CODE, PLACE_CODE, etc. from below.
+ // item_id is integer for events, UUID for all others.
+
// from llpaneldirbase
void setupNewSearch();
@@ -156,10 +158,13 @@ protected:
};
// Codes used for sorting by type.
+const S32 INVALID_CODE = -1;
const S32 EVENT_CODE = 0;
const S32 PLACE_CODE = 1;
-const S32 ONLINE_CODE = 2;
-const S32 OFFLINE_CODE = 3;
+// We no longer show online vs. offline in search result icons.
+//const S32 ONLINE_CODE = 2;
+//const S32 OFFLINE_CODE = 3;
+const S32 AVATAR_CODE = 3;
const S32 GROUP_CODE = 4;
const S32 CLASSIFIED_CODE = 5;
const 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()
LLPanelDirBrowser::postBuild();
// Teens don't get mature checkbox
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
childSetValue("incmature", FALSE);
childHide("incmature");
@@ -174,7 +174,7 @@ void LLPanelDirClassified::performQuery()
BOOL filter_mature = !childGetValue("incmature").asBoolean();
BOOL filter_auto_renew = FALSE;
U32 query_flags = pack_classified_flags(filter_mature, filter_auto_renew);
- //if (gAgent.mAccess <= SIM_ACCESS_PG) query_flags |= DFQ_PG_SIMS_ONLY;
+ //if (gAgent.isTeen()) query_flags |= DFQ_PG_SIMS_ONLY;
U32 category = childGetValue("Category").asInteger();
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()
void LLPanelDirEvents::refresh()
{
// You only have a choice if you are mature
- childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetVisible("incmature", !gAgent.isTeen());
BOOL godlike = gAgent.isGodlike();
childSetVisible("Delete", godlike);
@@ -182,7 +182,7 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
setupNewSearch();
U32 scope = DFQ_DATE_EVENTS;
- if ( gAgent.mAccess <= SIM_ACCESS_PG) scope |= DFQ_PG_SIMS_ONLY;
+ if ( gAgent.isTeen()) scope |= DFQ_PG_SIMS_ONLY;
if ( !childGetValue("incmature").asBoolean() ) scope |= DFQ_PG_EVENTS_ONLY;
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 @@
/**
* @file llpaneldirfind.cpp
- * @brief The "Find All" panel in the Find directory.
+ * @brief The "All" panel in the Search directory.
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
@@ -44,29 +44,356 @@
#include "llagent.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
+#include "lllineeditor.h"
#include "llcombobox.h"
#include "llviewercontrol.h"
-#include "lllineeditor.h"
#include "llmenucommands.h"
#include "llmenugl.h"
-#include "llscrolllistctrl.h"
#include "lltextbox.h"
#include "lluiconstants.h"
#include "llviewerimagelist.h"
#include "llviewermessage.h"
#include "llfloateravatarinfo.h"
#include "lldir.h"
+#include "llviewercontrol.h"
+#include "llviewerregion.h" // for region name for search urls
#include "llvieweruictrlfactory.h"
#include "llfloaterdirectory.h"
#include "llpaneldirbrowser.h"
-LLPanelDirFind::LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater)
+#include
+
+//---------------------------------------------------------------------------
+// LLPanelDirFindAll - Google search appliance based search
+//---------------------------------------------------------------------------
+
+class LLPanelDirFindAll
+: public LLPanelDirBrowser,
+ public LLWebBrowserCtrlObserver
+{
+public:
+ LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater);
+ /*virtual*/ ~LLPanelDirFindAll();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void draw();
+
+ void search(const std::string& search_text);
+ void focus();
+ void navigateToDefaultPage();
+
+private:
+ static void onClickBack( void* data );
+ static void onClickForward( void* data );
+ static void onClickHome( void* data );
+ static void onClickSearch( void* data );
+ static void onCommitSearch(LLUICtrl*, void* data);
+ static void onKeystrokeSearchEditor(LLLineEditor* line, void* data);
+
+ /*virtual*/ void onNavigateBegin( const EventType& eventIn );
+ /*virtual*/ void onNavigateComplete( const EventType& eventIn );
+ // Used to update progress indicator
+
+private:
+#if LL_LIBXUL_ENABLED
+ LLWebBrowserCtrl* mWebBrowser;
+#endif // LL_LIBXUL_ENABLED
+};
+
+
+LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater)
+: LLPanelDirBrowser(name, floater)
+#if LL_LIBXUL_ENABLED
+ ,mWebBrowser(NULL)
+#endif // LL_LIBXUL_ENABLED
+{
+ mMinSearchChars = 3;
+}
+
+BOOL LLPanelDirFindAll::postBuild()
+{
+ LLPanelDirBrowser::postBuild();
+
+ childSetAction("back_btn", onClickBack, this);
+ childSetAction("home_btn", onClickHome, this);
+ childSetAction("forward_btn", onClickForward, this);
+ childSetCommitCallback("search_editor", onCommitSearch, this);
+ childSetAction("search_btn", onClickSearch, this);
+
+ if (gAgent.isTeen())
+ {
+ childSetVisible("mature_check", false);
+ }
+
+ // we don't record the last search query (yet) so search text will be empty -> disable search
+ childDisable("search_btn");
+
+ childSetKeystrokeCallback("search_editor", onKeystrokeSearchEditor, this);
+
+#if LL_LIBXUL_ENABLED
+ mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "find_browser");
+ if (mWebBrowser)
+ {
+ // new pages appear in same window as the results page now
+ mWebBrowser->setOpenInInternalBrowser( false );
+ mWebBrowser->setOpenInExternalBrowser( false );
+
+ // Track updates for progress display.
+ mWebBrowser->addObserver(this);
+
+ navigateToDefaultPage();
+ }
+#endif // LL_LIBXUL_ENABLED
+
+ return TRUE;
+}
+
+LLPanelDirFindAll::~LLPanelDirFindAll()
+{
+#if LL_LIBXUL_ENABLED
+ if (mWebBrowser) mWebBrowser->remObserver(this);
+#endif // LL_LIBXUL_ENABLED
+}
+
+// virtual
+void LLPanelDirFindAll::draw()
+{
+ // enable/disable buttons depending on state
+#if LL_LIBXUL_ENABLED
+ if ( mWebBrowser )
+ {
+ bool enable_back = mWebBrowser->canNavigateBack();
+ childSetEnabled( "back_btn", enable_back );
+
+ bool enable_forward = mWebBrowser->canNavigateForward();
+ childSetEnabled( "forward_btn", enable_forward );
+ }
+#endif // LL_LIBXUL_ENABLED
+
+ LLPanelDirBrowser::draw();
+}
+
+void LLPanelDirFindAll::search(const std::string& search_text)
+{
+ if (!search_text.empty())
+ {
+ // Replace spaces with "+" for use by Google search appliance
+ // Yes, this actually works for double-spaces
+ // " foo bar" becomes "+foo++bar" and works fine. JC
+ std::string query = search_text;
+ std::string::iterator it = query.begin();
+ for ( ; it != query.end(); ++it )
+ {
+ if ( std::isspace( *it ) )
+ {
+ *it = '+';
+ }
+ }
+
+ std::string url = gSavedSettings.getString("SearchQueryURL");
+ std::string substring = "[QUERY]";
+ url.replace(url.find(substring), substring.length(), query);
+
+ // replace the collection name with the one selected from the combo box
+ std::string selected_collection = childGetValue( "Category" ).asString();
+ substring = "[COLLECTION]";
+ url.replace(url.find(substring), substring.length(), selected_collection);
+
+ // if the mature checkbox is unchecked, modify query to remove
+ // terms with given phrase from the result set
+ substring = "[MATURE]";
+ if ( childGetValue( "mature_check" ).asBoolean() == false )
+ {
+ url.replace(url.find(substring), substring.length(), "N");
+ }
+ else
+ {
+ url.replace(url.find(substring), substring.length(), "Y");
+ }
+
+ substring = "[TEEN]";
+ const char* teen = (gAgent.isTeen() ? "Y" : "N");
+ url.replace(url.find(substring), substring.length(), teen);
+
+ // Include region and x/y position, not for the GSA, but
+ // just to get logs on the web server for search_proxy.php
+ // showing where people were standing when they searched.
+ std::string region_name;
+ LLViewerRegion* region = gAgent.getRegion();
+ if (region)
+ {
+ region_name = region->getName();
+ }
+ // take care of spaces in names
+ region_name = LLURI::escape(region_name);
+ substring = "[REGION]";
+ url.replace(url.find(substring), substring.length(), region_name);
+
+ LLVector3 pos_region = gAgent.getPositionAgent();
+ std::string x = llformat("%.0f", pos_region.mV[VX]);
+ substring = "[X]";
+ url.replace(url.find(substring), substring.length(), x);
+ std::string y = llformat("%.0f", pos_region.mV[VY]);
+ substring = "[Y]";
+ url.replace(url.find(substring), substring.length(), y);
+ std::string z = llformat("%.0f", pos_region.mV[VZ]);
+ substring = "[Z]";
+ url.replace(url.find(substring), substring.length(), z);
+
+ llinfos << "url " << url << llendl;
+
+#if LL_LIBXUL_ENABLED
+ if (mWebBrowser)
+ {
+ mWebBrowser->navigateTo(url);
+ }
+#endif // LL_LIBXUL_ENABLED
+ }
+ else
+ {
+ // empty search text
+ navigateToDefaultPage();
+ }
+
+ childSetText("search_editor", search_text);
+}
+
+void LLPanelDirFindAll::focus()
+{
+ childSetFocus("search_editor");
+}
+
+void LLPanelDirFindAll::navigateToDefaultPage()
+{
+ std::string start_url = gSavedSettings.getString("SearchDefaultURL");
+
+ std::string substring = "[MATURE]";
+ if ( childGetValue( "mature_check" ).asBoolean() == false )
+ {
+ start_url.replace( start_url.find( substring ), substring.length(), "N" );
+ }
+ else
+ {
+ start_url.replace( start_url.find( substring ), substring.length(), "Y" );
+ }
+ llinfos << "SEARCH> browsing to default url: " << start_url << llendl;
+
+#if LL_LIBXUL_ENABLED
+ if (mWebBrowser)
+ {
+ mWebBrowser->navigateTo( start_url );
+ }
+#endif //LL_LIBXUL_ENABLED
+}
+
+// static - only enable search if there is at least 1 character
+void LLPanelDirFindAll::onKeystrokeSearchEditor(LLLineEditor* line, void* data)
+{
+ LLPanelDirBrowser *self = (LLPanelDirBrowser*)data;
+ if (line->getLength() > 0 )
+ {
+ self->childEnable("search_btn");
+ }
+ else
+ {
+ self->childDisable("search_btn");
+ }
+}
+
+// static
+void LLPanelDirFindAll::onClickBack( void* data )
+{
+#if LL_LIBXUL_ENABLED
+ LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
+ if ( self->mWebBrowser )
+ {
+ self->mWebBrowser->navigateBack();
+ }
+#endif // LL_LIBXUL_ENABLED
+}
+
+// static
+void LLPanelDirFindAll::onClickForward( void* data )
+{
+#if LL_LIBXUL_ENABLED
+ LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
+ if ( self->mWebBrowser )
+ {
+ self->mWebBrowser->navigateForward();
+ }
+#endif // LL_LIBXUL_ENABLED
+}
+
+// static
+void LLPanelDirFindAll::onClickHome( void* data )
+{
+#if LL_LIBXUL_ENABLED
+ LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
+ if ( self->mWebBrowser )
+ {
+ self->mWebBrowser->navigateHome();
+ }
+#endif // LL_LIBXUL_ENABLED
+}
+
+// static
+void LLPanelDirFindAll::onCommitSearch(LLUICtrl*, void* data)
+{
+ onClickSearch(data);
+}
+
+// static
+void LLPanelDirFindAll::onClickSearch(void* data)
+{
+ LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data;
+ LLString search_text = self->childGetText("search_editor");
+ self->search(search_text);
+}
+
+void LLPanelDirFindAll::onNavigateBegin( const EventType& eventIn )
+{
+ childSetText("status_text", childGetText("loading_text"));
+}
+
+void LLPanelDirFindAll::onNavigateComplete( const EventType& eventIn )
+{
+ childSetText("status_text", childGetText("done_text"));
+}
+
+//---------------------------------------------------------------------------
+// LLPanelDirFindAllInterface
+//---------------------------------------------------------------------------
+
+// static
+LLPanelDirFindAll* LLPanelDirFindAllInterface::create(LLFloaterDirectory* floater)
+{
+ return new LLPanelDirFindAll("find_all_panel", floater);
+}
+
+// static
+void LLPanelDirFindAllInterface::search(LLPanelDirFindAll* panel,
+ const std::string& search_text)
+{
+ panel->search(search_text);
+}
+
+// static
+void LLPanelDirFindAllInterface::focus(LLPanelDirFindAll* panel)
+{
+ panel->focus();
+}
+
+//---------------------------------------------------------------------------
+// LLPanelDirFindAllOld - deprecated if new Google search works out. JC
+//---------------------------------------------------------------------------
+
+LLPanelDirFindAllOld::LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater)
: LLPanelDirBrowser(name, floater)
{
mMinSearchChars = 3;
}
-BOOL LLPanelDirFind::postBuild()
+BOOL LLPanelDirFindAllOld::postBuild()
{
LLPanelDirBrowser::postBuild();
@@ -79,32 +406,32 @@ BOOL LLPanelDirFind::postBuild()
return TRUE;
}
+LLPanelDirFindAllOld::~LLPanelDirFindAllOld()
+{
+ // Children all cleaned up by default view destructor.
+}
+
// virtual
-void LLPanelDirFind::draw()
+void LLPanelDirFindAllOld::draw()
{
// You only have a choice if you are mature
- childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetVisible("incmature", !gAgent.isTeen());
childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll"));
LLPanelDirBrowser::draw();
}
-LLPanelDirFind::~LLPanelDirFind()
-{
- // Children all cleaned up by default view destructor.
-}
-
// static
-void LLPanelDirFind::onCommitScope(LLUICtrl* ctrl, void* data)
+void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data)
{
- LLPanelDirFind* self = (LLPanelDirFind*)data;
+ LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data;
self->setFocus(TRUE);
}
// static
-void LLPanelDirFind::onClickSearch(void *userdata)
+void LLPanelDirFindAllOld::onClickSearch(void *userdata)
{
- LLPanelDirFind *self = (LLPanelDirFind *)userdata;
+ LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata;
if (self->childGetValue("name").asString().length() < self->mMinSearchChars)
{
@@ -121,7 +448,7 @@ void LLPanelDirFind::onClickSearch(void *userdata)
scope |= DFQ_GROUPS; // groups
BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") ||
- gAgent.mAccess <= SIM_ACCESS_PG ||
+ gAgent.isTeen() ||
!self->childGetValue("incmature").asBoolean() );
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 @@
#include "llpaneldirbrowser.h"
-// UI class forward declarations
+class LLUICtrl;
class LLLineEditor;
+class LLPanelDirFindAll;
+class LLFloaterDirectory;
+class LLPanelDirFindAllInterface
+{
+public:
+ static LLPanelDirFindAll* create(LLFloaterDirectory* floater);
+ static void search(LLPanelDirFindAll* panel, const std::string& search_text);
+ static void focus(LLPanelDirFindAll* panel);
+};
-class LLPanelDirFind : public LLPanelDirBrowser
+
+class LLPanelDirFindAllOld : public LLPanelDirBrowser
{
public:
- LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater);
- virtual ~LLPanelDirFind();
+ LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater);
+ /*virtual*/ ~LLPanelDirFindAllOld();
- virtual BOOL postBuild();
+ /*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
@@ -53,6 +63,4 @@ public:
static void onKeystrokeName(LLLineEditor* line, void* data);
};
-BOOL enable_never(void*);
-
#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()
void LLPanelDirGroups::draw()
{
// You only have a choice if you are mature
- childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetVisible("incmature", !gAgent.isTeen());
childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups"));
LLPanelDirBrowser::draw();
@@ -93,7 +93,7 @@ void LLPanelDirGroups::performQuery()
// Check group mature filter.
if ( !gSavedSettings.getBOOL("ShowMatureGroups")
- || gAgent.mAccess <= SIM_ACCESS_PG )
+ || gAgent.isTeen() )
{
scope |= DFQ_FILTER_MATURE;
}
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()
childSetValue("type", gSavedSettings.getString("FindLandType"));
- if (gAgent.mAccess <= SIM_ACCESS_PG)
+ if (gAgent.isTeen())
{
childSetValue("rating", PG_ONLY);
childDisable("rating");
@@ -156,7 +156,7 @@ void LLPanelDirLand::performQuery()
}
U32 query_flags = 0x0;
- if (gAgent.mAccess <= SIM_ACCESS_PG) query_flags |= DFQ_PG_SIMS_ONLY;
+ if (gAgent.isTeen()) query_flags |= DFQ_PG_SIMS_ONLY;
const std::string& rating = childGetValue("rating").asString();
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()
void LLPanelDirPlaces::draw()
{
// You only have a choice if you are mature
- childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetVisible("incmature", !gAgent.isTeen());
childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
LLPanelDirBrowser::draw();
@@ -118,7 +118,7 @@ void LLPanelDirPlaces::performQuery()
}
BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims")
- || gAgent.mAccess <= SIM_ACCESS_PG;
+ || gAgent.isTeen();
queryCore(name, category, pg_only);
}
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()
void LLPanelDirPopular::draw()
{
// You only have a choice if you are mature]
- childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetVisible("incmature", !gAgent.isTeen());
childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
LLPanelDirBrowser::draw();
@@ -93,7 +93,7 @@ void LLPanelDirPopular::draw()
void LLPanelDirPopular::requestPopular()
{
LLMessageSystem* msg = gMessageSystem;
- BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.mAccess <= SIM_ACCESS_PG;
+ BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.isTeen();
BOOL pictures_only = childGetValue("incpictures").asBoolean();
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()
return TRUE;
}
-
void LLPanelEvent::setEventID(const U32 event_id)
{
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 @@
// project includes
#include "llagent.h"
#include "llviewerwindow.h"
-#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
#include "llconsole.h"
#include "llpanellogin.h"
#include "llnetmap.h"
-#include "llradiogroup.h"
#include "llresmgr.h"
#include "llspinctrl.h"
#include "lltextbox.h"
#include "llui.h"
#include "llurlsimstring.h"
#include "llviewercontrol.h"
-#include "viewer.h"
+#include "viewer.h" // gCrashBehavior
//
// 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()
{
mCtrlMature->setCommitCallback(onCommitAny);
mCtrlMature->setCallbackUserData(this);
- mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG );
+ mCtrlMature->setVisible( !gAgent.isTeen() );
}
mCtrlOpenEnrollment = (LLCheckBoxCtrl*) getChildByName("open_enrollement", recurse);
@@ -476,7 +476,7 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
if (mCtrlMature)
{
- if (gAgent.mAccess > SIM_ACCESS_PG)
+ if (!gAgent.isTeen())
{
gdatap->mMaturePublish = mCtrlMature->get();
}
@@ -639,7 +639,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
{
mCtrlMature->set(gdatap->mMaturePublish);
mCtrlMature->setEnabled(mAllowEdit && can_change_ident);
- mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG );
+ mCtrlMature->setVisible( !gAgent.isTeen() );
}
if (mCtrlOpenEnrollment)
{
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 @@
#include "message.h"
#include "llui.h"
#include "llsecondlifeurls.h"
+#include "llremoteparcelrequest.h"
+#include "llfloater.h"
#include "llagent.h"
#include "llviewerwindow.h"
@@ -53,6 +55,7 @@
#include "llvieweruictrlfactory.h"
//#include "llviewermenu.h" // create_landmark()
#include "llweb.h"
+#include "llsdutil.h"
//static
std::list LLPanelPlace::sAllPanels;
@@ -60,8 +63,12 @@ std::list LLPanelPlace::sAllPanels;
LLPanelPlace::LLPanelPlace()
: LLPanel("Places Panel"),
mParcelID(),
+ mRequestedID(),
+ mRegionID(),
mPosGlobal(),
- mAuctionID(0)
+ mPosRegion(),
+ mAuctionID(0),
+ mLandmarkAssetID()
{
sAllPanels.push_back(this);
}
@@ -81,13 +88,13 @@ BOOL LLPanelPlace::postBuild()
mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl");
mSnapshotCtrl->setEnabled(FALSE);
- mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "name_editor");
+ mNameEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "name_editor");
mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor");
- mInfoEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "info_editor");
+ mInfoEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "info_editor");
- mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor");
+ mLocationEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "location_editor");
mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn");
mTeleportBtn->setClickedCallback(onClickTeleport);
@@ -108,16 +115,54 @@ BOOL LLPanelPlace::postBuild()
// Default to no auction button. We'll show it if we get an auction id
mAuctionBtn->setVisible(FALSE);
+ // Temporary text to explain why the description panel is blank.
+ // mDescEditor->setText("Parcel information not available without server update");
+
return TRUE;
}
+void LLPanelPlace::displayItemInfo(const LLInventoryItem* pItem)
+{
+ mNameEditor->setText(pItem->getName());
+ mDescEditor->setText(pItem->getDescription());
+}
+// Use this for search directory clicks, because we are totally
+// recycling the panel and don't need to use what's there.
+//
+// For SLURL clicks, don't call this, because we need to cache
+// the location info from the user.
+void LLPanelPlace::resetLocation()
+{
+ mParcelID.setNull();
+ mRequestedID.setNull();
+ mRegionID.setNull();
+ mLandmarkAssetID.setNull();
+ mPosGlobal.clearVec();
+ mPosRegion.clearVec();
+ mAuctionID = 0;
+}
void LLPanelPlace::setParcelID(const LLUUID& parcel_id)
{
mParcelID = parcel_id;
+ sendParcelInfoRequest();
+}
+
+void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id)
+{
+ mSnapshotCtrl->setImageAssetID(snapshot_id);
+}
+
+void LLPanelPlace::setName(const std::string& name)
+{
+ mNameEditor->setText(name);
}
+void LLPanelPlace::setLocationString(const std::string& location)
+{
+ mLocationEditor->setText(location);
+}
void LLPanelPlace::sendParcelInfoRequest()
{
@@ -136,6 +181,20 @@ void LLPanelPlace::sendParcelInfoRequest()
}
}
+void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason)
+{
+ // We only really handle 404 and 499 errors
+ LLString error_text;
+ if(status == 404)
+ {
+ error_text = childGetText("server_error_text");
+ }
+ else if(status == 499)
+ {
+ error_text = childGetText("server_forbidden_text");
+ }
+ mDescEditor->setText(error_text);
+}
//static
void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
@@ -184,19 +243,28 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
msg->getS32 ("Data", "SalePrice", sale_price);
msg->getS32 ("Data", "AuctionID", auction_id);
- self->mPosGlobal.setVec(global_x, global_y, global_z);
self->mAuctionID = auction_id;
- self->mSnapshotCtrl->setImageAssetID(snapshot_id);
+ if(snapshot_id.notNull())
+ {
+ self->mSnapshotCtrl->setImageAssetID(snapshot_id);
+ }
+
+ // Only assign the name and description if they are not empty and there is not a
+ // value present (passed in from a landmark, e.g.)
+ std::string name_str(name);
+ std::string desc_str(desc);
- self->mNameEditor->setText(LLString(name));
+ if(! name_str.empty() && ! self->mNameEditor->getText().empty())
+ self->mNameEditor->setText(name_str);
- self->mDescEditor->setText(LLString(desc));
+ if(! desc_str.empty() && ! self->mDescEditor->getText().empty())
+ self->mDescEditor->setText(desc_str);
LLString info_text;
LLUIString traffic = self->getUIString("traffic_text");
- traffic.setArg("[TRAFFIC]", llformat("%.0f", dwell));
+ traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell));
info_text = traffic;
LLUIString area = self->getUIString("area_text");
area.setArg("[AREA]", llformat("%d", actual_area));
@@ -210,14 +278,11 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
if (auction_id != 0)
{
LLUIString auction = self->getUIString("auction_text");
- auction.setArg("[ID]", llformat("%010d", auction_id));
+ auction.setArg("[ID]", llformat("%010d ", auction_id));
info_text += auction;
}
self->mInfoEditor->setText(info_text);
- S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
- S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
- S32 region_z = llround(global_z);
// HACK: Flag 0x1 == mature region, otherwise assume PG
const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
@@ -226,8 +291,26 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
}
- LLString location = llformat("%s %d, %d, %d (%s)",
- sim_name, region_x, region_y, region_z, rating);
+ // Just use given region position for display
+ S32 region_x = llround(self->mPosRegion.mV[0]);
+ S32 region_y = llround(self->mPosRegion.mV[1]);
+ S32 region_z = llround(self->mPosRegion.mV[2]);
+
+ // If the region position is zero, grab position from the global
+ if(self->mPosRegion.isExactlyZero())
+ {
+ region_x = llround(global_x) % REGION_WIDTH_UNITS;
+ region_y = llround(global_y) % REGION_WIDTH_UNITS;
+ region_z = llround(global_z);
+ }
+
+ if(self->mPosGlobal.isExactlyZero())
+ {
+ self->mPosGlobal.setVec(global_x, global_y, global_z);
+ }
+
+ LLString location = llformat("%s %d, %d, %d (%s)",
+ sim_name, region_x, region_y, region_z, rating);
self->mLocationEditor->setText(location);
BOOL show_auction = (auction_id > 0);
@@ -236,12 +319,58 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
}
+void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region,
+ const LLUUID& landmark_asset_id,
+ const LLUUID& region_id,
+ const LLVector3d& pos_global)
+{
+ LLSD body;
+ mPosRegion = pos_region;
+ mPosGlobal = pos_global;
+ mLandmarkAssetID = landmark_asset_id;
+ std::string url = gAgent.getRegion()->getCapability("RemoteParcelRequest");
+ if (!url.empty())
+ {
+ body["location"] = ll_sd_from_vector3(pos_region);
+ if (!region_id.isNull())
+ {
+ body["region_id"] = region_id;
+ }
+ if (!pos_global.isExactlyZero())
+ {
+ U64 region_handle = to_region_handle(pos_global);
+ body["region_handle"] = ll_sd_from_U64(region_handle);
+ }
+ LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(this->getHandle()));
+ }
+ else
+ {
+ mDescEditor->setText(childGetText("server_update_text"));
+ }
+ mSnapshotCtrl->setImageAssetID(LLUUID::null);
+}
+
+
// static
void LLPanelPlace::onClickTeleport(void* data)
{
LLPanelPlace* self = (LLPanelPlace*)data;
- if (!self->mPosGlobal.isExactlyZero())
+ LLView* parent_viewp = self->getParent();
+ if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER)
+ {
+ LLFloater* parent_floaterp = (LLFloater*)parent_viewp;
+ parent_floaterp->close();
+ }
+ // LLFloater* parent_floaterp = (LLFloater*)self->getParent();
+ parent_viewp->setVisible(false);
+ if(self->mLandmarkAssetID.notNull())
+ {
+ gAgent.teleportViaLandmark(self->mLandmarkAssetID);
+ gFloaterWorldMap->trackLandmark(self->mLandmarkAssetID);
+
+ }
+ else if (!self->mPosGlobal.isExactlyZero())
{
gAgent.teleportViaLocation(self->mPosGlobal);
gFloaterWorldMap->trackLocation(self->mPosGlobal);
@@ -252,6 +381,12 @@ void LLPanelPlace::onClickTeleport(void* data)
void LLPanelPlace::onClickMap(void* data)
{
LLPanelPlace* self = (LLPanelPlace*)data;
+ LLView* parent_viewp = self->getParent();
+ if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER)
+ {
+ LLFloater* parent_floaterp = (LLFloater*)parent_viewp;
+ parent_floaterp->close();
+ }
if (!self->mPosGlobal.isExactlyZero())
{
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;
class LLTextEditor;
class LLTextureCtrl;
class LLMessageSystem;
+class LLInventoryItem;
class LLPanelPlace : public LLPanel
{
@@ -52,11 +53,26 @@ public:
/*virtual*/ BOOL postBuild();
+ void resetLocation();
+ // Ignore all old location information, useful if you are
+ // recycling an existing dialog and need to clear it.
void setParcelID(const LLUUID& parcel_id);
+ // Sends a request for data about the given parcel, which will
+ // only update the location if there is none already available.
- void sendParcelInfoRequest();
+ void displayItemInfo(const LLInventoryItem* pItem);
+ void setRegionID(const LLUUID& region_id) { mRegionID = region_id; }
+ void setSnapshot(const LLUUID& snapshot_id);
+ void setName(const std::string& name);
+ void setLocationString(const std::string& location);
+ void setErrorStatus(U32 status, const std::string& reason);
+ void sendParcelInfoRequest();
+ void displayParcelInfo(const LLVector3& pos_region,
+ const LLUUID& landmark_asset_id,
+ const LLUUID& region_id,
+ const LLVector3d& pos_global);
static void processParcelInfoReply(LLMessageSystem* msg, void**);
protected:
@@ -71,16 +87,22 @@ protected:
protected:
LLUUID mParcelID;
LLUUID mRequestedID;
+ LLUUID mRegionID;
+ LLUUID mLandmarkAssetID;
+ // Absolute position of the location for teleport, may not
+ // be available (hence zero)
LLVector3d mPosGlobal;
+ // Region-local position for teleport, always available.
+ LLVector3 mPosRegion;
// Zero if this is not an auction
S32 mAuctionID;
LLTextureCtrl* mSnapshotCtrl;
- LLLineEditor* mNameEditor;
+ LLTextBox* mNameEditor;
LLTextEditor* mDescEditor;
- LLLineEditor* mInfoEditor;
- LLLineEditor* mLocationEditor;
+ LLTextBox* mInfoEditor;
+ LLTextBox* mLocationEditor;
LLButton* mTeleportBtn;
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 @@
#include "lliconctrl.h"
#include "lllandmarklist.h"
#include "lllineeditor.h"
+#include "llpanelplace.h"
#include "llresmgr.h"
#include "llstatusbar.h"
#include "lltextbox.h"
@@ -89,26 +90,14 @@ LLPreviewLandmark::LLPreviewLandmark(const std::string& name,
mLandmark( NULL )
{
- if (show_keep_discard)
- {
- gUICtrlFactory->buildFloater(this,"floater_preview_new_landmark.xml");
- childSetAction("Discard btn",onDiscardBtn,this);
- }
- else
- {
- gUICtrlFactory->buildFloater(this,"floater_preview_existing_landmark.xml");
- childSetVisible("desc txt", FALSE);
- childSetEnabled("desc", FALSE);
- }
-
- childSetAction("Teleport btn", onTeleportBtn,this);
- childSetAction("Show on Map btn", onMapBtn,this);
+ mFactoryMap["place_details_panel"] = LLCallbackMap(LLPreviewLandmark::createPlaceDetail, this);
+ gUICtrlFactory->buildFloater(this, "floater_preview_existing_landmark.xml", &getFactoryMap());
- const LLInventoryItem* item = getItem();
-
- childSetCommitCallback("desc", LLPreview::onText, this);
- childSetText("desc", item->getDescription());
- childSetPrevalidate("desc", &LLLineEditor::prevalidatePrintableNotPipe);
+ /*
+ childSetCommitCallback("desc_editor", LLPreview::onText, this);
+ childSetText("desc_editor", item->getDescription());
+ childSetText("name_editor", item->getName());
+ childSetPrevalidate("desc_editor", &LLLineEditor::prevalidatePrintableNotPipe);
setTitle(title);
@@ -117,45 +106,10 @@ LLPreviewLandmark::LLPreviewLandmark(const std::string& name,
LLRect curRect = getRect();
translate(rect.mLeft - curRect.mLeft, rect.mTop - curRect.mTop);
}
-
+ */
LLPreviewLandmark::sOrderedInstances.push_back( this );
}
-// static
-void LLPreviewLandmark::onMapBtn( void* userdata )
-{
- LLPreviewLandmark* self = (LLPreviewLandmark*) userdata;
- gFocusMgr.setKeyboardFocus(NULL, NULL);
-
- if( gFloaterWorldMap )
- {
- gFloaterWorldMap->trackLandmark( self->mItemUUID );
- LLFloaterWorldMap::show(NULL, TRUE);
-
- self->close();
- }
-}
-
-// static
-void LLPreviewLandmark::onTeleportBtn( void* userdata )
-{
- LLPreviewLandmark* self = (LLPreviewLandmark*) userdata;
- gFocusMgr.setKeyboardFocus(NULL, NULL);
-
- const LLInventoryItem *item = self->getItem();
- if(item)
- {
- gAgent.teleportViaLandmark(item->getAssetUUID());
-
- // we now automatically track the landmark you're teleporting to
- // because you'll probably arrive at a telehub instead
- if( gFloaterWorldMap )
- {
- gFloaterWorldMap->trackLandmark( self->mItemUUID );
- }
- }
- self->close();
-}
LLPreviewLandmark::~LLPreviewLandmark()
{
@@ -222,31 +176,17 @@ void LLPreviewLandmark::draw()
if( item && !mLandmark )
{
mLandmark = gLandmarkList.getAsset( item->getAssetUUID() );
- }
-
- if(mLandmark)
- {
- F32 degrees = 0;
- F64 horiz_dist = 0;
- F64 vert_dist = 0;
- getDegreesAndDist( °rees, &horiz_dist, &vert_dist);
- S32 offset = 180 + (360/16);
- if( S32(degrees) + offset >= 360 )
+ if(mLandmark && mPlacePanel)
{
- offset -= 360;
+ LLVector3 pos_region = mLandmark->getRegionPos(); // always have this
+ LLUUID landmark_asset_id = item->getAssetUUID(); // always have this
+ LLUUID region_id;
+ mLandmark->getRegionID(region_id); // might find null?
+ LLVector3d pos_global = getPositionGlobal(); // might be 0
+ mPlacePanel->displayParcelInfo(pos_region, landmark_asset_id, region_id, pos_global);
}
-#if _DEBUG
- S32 dir_index = (S32(degrees) + offset) / (360/8);
- llassert( 0 <= dir_index && dir_index <= 7 );
-#endif
- // See also llfloatermap.cpp -> onLandmarkGo
-
- childSetEnabled("Teleport btn", TRUE);
}
- BOOL in_prelude = gAgent.inPrelude();
- childSetEnabled("Show on Map btn", !in_prelude);
-
LLFloater::draw();
}
}
@@ -271,3 +211,14 @@ LLPreview::EAssetStatus LLPreviewLandmark::getAssetStatus()
}
return mAssetStatus;
}
+// static
+void* LLPreviewLandmark::createPlaceDetail(void* userdata)
+{
+ LLPreviewLandmark *self = (LLPreviewLandmark*)userdata;
+ self->mPlacePanel = new LLPanelPlace();
+ gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml");
+ const LLInventoryItem* item = self->getItem();
+ self->mPlacePanel->displayItemInfo(item);
+
+ return self->mPlacePanel;
+}
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 @@
#include "lllandmark.h"
-#include "doublelinkedlist.h"
#include "llfloater.h"
#include "llmap.h"
#include "llstring.h"
@@ -53,6 +52,7 @@ class LLLandmarkList;
class LLLineEditor;
class LLMessageSystem;
class LLPreviewLandmark;
+class LLPanelPlace;
const S32 PREVIEW_LANDMARK_NUM_COLORS = 6;
@@ -78,9 +78,7 @@ public:
//static const LLPreviewLandmark* getFirst() { return LLPreviewLandmark::sOrderedInstances.getFirstData(); }
//static const LLPreviewLandmark* getNext() { return LLPreviewLandmark::sOrderedInstances.getNextData(); }
- static void onTeleportBtn(void *user_data);
- //static void onFlyBtn(void *user_data);
- static void onMapBtn(void *user_data);
+ static void* createPlaceDetail(void* userdata);
/*virtual*/ void loadAsset();
/*virtual*/ EAssetStatus getAssetStatus();
@@ -93,7 +91,7 @@ private:
// LLPointer mBeaconText;
LLIconCtrl* mIconLandmark;
-
+ LLPanelPlace* mPlacePanel;
LLLandmark* mLandmark;
LLColor4 mMarkerColor;
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 @@
+/**
+ * @file llparcelrequest.cpp
+ * @brief Implementation of the LLParcelRequest class.
+ *
+ * $LicenseInfo:firstyear=2006&license=internal$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llagent.h"
+#include "llremoteparcelrequest.h"
+
+#include "llpanelplace.h"
+#include "llpanel.h"
+#include "llhttpclient.h"
+#include "llsdserialize.h"
+#include "llviewerregion.h"
+#include "llview.h"
+#include "message.h"
+
+LLRemoteParcelRequestResponder::LLRemoteParcelRequestResponder(LLViewHandle place_panel_handle)
+{
+ mPlacePanelHandle = place_panel_handle;
+}
+/*virtual*/
+void LLRemoteParcelRequestResponder::result(const LLSD& content)
+{
+ LLUUID parcel_id = content["parcel_id"];
+
+ LLPanelPlace* place_panelp = (LLPanelPlace*)LLPanel::getPanelByHandle(mPlacePanelHandle);
+
+ if(place_panelp)
+ {
+ place_panelp->setParcelID(parcel_id);
+ }
+
+}
+
+/*virtual*/
+void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason)
+{
+ llinfos << "LLRemoteParcelRequest::error("
+ << status << ": " << reason << ")" << llendl;
+ LLPanelPlace* place_panelp = (LLPanelPlace*)LLPanel::getPanelByHandle(mPlacePanelHandle);
+
+ if(place_panelp)
+ {
+ place_panelp->setErrorStatus(status, reason);
+ }
+
+}
+
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 @@
+/**
+ * @file lleventpoll.h
+ * @brief LLEvDescription of the LLEventPoll class.
+ *
+ * $LicenseInfo:firstyear=2006&license=internal$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLREMOTEPARCELREQUEST_H
+#define LL_LLREMOTEPARCELREQUEST_H
+
+#include "llhttpclient.h"
+#include "llview.h"
+
+class LLRemoteParcelRequestResponder : public LLHTTPClient::Responder
+{
+public:
+ LLRemoteParcelRequestResponder(LLViewHandle place_panel_handle);
+ //If we get back a normal response, handle it here
+ virtual void result(const LLSD& content);
+ //If we get back an error (not found, etc...), handle it here
+ virtual void error(U32 status, const std::string& reason);
+
+protected:
+ LLViewHandle mPlacePanelHandle;
+};
+
+#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()
if (LLURLSimString::parse())
{
// a startup URL was specified
- agent_location_id = START_LOCATION_ID_TELEHUB;
+ agent_location_id = START_LOCATION_ID_URL;
// doesn't really matter what location_which is, since
// agent_start_look_at will be overwritten when the
@@ -1243,11 +1243,11 @@ BOOL idle_startup()
text = gUserAuthp->getResponse("agent_access");
if(text && (text[0] == 'M'))
{
- gAgent.mAccess = SIM_ACCESS_MATURE;
+ gAgent.setTeen(false);
}
else
{
- gAgent.mAccess = SIM_ACCESS_PG;
+ gAgent.setTeen(true);
}
text = gUserAuthp->getResponse("start_location");
@@ -1505,6 +1505,7 @@ BOOL idle_startup()
LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT );
regionp->setSeedCapability(first_sim_seed_cap);
+ llinfos << "Waiting for seed grant ...." << llendl;
// Set agent's initial region to be the one we just created.
gAgent.setRegion(regionp);
@@ -1523,7 +1524,6 @@ BOOL idle_startup()
//---------------------------------------------------------------------
if(STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
- llinfos << "Waiting for seed grant ...." << llendl;
return do_normal_idle;
}
@@ -1714,30 +1714,36 @@ BOOL idle_startup()
}
#if LL_QUICKTIME_ENABLED // windows only right now but will be ported to mac
- if (gUseQuickTime
- && !gQuickTimeInitialized)
+ if (gUseQuickTime)
{
- // initialize quicktime libraries (fails gracefully if quicktime not installed ($QUICKTIME)
- llinfos << "Initializing QuickTime...." << llendl;
- set_startup_status(0.57f, "Initializing QuickTime...", gAgent.mMOTD.c_str());
- display_startup();
- #if LL_WINDOWS
- // Only necessary/available on Windows.
- if ( InitializeQTML ( 0L ) != noErr )
- {
- // quicktime init failed - turn off media engine support
- LLMediaEngine::getInstance ()->setAvailable ( FALSE );
- llinfos << "...not found - unable to initialize." << llendl;
- set_startup_status(0.57f, "QuickTime not found - unable to initialize.", gAgent.mMOTD.c_str());
- }
- else
- {
- llinfos << ".. initialized successfully." << llendl;
- set_startup_status(0.57f, "QuickTime initialized successfully.", gAgent.mMOTD.c_str());
- };
- #endif
- EnterMovies ();
- gQuickTimeInitialized = true;
+ if(!gQuickTimeInitialized)
+ {
+ // initialize quicktime libraries (fails gracefully if quicktime not installed ($QUICKTIME)
+ llinfos << "Initializing QuickTime...." << llendl;
+ set_startup_status(0.57f, "Initializing QuickTime...", gAgent.mMOTD.c_str());
+ display_startup();
+ #if LL_WINDOWS
+ // Only necessary/available on Windows.
+ if ( InitializeQTML ( 0L ) != noErr )
+ {
+ // quicktime init failed - turn off media engine support
+ LLMediaEngine::getInstance ()->setAvailable ( FALSE );
+ llinfos << "...not found - unable to initialize." << llendl;
+ set_startup_status(0.57f, "QuickTime not found - unable to initialize.", gAgent.mMOTD.c_str());
+ }
+ else
+ {
+ llinfos << ".. initialized successfully." << llendl;
+ set_startup_status(0.57f, "QuickTime initialized successfully.", gAgent.mMOTD.c_str());
+ };
+ #endif
+ EnterMovies ();
+ gQuickTimeInitialized = true;
+ }
+ }
+ else
+ {
+ LLMediaEngine::getInstance()->setAvailable( FALSE );
}
#endif
@@ -2316,6 +2322,7 @@ BOOL idle_startup()
#if 0 // sjb: enable for auto-enabling timer display
gDebugView->mFastTimerView->setVisible(TRUE);
#endif
+
return do_normal_idle;
}
@@ -3623,6 +3630,7 @@ void release_start_screen()
gStartImageGL = NULL;
}
+
// static
void LLStartUp::setStartupState( S32 state )
{
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 @@
#include "llviewercontrol.h"
#include "llfloaterbuycurrency.h"
#include "llfloaterchat.h"
+#include "llfloaterdirectory.h" // to spawn search
#include "llfloaterland.h"
#include "llfloaterregioninfo.h"
#include "llfloaterscriptdebug.h"
@@ -150,53 +151,6 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" );
mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" );
- S32 x = mRect.getWidth() - 2;
- S32 y = 0;
- LLRect r;
- r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
- mSGBandwidth = new LLStatGraph("BandwidthGraph", r);
- mSGBandwidth->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
- mSGBandwidth->setStat(&gViewerStats->mKBitStat);
- LLString text = childGetText("bandwidth_tooltip") + " ";
- LLUIString bandwidth_tooltip = text; // get the text from XML until this widget is XML driven
- mSGBandwidth->setLabel(bandwidth_tooltip.getString().c_str());
- mSGBandwidth->setUnits("kbps");
- mSGBandwidth->setPrecision(0);
- addChild(mSGBandwidth);
- x -= SIM_STAT_WIDTH + 2;
-
- r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
- mSGPacketLoss = new LLStatGraph("PacketLossPercent", r);
- mSGPacketLoss->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
- mSGPacketLoss->setStat(&gViewerStats->mPacketsLostPercentStat);
- text = childGetText("packet_loss_tooltip") + " ";
- LLUIString packet_loss_tooltip = text; // get the text from XML until this widget is XML driven
- mSGPacketLoss->setLabel(packet_loss_tooltip.getString().c_str());
- mSGPacketLoss->setUnits("%");
- mSGPacketLoss->setMin(0.f);
- mSGPacketLoss->setMax(5.f);
- mSGPacketLoss->setThreshold(0, 0.5f);
- mSGPacketLoss->setThreshold(1, 1.f);
- mSGPacketLoss->setThreshold(2, 3.f);
- mSGPacketLoss->setPrecision(1);
- mSGPacketLoss->mPerSec = FALSE;
- addChild(mSGPacketLoss);
-
-}
-
-LLStatusBar::~LLStatusBar()
-{
- delete mBalanceTimer;
- mBalanceTimer = NULL;
-
- delete mHealthTimer;
- mHealthTimer = NULL;
-
- // LLView destructor cleans up children
-}
-
-BOOL LLStatusBar::postBuild()
-{
childSetAction("scriptout", onClickScriptDebug, this);
childSetAction("health", onClickHealth, this);
childSetAction("fly", onClickFly, this);
@@ -207,17 +161,31 @@ BOOL LLStatusBar::postBuild()
childSetAction("restrictpush", onClickPush, this );
childSetAction("status_voice", onClickVoice, this );
+ childSetCommitCallback("search_editor", onCommitSearch, this);
+ childSetAction("search_btn", onClickSearch, this);
+
childSetActionTextbox("ParcelNameText", onClickParcelInfo );
childSetActionTextbox("BalanceText", onClickBalance );
+}
+
+LLStatusBar::~LLStatusBar()
+{
+ delete mBalanceTimer;
+ mBalanceTimer = NULL;
+
+ delete mHealthTimer;
+ mHealthTimer = NULL;
- return TRUE;
+ // LLView destructor cleans up children
}
+//virtual
EWidgetType LLStatusBar::getWidgetType() const
{
return WIDGET_TYPE_STATUS_BAR;
}
+//virtual
LLString LLStatusBar::getWidgetTag() const
{
return LL_STATUS_BAR_TAG;
@@ -245,13 +213,6 @@ void LLStatusBar::draw()
// Per-frame updates of visibility
void LLStatusBar::refresh()
{
- F32 bwtotal = gViewerThrottle.getMaxBandwidth() / 1000.f;
- mSGBandwidth->setMin(0.f);
- mSGBandwidth->setMax(bwtotal*1.25f);
- mSGBandwidth->setThreshold(0, bwtotal*0.75f);
- mSGBandwidth->setThreshold(1, bwtotal);
- mSGBandwidth->setThreshold(2, bwtotal);
-
// *TODO: Localize / translate time
// Get current UTC time, adjusted for the user's clock
@@ -464,6 +425,10 @@ void LLStatusBar::refresh()
pos_y -= pos_y % 2;
}
+ mRegionDetails.mTime = mTextTime->getText();
+ mRegionDetails.mBalance = mBalance;
+ mRegionDetails.mAccesString = (char *)region->getSimAccessString();
+ mRegionDetails.mPing = region->getNetDetailsForLCD();
if (parcel && !parcel->getName().empty())
{
location_name = region->getName()
@@ -471,6 +436,43 @@ void LLStatusBar::refresh()
pos_x, pos_y, pos_z,
region->getSimAccessString(),
parcel->getName().c_str());
+
+ // keep these around for the LCD to use
+ mRegionDetails.mRegionName = region->getName();
+ mRegionDetails.mParcelName = (char *)parcel->getName().c_str();
+ mRegionDetails.mX = pos_x;
+ mRegionDetails.mY = pos_y;
+ mRegionDetails.mZ = pos_z;
+ mRegionDetails.mArea = parcel->getArea();
+ mRegionDetails.mForSale = parcel->getForSale();
+ mRegionDetails.mTraffic = gParcelMgr->getDwelling();
+
+ if (parcel->isPublic())
+ {
+ snprintf(mRegionDetails.mOwner, MAX_STRING, "Public");
+ }
+ else
+ {
+ if (parcel->getIsGroupOwned())
+ {
+ if(!parcel->getGroupID().isNull())
+ {
+ gCacheName->getGroupName(parcel->getGroupID(), mRegionDetails.mOwner);
+ }
+ else
+ {
+ snprintf(mRegionDetails.mOwner, MAX_STRING, "Group Owned");
+ }
+ }
+ else
+ {
+ // Figure out the owner's name
+ char owner_first[MAX_STRING]; /*Flawfinder: ignore*/
+ char owner_last[MAX_STRING]; /*Flawfinder: ignore*/
+ gCacheName->getName(parcel->getOwnerID(), owner_first, owner_last);
+ snprintf(mRegionDetails.mOwner, MAX_STRING, "%s %s", owner_first, owner_last); /* Flawfinder: ignore */
+ }
+ }
}
else
{
@@ -478,12 +480,34 @@ void LLStatusBar::refresh()
+ llformat(" %d, %d, %d (%s)",
pos_x, pos_y, pos_z,
region->getSimAccessString());
+ // keep these around for the LCD to use
+ mRegionDetails.mRegionName = region->getName();
+ mRegionDetails.mParcelName = "Unknown";
+
+ mRegionDetails.mX = pos_x;
+ mRegionDetails.mY = pos_y;
+ mRegionDetails.mZ = pos_z;
+ mRegionDetails.mArea = 0;
+ mRegionDetails.mForSale = FALSE;
+ snprintf(mRegionDetails.mOwner, MAX_STRING, "Unknown");
+ mRegionDetails.mTraffic = 0.0f;
}
}
else
{
// no region
location_name = "(Unknown)";
+ // keep these around for the LCD to use
+ mRegionDetails.mRegionName = LLString("Unknown");
+ mRegionDetails.mParcelName = "Unknown";
+ mRegionDetails.mAccesString = "Unknown";
+ mRegionDetails.mX = 0;
+ mRegionDetails.mY = 0;
+ mRegionDetails.mZ = 0;
+ mRegionDetails.mArea = 0;
+ mRegionDetails.mForSale = FALSE;
+ snprintf(mRegionDetails.mOwner, MAX_STRING, "Unknown");
+ mRegionDetails.mTraffic = 0.0f;
}
mTextParcelName->setText(location_name);
@@ -499,9 +523,9 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
{
mTextBalance->setVisible(visible);
mTextTime->setVisible(visible);
- mSGBandwidth->setVisible(visible);
- mSGPacketLoss->setVisible(visible);
childSetVisible("buycurrency", visible);
+ childSetVisible("search_editor", visible);
+ childSetVisible("search_btn", visible);
setBackgroundVisible(visible);
}
@@ -517,8 +541,9 @@ void LLStatusBar::creditBalance(S32 credit)
void LLStatusBar::setBalance(S32 balance)
{
- LLString balance_str;
- gResMgr->getMonetaryString( balance_str, balance );
+ LLString money_str = gResMgr->getMonetaryString( balance );
+ LLString balance_str = "L$";
+ balance_str += money_str;
mTextBalance->setText( balance_str );
if (mBalance && (fabs((F32)(mBalance - balance)) > gSavedSettings.getF32("UISndMoneyChangeThreshold")))
@@ -742,6 +767,21 @@ void LLStatusBar::setupDate()
}
}
+// static
+void LLStatusBar::onCommitSearch(LLUICtrl*, void* data)
+{
+ // committing is the same as clicking "search"
+ onClickSearch(data);
+}
+
+// static
+void LLStatusBar::onClickSearch(void* data)
+{
+ LLStatusBar* self = (LLStatusBar*)data;
+ LLString search_text = self->childGetText("search_editor");
+ LLFloaterDirectory::showFindAll(search_text);
+}
+
BOOL can_afford_transaction(S32 cost)
{
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;
class LLFrameTimer;
class LLStatGraph;
+// used by LCD screen
+class cLLRegionDetails
+{
+public:
+ LLString mRegionName;
+ char *mParcelName;
+ char *mAccesString;
+ S32 mX;
+ S32 mY;
+ S32 mZ;
+ S32 mArea;
+ BOOL mForSale;
+ char mOwner[MAX_STRING];
+ F32 mTraffic;
+ S32 mBalance;
+ LLString mTime;
+ U32 mPing;
+};
+
class LLStatusBar
: public LLPanel
{
public:
LLStatusBar(const std::string& name, const LLRect& rect );
- ~LLStatusBar();
- virtual BOOL postBuild();
+ /*virtual*/ ~LLStatusBar();
- virtual EWidgetType getWidgetType() const;
- virtual LLString getWidgetTag() const;
+ /*virtual*/ EWidgetType getWidgetType() const;
+ /*virtual*/ LLString getWidgetTag() const;
- // OVERRIDES
- virtual void draw();
+ /*virtual*/ void draw();
// MANIPULATORS
void setBalance(S32 balance);
@@ -83,21 +100,22 @@ public:
S32 getSquareMetersCredit() const;
S32 getSquareMetersCommitted() const;
S32 getSquareMetersLeft() const;
+ cLLRegionDetails mRegionDetails;
-protected:
+private:
// simple method to setup the part that holds the date
void setupDate();
-protected:
+ static void onCommitSearch(LLUICtrl*, void* data);
+ static void onClickSearch(void* data);
+
+private:
LLTextBox *mTextBalance;
LLTextBox *mTextHealth;
LLTextBox *mTextTime;
LLTextBox* mTextParcelName;
- LLStatGraph *mSGBandwidth;
- LLStatGraph *mSGPacketLoss;
-
LLButton *mBtnBuyCurrency;
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)
{
if (object->isAvatar())
{
- LLFloaterAvatarInfo::showFromAvatar(object);
+ LLFloaterAvatarInfo::showFromAvatar(object->getID());
}
else
{
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 @@
// viewer includes
#include "llagent.h" // teleportViaLocation()
#include "llcommandhandler.h"
-// *FIX: code in merge sl-search-8
-//#include "llfloaterurldisplay.h"
+#include "llfloaterurldisplay.h"
#include "llfloaterdirectory.h"
#include "llfloaterhtmlhelp.h"
-#include "llfloaterworldmap.h"
+//#include "llfloaterworldmap.h"
#include "llpanellogin.h"
#include "llstartup.h" // gStartupState
#include "llurlsimstring.h"
@@ -88,11 +87,10 @@ private:
// handles secondlife://Ahern/123/45/67/
// Returns true if handled.
-// *FIX: code in merge sl-search-8
-// static void regionHandleCallback(U64 handle, const std::string& url,
-// const LLUUID& snapshot_id, bool teleport);
-// // Called by LLWorldMap when a region name has been resolved to a
-// // location in-world, used by places-panel display.
+ static void regionHandleCallback(U64 handle, const std::string& url,
+ const LLUUID& snapshot_id, bool teleport);
+ // Called by LLWorldMap when a region name has been resolved to a
+ // location in-world, used by places-panel display.
static bool matchPrefix(const std::string& url, const std::string& prefix);
@@ -151,7 +149,9 @@ bool LLURLDispatcherImpl::dispatchHelp(const std::string& url, BOOL right_mouse)
{
if (matchPrefix(url, SLURL_SL_HELP_PREFIX))
{
+#if LL_LIBXUL_ENABLED
gViewerHtmlHelp.show();
+#endif // LL_LIBXUL_ENABLED
return true;
}
return false;
@@ -228,13 +228,52 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, BOOL right_mous
S32 y = 128;
S32 z = 0;
LLURLSimString::parse(sim_string, ®ion_name, &x, &y, &z);
- if (gFloaterWorldMap)
+
+ LLFloaterURLDisplay* url_displayp = LLFloaterURLDisplay::getInstance(LLSD());
+ url_displayp->setName(region_name);
+
+ // Request a region handle by name
+ gWorldMap->sendNamedRegionRequest(region_name,
+ LLURLDispatcherImpl::regionHandleCallback,
+ url,
+ false); // don't teleport
+ return true;
+}
+
+/*static*/
+void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)
+{
+ std::string sim_string = stripProtocol(url);
+ std::string region_name;
+ S32 x = 128;
+ S32 y = 128;
+ S32 z = 0;
+ LLURLSimString::parse(sim_string, ®ion_name, &x, &y, &z);
+
+ LLVector3 local_pos;
+ local_pos.mV[VX] = (F32)x;
+ local_pos.mV[VY] = (F32)y;
+ local_pos.mV[VZ] = (F32)z;
+
+ if (teleport)
{
- llinfos << "Opening map to " << region_name << llendl;
- gFloaterWorldMap->trackURL( region_name.c_str(), x, y, z );
- LLFloaterWorldMap::show(NULL, TRUE);
+ LLVector3d global_pos = from_region_handle(region_handle);
+ global_pos += LLVector3d(local_pos);
+ gAgent.teleportViaLocation(global_pos);
+ }
+ else
+ {
+ // display informational floater, allow user to click teleport btn
+ LLFloaterURLDisplay* url_displayp = LLFloaterURLDisplay::getInstance(LLSD());
+
+ url_displayp->displayParcelInfo(region_handle, local_pos);
+ if(snapshot_id.notNull())
+ {
+ url_displayp->setSnapshotDisplay(snapshot_id);
+ }
+ std::string locationString = llformat("%s %d, %d, %d", region_name.c_str(), x, y, z);
+ url_displayp->setLocationString(locationString);
}
- return true;
}
// static
@@ -268,38 +307,36 @@ std::string LLURLDispatcherImpl::stripProtocol(const std::string& url)
return stripped;
}
-// *FIX: code in merge sl-search-8
-//
-////---------------------------------------------------------------------------
-//// Teleportation links are handled here because they are tightly coupled
-//// to URL parsing and sim-fragment parsing
-//class LLTeleportHandler : public LLCommandHandler
-//{
-//public:
-// LLTeleportHandler() : LLCommandHandler("teleport") { }
-// bool handle(const std::vector& tokens)
-// {
-// // construct a "normal" SLURL, resolve the region to
-// // a global position, and teleport to it
-// if (tokens.size() < 1) return false;
-//
-// // Region names may be %20 escaped.
-// std::string region_name = LLURLSimString::unescapeRegionName(tokens[0]);
-//
-// // build secondlife://De%20Haro/123/45/67 for use in callback
-// std::string url = SLURL_SECONDLIFE_PREFIX;
-// for (size_t i = 0; i < tokens.size(); ++i)
-// {
-// url += tokens[i] + "/";
-// }
-// gWorldMap->sendNamedRegionRequest(region_name,
-// LLURLDispatcherImpl::regionHandleCallback,
-// url,
-// true); // teleport
-// return true;
-// }
-//};
-//LLTeleportHandler gTeleportHandler;
+//---------------------------------------------------------------------------
+// Teleportation links are handled here because they are tightly coupled
+// to URL parsing and sim-fragment parsing
+class LLTeleportHandler : public LLCommandHandler
+{
+public:
+ LLTeleportHandler() : LLCommandHandler("teleport") { }
+ bool handle(const std::vector& tokens)
+ {
+ // construct a "normal" SLURL, resolve the region to
+ // a global position, and teleport to it
+ if (tokens.size() < 1) return false;
+
+ // Region names may be %20 escaped.
+ std::string region_name = LLURLSimString::unescapeRegionName(tokens[0]);
+
+ // build secondlife://De%20Haro/123/45/67 for use in callback
+ std::string url = SLURL_SECONDLIFE_PREFIX;
+ for (size_t i = 0; i < tokens.size(); ++i)
+ {
+ url += tokens[i] + "/";
+ }
+ gWorldMap->sendNamedRegionRequest(region_name,
+ LLURLDispatcherImpl::regionHandleCallback,
+ url,
+ true); // teleport
+ return true;
+ }
+};
+LLTeleportHandler gTeleportHandler;
//---------------------------------------------------------------------------
@@ -325,4 +362,3 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& url)
{
return LLURLDispatcherImpl::dispatchRightClick(url);
}
-
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)
LLImageGL::updateStats(gFrameTimeSeconds);
LLVOAvatar::sRenderName = gSavedSettings.getS32("RenderName");
+ LLVOAvatar::sRenderGroupTitles = gSavedSettings.getBOOL("RenderGroupTitleAll");
gPipeline.mBackfaceCull = TRUE;
gFrameCount++;
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()
doPreloadImages();
}
+
void LLViewerImageList::doPreloadImages()
{
llinfos << "Preloading images..." << llendl;
@@ -313,6 +314,9 @@ void LLViewerImageList::doPreloadImages()
preloadImage("icn_voice_ptt-on-lvl1.tga", LLUUID::null, FALSE);
preloadImage("icn_voice_ptt-on-lvl2.tga", LLUUID::null, FALSE);
preloadImage("icn_voice_ptt-on-lvl3.tga", LLUUID::null, FALSE);
+ preloadImage("lag_status_good.tga", LLUUID::null, FALSE);
+ preloadImage("lag_status_warning.tga", LLUUID::null, FALSE);
+ preloadImage("lag_status_critical.tga", LLUUID::null, FALSE);
}
static 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 @@
#include "llinventoryview.h"
#include "llkeyboard.h"
#include "llpanellogin.h"
+#include "llfloaterlandmark.h"
#include "llmenucommands.h"
#include "llmenugl.h"
#include "llmorphview.h"
@@ -196,6 +197,9 @@
#include "lltexlayer.h"
+void init_landmark_menu(LLMenuGL* menu);
+void clear_landmark_menu(LLMenuGL* menu);
+
void init_client_menu(LLMenuGL* menu);
void init_server_menu(LLMenuGL* menu);
@@ -244,6 +248,7 @@ LLPieMenu *gPieAttachment = NULL;
LLPieMenu *gPieLand = NULL;
// local constants
+const LLString LANDMARK_MENU_NAME("Landmarks");
const LLString CLIENT_MENU_NAME("Client");
const LLString SERVER_MENU_NAME("Server");
@@ -273,6 +278,7 @@ LLPieMenu* gDetachPieMenu = NULL;
LLPieMenu* gDetachScreenPieMenu = NULL;
LLPieMenu* gDetachBodyPartPieMenus[8];
+LLMenuGL* gLandmarkMenu = NULL;
LLMenuItemCallGL* gAFKMenu = NULL;
LLMenuItemCallGL* gBusyMenu = NULL;
@@ -334,6 +340,9 @@ void handle_audio_status_2(void*);
void handle_audio_status_3(void*);
void handle_audio_status_4(void*);
#endif
+void manage_landmarks(void*);
+void create_new_landmark(void*);
+void landmark_menu_action(void*);
void reload_ui(void*);
void handle_agent_stop_moving(void*);
void print_packets_lost(void*);
@@ -362,6 +371,7 @@ void toggle_show_xui_names(void *);
BOOL check_show_xui_names(void *);
// Debug UI
+void handle_web_search_demo(void*);
void handle_slurl_test(void*);
void handle_save_to_xml(void*);
void handle_load_from_xml(void*);
@@ -483,6 +493,54 @@ BOOL enable_have_card(void*);
BOOL enable_detach(void*);
BOOL enable_region_owner(void*);
+class LLLandmarkObserver : public LLInventoryObserver
+{
+public:
+ LLLandmarkObserver();
+ virtual ~LLLandmarkObserver();
+
+ virtual void changed(U32 mask)
+ {
+ // JAMESDEBUG disabled for now - slows down client or causes crashes
+ // in inventory code.
+ //
+ // Also, this may not be faster than just rebuilding the menu each time.
+ // I believe gInventory.getObject() is not fast.
+ //
+ //const std::set& changed_ids = gInventory.getChangedIDs();
+ //std::set::const_iterator id_it;
+ //BOOL need_to_rebuild_menu = FALSE;
+ //for(id_it = changed_ids.begin(); id_it != changed_ids.end(); ++id_it)
+ //{
+ // LLInventoryObject* objectp = gInventory.getObject(*id_it);
+ // if (objectp && (objectp->getType() == LLAssetType::AT_LANDMARK || objectp->getType() == LLAssetType::AT_CATEGORY))
+ // {
+ // need_to_rebuild_menu = TRUE;
+ // }
+ //}
+ //if (need_to_rebuild_menu)
+ //{
+ // init_landmark_menu(gLandmarkMenu);
+ //}
+ }
+};
+
+// For debugging only, I think the inventory observer doesn't get
+// called if the inventory is loaded from cache.
+void build_landmark_menu(void*)
+{
+ init_landmark_menu(gLandmarkMenu);
+}
+
+LLLandmarkObserver::LLLandmarkObserver()
+{
+ gInventory.addObserver(this);
+}
+
+LLLandmarkObserver::~LLLandmarkObserver()
+{
+ gInventory.removeObserver(this);
+}
class LLMenuParcelObserver : public LLParcelObserver
{
@@ -493,6 +551,7 @@ public:
};
static LLMenuParcelObserver* gMenuParcelObserver = NULL;
+static LLLandmarkObserver* gLandmarkObserver = NULL;
LLMenuParcelObserver::LLMenuParcelObserver()
{
@@ -584,7 +643,7 @@ void init_menus()
gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true);
gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true);
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
@@ -648,7 +707,7 @@ void init_menus()
gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE);
gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE);
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
+ if (gAgent.isTeen())
{
gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
@@ -656,6 +715,18 @@ void init_menus()
// TomY TODO convert these two
LLMenuGL*menu;
+
+ // JAMESDEBUG - Maybe we don't want a global landmark menu
+ /*
+ menu = new LLMenuGL(LANDMARK_MENU_NAME);
+ // Defer init_landmark_menu() until inventory observer reports that we actually
+ // have inventory. Otherwise findCategoryByUUID() will create an empty
+ // Landmarks folder in inventory. JC
+ gMenuBarView->appendMenu( menu );
+ menu->updateParent(LLMenuGL::sMenuContainer);
+ gLandmarkMenu = menu;
+ */
+
menu = new LLMenuGL(CLIENT_MENU_NAME);
init_client_menu(menu);
gMenuBarView->appendMenu( menu );
@@ -671,12 +742,74 @@ void init_menus()
// Let land based option enable when parcel changes
gMenuParcelObserver = new LLMenuParcelObserver();
+ // Let landmarks menu update when landmarks are added/removed
+ gLandmarkObserver = new LLLandmarkObserver();
+
//
// Debug menu visiblity
//
show_debug_menus();
}
+void init_landmark_menu(LLMenuGL* menu)
+{
+ if (!menu) return;
+
+ // clear existing menu, as we might be rebuilding as result of inventory update
+ clear_landmark_menu(menu);
+
+ menu->append(new LLMenuItemCallGL("Organize Landmarks",
+ &manage_landmarks, NULL));
+ menu->append(new LLMenuItemCallGL("New Landmark...",
+ &create_new_landmark, NULL));
+ menu->appendSeparator();
+
+ // now collect all landmarks in inventory and build menu...
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK), cats, items);
+ if(items)
+ {
+ S32 count = items->count();
+ for(S32 i = 0; i < count; ++i)
+ {
+ LLInventoryItem* item = items->get(i);
+ LLString landmark_name = item->getName();
+ LLUUID* landmark_id_ptr = new LLUUID( item->getUUID() );
+ LLMenuItemCallGL* menu_item =
+ new LLMenuItemCallGL(landmark_name, landmark_menu_action,
+ NULL, NULL, landmark_id_ptr);
+ menu->append(menu_item);
+ }
+ }
+}
+
+void clear_landmark_menu(LLMenuGL* menu)
+{
+ if (!menu) return;
+
+ // We store the UUIDs of the landmark inventory items in the userdata
+ // field of the menus. Therefore when we clean up the menu we need to
+ // delete that data.
+ const LLView::child_list_t* child_list = menu->getChildList();
+ LLView::child_list_const_iter_t it = child_list->begin();
+ for ( ; it != child_list->end(); ++it)
+ {
+ LLView* view = *it;
+ if (view->getWidgetType() == WIDGET_TYPE_MENU_ITEM_CALL)
+ {
+ LLMenuItemCallGL* menu_item = (LLMenuItemCallGL*)view;
+ if (menu_item->getMenuCallback() == landmark_menu_action)
+ {
+ void* user_data = menu_item->getUserData();
+ delete (LLUUID*)user_data;
+ }
+ }
+ }
+
+ menu->empty();
+}
+
void init_client_menu(LLMenuGL* menu)
{
LLMenuGL* sub_menu = NULL;
@@ -1010,7 +1143,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->append(new LLMenuItemCallGL( "Dump VolumeMgr", &dump_volume_mgr, NULL, NULL));
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
- menu->append(new LLMenuItemCallGL( "Print Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
+ menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
menu_toggle_control, NULL, menu_check_control,
(void*)"DoubleClickAutoPilot"));
@@ -1456,9 +1589,14 @@ static std::vector > sMenus;
//-----------------------------------------------------------------------------
void cleanup_menus()
{
+ clear_landmark_menu(gLandmarkMenu);
+
delete gMenuParcelObserver;
gMenuParcelObserver = NULL;
+ delete gLandmarkObserver;
+ gLandmarkObserver = NULL;
+
delete gPieSelf;
gPieSelf = NULL;
@@ -2860,6 +2998,60 @@ void handle_audio_status_4(void*)
}
#endif
+void manage_landmarks(void*)
+{
+ LLFloaterLandmark::showInstance(1);
+}
+
+void create_new_landmark(void*)
+{
+ // Note this is temporary cut and paste of legacy functionality.
+ // TODO: Make this spawn a floater allowing user customize before creating the inventory object
+
+ LLViewerRegion* agent_region = gAgent.getRegion();
+ if(!agent_region)
+ {
+ llwarns << "No agent region" << llendl;
+ return;
+ }
+ LLParcel* agent_parcel = gParcelMgr->getAgentParcel();
+ if (!agent_parcel)
+ {
+ llwarns << "No agent parcel" << llendl;
+ return;
+ }
+ if (!agent_parcel->getAllowLandmark()
+ && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK))
+ {
+ gViewerWindow->alertXml("CannotCreateLandmarkNotOwner");
+ return;
+ }
+
+ LLUUID folder_id;
+ folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+ std::string pos_string;
+ gAgent.buildLocationString(pos_string);
+
+ create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
+ folder_id, LLTransactionID::tnull,
+ pos_string, pos_string, // name, desc
+ LLAssetType::AT_LANDMARK,
+ LLInventoryType::IT_LANDMARK,
+ NOT_WEARABLE, PERM_ALL,
+ NULL);
+}
+
+void landmark_menu_action(void* userdata)
+{
+ LLUUID item_id = *(LLUUID*)userdata;
+
+ LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
+ if (itemp)
+ {
+ open_landmark(itemp, itemp->getName(), FALSE);
+ }
+}
+
void reload_ui(void *)
{
gUICtrlFactory->rebuild();
@@ -5160,7 +5352,7 @@ class LLShowFloater : public view_listener_t
else if (floater_name == "help f1")
{
#if LL_LIBXUL_ENABLED
- gViewerHtmlHelp.show();
+ gViewerHtmlHelp.show( gSavedSettings.getString("HelpHomeURL") );
#endif
}
else if (floater_name == "help in-world")
@@ -5363,7 +5555,7 @@ class LLShowAgentProfile : public view_listener_t
LLVOAvatar* avatar = find_avatar_from_object(agent_id);
if (avatar)
{
- LLFloaterAvatarInfo::showFromAvatar(avatar);
+ LLFloaterAvatarInfo::show(agent_id);
}
return true;
}
@@ -6080,18 +6272,11 @@ void handle_test_female(void*)
void handle_toggle_pg(void*)
{
- if (gAgent.mAccess < SIM_ACCESS_MATURE)
- {
- gAgent.mAccess = SIM_ACCESS_MATURE;
- }
- else
- {
- gAgent.mAccess = SIM_ACCESS_PG;
- }
+ gAgent.setTeen( !gAgent.isTeen() );
LLFloaterWorldMap::reloadIcons(NULL);
- llinfos << "Access set to " << (S32)gAgent.mAccess << llendl;
+ llinfos << "PG status set to " << (S32)gAgent.isTeen() << llendl;
}
void 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 @@
#include "llfirstuse.h"
#include "llfloaterbuyland.h"
#include "llfloatergroups.h"
-#include "llfloaterhtml.h"
+//#include "llfloaterhtml.h"
#include "llfloatersellland.h"
#include "llfloatertools.h"
#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:
F32 getSelectionHeight() const { return F32(mEastNorth.mdV[VY] - mWestSouth.mdV[VY]); }
BOOL getSelection(LLVector3d &min, LLVector3d &max) { min = mWestSouth; max = mEastNorth; return !selectionEmpty();}
LLViewerRegion* getSelectionRegion();
+ F32 getDwelling() const { return mSelectedDwell;}
void getDisplayInfo(S32* area, S32* claim, S32* rent, BOOL* for_sale, F32* dwell);
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()
mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
}
-// ---------------- Friends ----------------
+U32 LLViewerRegion::getNetDetailsForLCD()
+{
+ return mPingDelay;
+}
std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion)
{
@@ -868,7 +871,7 @@ public:
for(int i=0;
locs_it != locs.endArray();
- i++, locs_it++, agents_it++)
+ i++, locs_it++)
{
U8
x = locs_it->get("X").asInteger(),
@@ -901,6 +904,10 @@ public:
avatar_ids->put(agent_id);
}
}
+ if (has_agent_data)
+ {
+ agents_it++;
+ }
}
}
};
@@ -1342,30 +1349,35 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
setCapability("Seed", url);
LLSD capabilityNames = LLSD::emptyArray();
+ capabilityNames.append("ChatSessionRequest");
+ capabilityNames.append("CopyInventoryFromNotecard");
+ capabilityNames.append("DispatchRegionInfo");
+ capabilityNames.append("EventQueueGet");
capabilityNames.append("MapLayer");
capabilityNames.append("MapLayerGod");
capabilityNames.append("NewFileAgentInventory");
- capabilityNames.append("EventQueueGet");
+ capabilityNames.append("ParcelGodReserveForNewbie");
+ capabilityNames.append("ParcelVoiceInfoRequest");
+ capabilityNames.append("ProvisionVoiceAccountRequest");
+ capabilityNames.append("RemoteParcelRequest");
+ capabilityNames.append("RequestTextureDownload");
+ capabilityNames.append("SearchStatRequest");
+ capabilityNames.append("SearchStatTracking");
+ capabilityNames.append("SendPostcard");
+ capabilityNames.append("SendUserReport");
+ capabilityNames.append("SendUserReportWithScreenshot");
+ capabilityNames.append("ServerReleaseNotes");
capabilityNames.append("UpdateGestureAgentInventory");
capabilityNames.append("UpdateNotecardAgentInventory");
capabilityNames.append("UpdateScriptAgentInventory");
capabilityNames.append("UpdateGestureTaskInventory");
capabilityNames.append("UpdateNotecardTaskInventory");
capabilityNames.append("UpdateScriptTaskInventory");
- capabilityNames.append("SendPostcard");
capabilityNames.append("ViewerStartAuction");
- capabilityNames.append("ParcelGodReserveForNewbie");
- capabilityNames.append("SendUserReport");
- capabilityNames.append("SendUserReportWithScreenshot");
- capabilityNames.append("RequestTextureDownload");
capabilityNames.append("UntrustedSimulatorMessage");
- capabilityNames.append("ParcelVoiceInfoRequest");
- capabilityNames.append("ChatSessionRequest");
capabilityNames.append("ViewerStats");
- capabilityNames.append("ProvisionVoiceAccountRequest");
- capabilityNames.append("ServerReleaseNotes");
- capabilityNames.append("CopyInventoryFromNotecard");
- capabilityNames.append("DispatchRegionInfo");
+ // Please add new capabilities alphabetically to reduce
+ // merge conflicts.
llinfos << "posting to seed " << url << llendl;
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:
friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion);
+ // used by LCD to get details for debug screen
+ U32 getNetDetailsForLCD();
+
public:
struct CompareDistance
{
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] =
// ST_TEX_BAKES
StatAttributes("Texture Bakes", FALSE, FALSE),
// ST_TEX_REBAKES
- StatAttributes("Texture Rebakes", FALSE, FALSE)
+ StatAttributes("Texture Rebakes", FALSE, FALSE),
+
+ // ST_LOGITECH_KEYBOARD
+ StatAttributes("Logitech LCD", FALSE, FALSE)
+
};
LLViewerStats::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:
ST_WINDOW_HEIGHT = 55,
ST_TEX_BAKES = 56,
ST_TEX_REBAKES = 57,
+ ST_LOGITECH_LCD = 58,
- ST_COUNT = 58
+ ST_COUNT = 59
};
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 @@
#include "llviewerimagelist.h"
#include "llviewerwindow.h"
#include "llviewerinventory.h"
+#include "llvieweruictrlfactory.h"
#include "llnotecard.h"
#include "llmemorystream.h"
+#include "llmenugl.h"
extern BOOL gPacificDaylightTime;
@@ -567,6 +569,18 @@ LLViewerTextEditor::LLViewerTextEditor(const LLString& name,
{
mEmbeddedItemList = new LLEmbeddedItems(this);
mInventoryCallback->setEditor(this);
+
+ // Build the right click menu
+ // make the popup menu available
+
+ LLMenuGL* menu = gUICtrlFactory->buildMenu("menu_slurl.xml", this);
+ if (!menu)
+ {
+ menu = new LLMenuGL("");
+ }
+ menu->setBackgroundColor(gColors.getColor("MenuPopupBgColor"));
+ // menu->setVisible(FALSE);
+ mPopupMenuHandle = menu->mViewHandle;
}
LLViewerTextEditor::~LLViewerTextEditor()
@@ -732,6 +746,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
}
// assume we're starting a drag select
mIsSelecting = TRUE;
+
}
else
{
@@ -941,6 +956,42 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
return handled;
}
+BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+
+
+ BOOL handled = childrenHandleRightMouseDown(x, y, mask) != NULL;
+
+ if(! handled)
+ {
+ LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
+ if( cur_segment )
+ {
+ if(cur_segment->getStyle().isLink())
+ {
+ handled = TRUE;
+ mHTML = cur_segment->getStyle().getLinkHREF();
+ }
+ }
+ }
+ LLMenuGL* menu = (LLMenuGL*)LLView::getViewByHandle(mPopupMenuHandle);
+ if(handled && menu && mParseHTML && mHTML.length() > 0)
+ {
+ menu->setVisible(TRUE);
+ menu->arrange();
+ menu->updateParent(LLMenuGL::sMenuContainer);
+ LLMenuGL::showPopup(this, menu, x, y);
+ mHTML = "";
+ }
+ else
+ {
+ if(menu && menu->getVisible())
+ {
+ menu->setVisible(FALSE);
+ }
+ }
+ return handled;
+}
BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
{
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:
// mousehandler overrides
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask );
@@ -128,6 +129,8 @@ protected:
LLUUID mNotecardInventoryID;
LLPointer mInventoryCallback;
+
+ LLViewHandle mPopupMenuHandle;
};
#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 @@
#include "llviewerprecompiledheaders.h"
#include "llviewerwindow.h"
+
+// system library includes
+#include
+#include
+#include
+
#include "llviewquery.h"
#include "llxmltree.h"
-#include "llviewercamera.h"
+//#include "llviewercamera.h"
//#include "imdebug.h"
#include "llvoiceclient.h" // for push-to-talk button handling
@@ -1823,6 +1829,8 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window)
adjust_rect_top_left("FloaterGestureRect", window);
adjust_rect_top_right("FloaterMapRect", window);
+
+ adjust_rect_top_right("FloaterLagMeter", window);
adjust_rect_top_right("FloaterLagMeter", window);
@@ -2925,6 +2933,10 @@ BOOL LLViewerWindow::handlePerFrameHover()
{
gFloaterTools->setVisible(FALSE);
}
+ // In the future we may wish to hide the tools menu unless you
+ // are building. JC
+ //gMenuBarView->setItemVisible("Tools", gFloaterTools->getVisible());
+ //gMenuBarView->arrange();
}
if (gToolBar)
{
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] =
};
S32 LLVOAvatar::sRenderName = RENDER_NAME_ALWAYS;
+BOOL LLVOAvatar::sRenderGroupTitles = TRUE;
S32 LLVOAvatar::sNumVisibleChatBubbles = 0;
BOOL LLVOAvatar::sDebugInvisible = FALSE;
BOOL LLVOAvatar::sShowAttachmentPoints = FALSE;
@@ -2704,7 +2705,15 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|| is_appearance != mNameAppearance)
{
char line[MAX_STRING]; /* Flawfinder: ignore */
- if (title && title->getString() && title->getString()[0] != '\0')
+ if (!sRenderGroupTitles)
+ {
+ // If all group titles are turned off, stack first name
+ // on a line above last name
+ strncpy(line, firstname->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */
+ line[MAX_STRING -1] = '\0';
+ strcat(line, "\n");
+ }
+ else if (title && title->getString() && title->getString()[0] != '\0')
{
strncpy(line, title->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */
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:
static LLUUID sStepSoundOnLand;
static S32 sRenderName;
+ static BOOL sRenderGroupTitles;
static S32 sNumVisibleChatBubbles;
static BOOL sDebugInvisible;
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
{
switch(mVivoxErrorStatusCode)
{
- case 20713: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_FULL; break;
- case 20714: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_LOCKED; break;
+ case 20713: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_FULL; break;
+ case 20714: status = LLVoiceClientStatusObserver::ERROR_CHANNEL_LOCKED; break;
+ case 20715: status = LLVoiceClientStatusObserver::ERROR_NOT_AVAILABLE;
+ break;
}
// 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 @@
#include "llwindow.h"
-#include "llfloaterhtml.h"
+//#include "llfloaterhtml.h"
#include "llviewercontrol.h"
// 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 @@
#if LL_LIBXUL_ENABLED
#include "llwebbrowserctrl.h"
-#include "llviewborder.h"
-#include "llviewerwindow.h"
+
+// viewer includes
#include "llfloaterworldmap.h"
#include "llurldispatcher.h"
-#include "llfocusmgr.h"
+#include "llviewborder.h"
+#include "llviewerwindow.h"
+#include "llfloaterhtml.h"
#include "llweb.h"
#include "viewer.h"
-#include "llpanellogin.h"
+
+// linden library includes
+#include "llfocusmgr.h"
// Setting the mozilla buffer width to 2048 exactly doesn't work, since it pads its rowbytes a bit, pushing the texture width over 2048.
// 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
mBorder(NULL),
mFrequentUpdates( true ),
mOpenLinksInExternalBrowser( false ),
- mOpenSecondLifeLinksInMap( true ),
+ mOpenLinksInInternalBrowser( false ),
+ mOpenSLURLsInMap( true ),
+ mOpenSLURLsViaTeleport( false ),
mHomePageUrl( "" ),
mIgnoreUIScale( true ),
mAlwaysRefresh( false )
@@ -132,17 +138,31 @@ void LLWebBrowserCtrl::setBorderVisible( BOOL border_visible )
};
////////////////////////////////////////////////////////////////////////////////
-// allows access to the raw web browser window by consumers of this class
+// set flag that forces the embedded browser to open links in the external system browser
void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn )
{
mOpenLinksInExternalBrowser = valIn;
};
////////////////////////////////////////////////////////////////////////////////
+// set flag that forces the embedded browser to open links in the internal browser floater
+void LLWebBrowserCtrl::setOpenInInternalBrowser( bool valIn )
+{
+ mOpenLinksInInternalBrowser = valIn;
+};
+
+////////////////////////////////////////////////////////////////////////////////
// open secondlife:// links in map automatically or not
-void LLWebBrowserCtrl::setOpenSecondLifeLinksInMap( bool valIn )
+void LLWebBrowserCtrl::setOpenSLURLsInMap( bool valIn )
{
- mOpenSecondLifeLinksInMap = valIn;
+ mOpenSLURLsInMap = valIn;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// teleport directly to secondlife:// links
+void LLWebBrowserCtrl::setOpenSLURLsViaTeleport( bool valIn )
+{
+ mOpenSLURLsViaTeleport = valIn;
};
////////////////////////////////////////////////////////////////////////////////
@@ -345,6 +365,7 @@ bool LLWebBrowserCtrl::canNavigateForward()
void LLWebBrowserCtrl::navigateTo( std::string urlIn )
{
const std::string protocol( "secondlife://" );
+ const std::string protocol2( "sl://" );
// don't browse to anything that starts with secondlife://
if ( urlIn.length() >= protocol.length() )
@@ -354,6 +375,13 @@ void LLWebBrowserCtrl::navigateTo( std::string urlIn )
LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
}
}
+ else if ( urlIn.length() >= protocol2.length() )
+ {
+ if ( LLString::compareInsensitive( urlIn.substr( 0, protocol2.length() ).c_str(), protocol2.c_str() ) != 0 )
+ {
+ LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
+ }
+ }
else
{
LLMozLib::getInstance()->navigateTo( mEmbeddedBrowserWindowId, urlIn );
@@ -512,9 +540,26 @@ void LLWebBrowserCtrl::onClickLinkHref( const EventType& eventIn )
const std::string protocol( "http://" );
if( mOpenLinksInExternalBrowser )
+ {
if ( eventIn.getStringValue().length() )
+ {
if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
+ {
LLWeb::loadURL( eventIn.getStringValue() );
+ };
+ };
+ }
+ else
+ if( mOpenLinksInInternalBrowser )
+ {
+ if ( eventIn.getStringValue().length() )
+ {
+ if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
+ {
+ LLFloaterHtml::getInstance()->show( eventIn.getStringValue(), "Second Life Browser");
+ };
+ };
+ };
// chain this event on to observers of an instance of LLWebBrowserCtrl
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 :
bool canNavigateBack();
bool canNavigateForward();
void setOpenInExternalBrowser( bool valIn );
- void setOpenSecondLifeLinksInMap( bool valIn );
+ void setOpenInInternalBrowser( bool valIn );
+ void setOpenSLURLsInMap( bool valIn );
+ void setOpenSLURLsViaTeleport( bool valIn );
void setHomePageUrl( const std::string urlIn );
std::string getHomePageUrl();
@@ -240,7 +242,9 @@ class LLWebBrowserCtrl :
LLViewBorder* mBorder;
bool mFrequentUpdates;
bool mOpenLinksInExternalBrowser;
- bool mOpenSecondLifeLinksInMap;
+ bool mOpenLinksInInternalBrowser;
+ bool mOpenSLURLsInMap;
+ bool mOpenSLURLsViaTeleport;
std::string mHomePageUrl;
bool mIgnoreUIScale;
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() :
mNeighborMap(NULL),
mTelehubCoverageMap(NULL),
mNeighborMapWidth(0),
- mNeighborMapHeight(0)
+ mNeighborMapHeight(0),
+ mSLURLRegionName(),
+ mSLURL(),
+ mSLURLCallback(0),
+ mSLURLTeleport(false)
{
for (S32 map=0; mapaddStringFast(_PREHASH_Name, region_name);
gAgent.sendReliableMessage();
}
+// public
+void LLWorldMap::sendNamedRegionRequest(std::string region_name,
+ url_callback_t callback,
+ const std::string& callback_url,
+ bool teleport) // immediately teleport when result returned
+{
+ mSLURLRegionName = region_name;
+ mSLURL = callback_url;
+ mSLURLCallback = callback;
+ mSLURLTeleport = teleport;
+
+ sendNamedRegionRequest(region_name);
+}
// public
void 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**)
U32 x_meters = x_regions * REGION_WIDTH_UNITS;
U32 y_meters = y_regions * REGION_WIDTH_UNITS;
+ U64 handle = to_region_handle(x_meters, y_meters);
+
if (access == 255)
{
// This region doesn't exist
@@ -547,13 +566,23 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
found_null_sim = true;
}
+ else if(gWorldMap->mSLURLCallback != NULL)
+ {
+ // Server returns definitive capitalization, SLURL might
+ // not have that.
+ if (!stricmp(gWorldMap->mSLURLRegionName.c_str(), name))
+ {
+ gWorldMap->mSLURLCallback(handle, gWorldMap->mSLURL, image_id, gWorldMap->mSLURLTeleport);
+ gWorldMap->mSLURLCallback = NULL;
+ gWorldMap->mSLURLRegionName.clear();
+ }
+ }
else
{
adjust = gWorldMap->extendAABB(x_meters,
y_meters,
x_meters+REGION_WIDTH_UNITS,
y_meters+REGION_WIDTH_UNITS) || adjust;
- U64 handle = to_region_handle(x_meters, y_meters);
// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
@@ -614,6 +643,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
}
}
}
+
if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
gFloaterWorldMap->updateSims(found_null_sim);
}
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
class LLWorldMap
{
public:
+ typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
+
LLWorldMap();
~LLWorldMap();
@@ -147,6 +149,10 @@ public:
void sendMapLayerRequest();
void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
void sendNamedRegionRequest(std::string region_name);
+ void sendNamedRegionRequest(std::string region_name,
+ url_callback_t callback,
+ const std::string& callback_url,
+ bool teleport);
void sendItemRequest(U32 type, U64 handle = 0);
static void processMapLayerReply(LLMessageSystem*, void**);
@@ -208,6 +214,12 @@ public:
private:
LLTimer mRequestTimer;
+
+ // search for named region for url processing
+ std::string mSLURLRegionName;
+ std::string mSLURL;
+ url_callback_t mSLURLCallback;
+ bool mSLURLTeleport;
};
extern 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()
}
// If this is mature, and you are not, draw a line across it
- if (info->mAccess != SIM_ACCESS_DOWN && info->mAccess > gAgent.mAccess)
+ if (info->mAccess != SIM_ACCESS_DOWN
+ && info->mAccess > SIM_ACCESS_PG
+ && gAgent.isTeen())
{
glBlendFunc(GL_DST_ALPHA, GL_ZERO);
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 @@
1A97C4560B8BCF9C00331A24 /* llliveappconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A97C4540B8BCF9C00331A24 /* llliveappconfig.cpp */; };
1A9897E90B98E2F4005C45D7 /* llbase32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9897E80B98E2F4005C45D7 /* llbase32.cpp */; };
1A9EC237083EA0100023D510 /* llfloatereditui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */; };
+ 1AA2EE9E0CBBE2790017E185 /* llfloaterlandmark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */; };
+ 1AA2EEA10CBBE28C0017E185 /* llclassifiedstatsresponder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */; };
+ 1AA2EEA40CBBE2BF0017E185 /* llfloaterurldisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */; };
+ 1AA2EEA70CBBE2D40017E185 /* llremoteparcelrequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */; };
1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */; };
1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */; };
1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; };
@@ -707,6 +711,10 @@
FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; };
FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; };
FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; };
+ FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */; };
+ FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */; };
+ FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */; };
+ FE51387D0CD80BAE00F32EE3 /* llfloaterparcel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
@@ -901,6 +909,14 @@
1A9897E80B98E2F4005C45D7 /* llbase32.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase32.cpp; sourceTree = ""; };
1A9EC236083EA0100023D510 /* llfloatereditui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatereditui.cpp; sourceTree = ""; };
1A9EC23A083EA01F0023D510 /* llfloatereditui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatereditui.h; sourceTree = ""; };
+ 1AA2EE9C0CBBE2790017E185 /* llfloaterlandmark.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterlandmark.h; sourceTree = ""; };
+ 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterlandmark.cpp; sourceTree = ""; };
+ 1AA2EE9F0CBBE28C0017E185 /* llclassifiedstatsresponder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedstatsresponder.h; sourceTree = ""; };
+ 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llclassifiedstatsresponder.cpp; sourceTree = ""; };
+ 1AA2EEA20CBBE2BF0017E185 /* llfloaterurldisplay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterurldisplay.h; sourceTree = ""; };
+ 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterurldisplay.cpp; sourceTree = ""; };
+ 1AA2EEA50CBBE2D40017E185 /* llremoteparcelrequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llremoteparcelrequest.h; sourceTree = ""; };
+ 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llremoteparcelrequest.cpp; sourceTree = ""; };
1AB0DADC0A52E8A0001CACEB /* message_template.msg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = message_template.msg; path = ../../scripts/messages/message_template.msg; sourceTree = SOURCE_ROOT; };
1AD3940C0CAB0003004BA76A /* llurlsimstring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlsimstring.h; sourceTree = ""; };
1AD3940D0CAB0003004BA76A /* llurldispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurldispatcher.h; sourceTree = ""; };
@@ -1904,7 +1920,7 @@
99BB5174099AC2A4004BF9F2 /* llconfirmationmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llconfirmationmanager.cpp; sourceTree = SOURCE_ROOT; };
99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconfirmationmanager.h; sourceTree = SOURCE_ROOT; };
99C9FA660B6AD9BF00A1BBA6 /* SLVoice */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = SLVoice; path = "vivox-runtime/universal-darwin/SLVoice"; sourceTree = SOURCE_ROOT; };
- 99D5703305BDEFD7004DE704 /* AutoUpdater.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = AutoUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 99D5703305BDEFD7004DE704 /* AutoUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; };
99D5703505BDEFD8004DE704 /* AutoUpdater-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "AutoUpdater-Info.plist"; sourceTree = SOURCE_ROOT; };
99D8B25508735BFE002F8938 /* material_codes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = material_codes.h; sourceTree = ""; };
99DB67DA07C161A500CF3185 /* llmediaimplquicktime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmediaimplquicktime.h; sourceTree = ""; };
@@ -2209,6 +2225,15 @@
FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; };
FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedinfo.h; sourceTree = ""; };
+ FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldebugmessagebox.cpp; sourceTree = ""; };
+ FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugmessagebox.h; sourceTree = ""; };
+ FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterclassified.cpp; sourceTree = ""; };
+ FE5138740CD80BAE00F32EE3 /* llfloaterclassified.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterclassified.h; sourceTree = ""; };
+ FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterevent.cpp; sourceTree = ""; };
+ FE5138760CD80BAE00F32EE3 /* llfloaterevent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterevent.h; sourceTree = ""; };
+ FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterparcel.cpp; sourceTree = ""; };
+ FE5138780CD80BAE00F32EE3 /* llfloaterparcel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterparcel.h; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -2394,6 +2419,23 @@
26F529A0051F61CD00A80050 /* newview */ = {
isa = PBXGroup;
children = (
+ FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */,
+ FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */,
+ FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */,
+ FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */,
+ FE5138740CD80BAE00F32EE3 /* llfloaterclassified.h */,
+ FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */,
+ FE5138760CD80BAE00F32EE3 /* llfloaterevent.h */,
+ FE5138770CD80BAE00F32EE3 /* llfloaterparcel.cpp */,
+ FE5138780CD80BAE00F32EE3 /* llfloaterparcel.h */,
+ 1AA2EEA50CBBE2D40017E185 /* llremoteparcelrequest.h */,
+ 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */,
+ 1AA2EEA20CBBE2BF0017E185 /* llfloaterurldisplay.h */,
+ 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */,
+ 1AA2EE9F0CBBE28C0017E185 /* llclassifiedstatsresponder.h */,
+ 1AA2EEA00CBBE28C0017E185 /* llclassifiedstatsresponder.cpp */,
+ 1AA2EE9C0CBBE2790017E185 /* llfloaterlandmark.h */,
+ 1AA2EE9D0CBBE2790017E185 /* llfloaterlandmark.cpp */,
1AD394120CAB001B004BA76A /* llcommandhandler.cpp */,
1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */,
1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */,
@@ -4646,6 +4688,14 @@
1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */,
1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */,
1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */,
+ 1AA2EE9E0CBBE2790017E185 /* llfloaterlandmark.cpp in Sources */,
+ 1AA2EEA10CBBE28C0017E185 /* llclassifiedstatsresponder.cpp in Sources */,
+ 1AA2EEA40CBBE2BF0017E185 /* llfloaterurldisplay.cpp in Sources */,
+ 1AA2EEA70CBBE2D40017E185 /* llremoteparcelrequest.cpp in Sources */,
+ FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */,
+ FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */,
+ FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */,
+ FE51387D0CD80BAE00F32EE3 /* llfloaterparcel.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
@@ -761,6 +765,10 @@
>
+
+
@@ -845,6 +853,10 @@
>
+
+
@@ -989,6 +1001,10 @@
>
+
+
@@ -1189,6 +1205,10 @@
>
+
+
@@ -1293,6 +1313,10 @@
>
+
+
@@ -1935,6 +1959,10 @@
>
+
+
@@ -2207,10 +2235,6 @@
>
-
-
@@ -2239,6 +2263,10 @@
>
+
+
@@ -2323,6 +2351,10 @@
>
+
+
@@ -2459,6 +2491,10 @@
>
+
+
@@ -2663,6 +2699,10 @@
>
+
+
@@ -2775,6 +2815,10 @@
>
+
+
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 @@
+Release Notes for Second Life 1.18.5(0) November 13, 2007
+=====================================
+New features:
+* New inworld search via the 'All' tab
+** Includes improved search functionality on land parcels, profiles, groups, wiki documents, events, classifieds, and some individual objects
+** Classifieds are returned both within and next to search results
+
+Bug fixes:
+* Fixed avatar turning in Appearance mode
+* Fixed Lag Meter metrics for non-USA residents
+* Fixed open source build issues
+* Fixed Korean text display on Mac OSX 10.5
+
Release Notes for Second Life 1.18.4(3) November 7, 2007
=====================================
New 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
// remains consistent on all systems.
IDI_LL_ICON ICON "ll_icon.ico"
IDI_INSTALL_ICON ICON "install_icon.ico"
+IDI_LCD_LL_ICON ICON "icon1.ico"
/////////////////////////////////////////////////////////////////////////////
//
@@ -227,8 +228,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,4,3
- PRODUCTVERSION 1,18,4,3
+ FILEVERSION 1,18,5,0
+ PRODUCTVERSION 1,18,5,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -245,12 +246,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Linden Lab"
VALUE "FileDescription", "Second Life"
- VALUE "FileVersion", "1.18.4.3"
+ VALUE "FileVersion", "1.18.5.0"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc."
VALUE "OriginalFilename", "SecondLife.exe"
VALUE "ProductName", "Second Life"
- VALUE "ProductVersion", "1.18.4.3"
+ VALUE "ProductVersion", "1.18.5.0"
END
END
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 @@
#define IDB_LOGIN 149
#define IDC_CURSOR4 153
#define IDC_CURSOR5 154
+#define IDI_LCD_LL_ICON 157
#define IDC_RADIO_56 1000
#define IDC_RADIO_128 1001
#define IDC_RADIO_256 1002
@@ -151,7 +152,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 156
+#define _APS_NEXT_RESOURCE_VALUE 167
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_CONTROL_VALUE 1139
#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 @@
+
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 @@
+
+
+ Debug Info
+ FPS
+ SimFPS
+ P-In
+ P-Out
+ P-Loss
+ Ping
+ Account Details
+ L$ bal
+ Time
+ Location Details 1
+ Location Details 2
+ Region
+ Parcel
+ Pos
+ Sqm
+ Owner
+ Type
+ Yes
+ No
+ ForSale
+ Traffic
+ Last 3 Chat Lines
+ Last 3 IM Lines
+
\ 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 @@
+ Don't show me this again
+ Always choose this option
+
[ALERT_NAME] is missing from alerts.xml!
@@ -334,7 +337,7 @@ Community Standards.
- Selecting the "Publish in Search" will show:
+ Selecting "Show in Search" will show:
- my profile in search results
- a link to my profile in public group pages
@@ -3230,6 +3233,20 @@ from the 'Edit' menu.
Cancel
+
+
+ Are you sure you want to teleport?
+
+
+ When teleporting from a landmark in inventory
+
+
+
+
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 @@
In Memory of Jesse Malthus, you will be fondly remembered by all who heard your voice.
-Thank 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.
+Thank 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.
APR Copyright (C) 2000-2004 The Apache Software Foundation
cURL 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 @@
width="119" />
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 @@
+ can_resize="true" height="570" min_height="570" min_width="780"
+ name="directory" rect_control="FloaterFindRect2"
+ title="Search Second Life" width="780">
+
-
-
-
- Find:
-
-
-
-
+
+
+
+
+
+
+ Any Category
+
+
+ Classifieds
+
+
+ Events
+
+
+ Groups
+
+
+ People
+
+
+ Places
+
+
+ Wiki
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+ label="Include Mature content"
+ left_delta="133"
+ name="mature_check"
+ width="156" />
+
+
+ Loading...
+ Done
+
@@ -65,13 +111,13 @@
Find:
+ follows="left|top" font="SansSerif" height="18" left_delta="38"
+ max_length="63" mouse_opaque="true" name="name" width="128" />
-
Any Category
@@ -110,9 +156,9 @@
-
+
@@ -131,6 +177,7 @@
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
mouse_opaque="true" name="result_text" v_pad="0" width="328" />
+
@@ -233,7 +280,7 @@
font="SansSerifSmall" height="16" initial_value="false" label="Show Mature"
left="569" mouse_opaque="true" name="incmature" width="120" />
+
+
+
+
+ Find:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
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 @@
-
-
-
-
- Done
+
+
+ Ready
+
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 @@
600
- 250
+ 300
Connection ping time is over [NETWORK_PING_CRITICAL] ms
@@ -423,4 +423,4 @@
<<
-
\ No newline at end of file
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
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 @@
+
+
+
+
+
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 @@
-
-
- Description:
-
-
-
-
+ can_resize="false" enabled="true" height="495" hidden="false" left="242"
+ min_height="510" min_width="460" mouse_opaque="true"
+ name="existing_landmark_preview" width="440">
+
+
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 @@
+
+
+
+
+
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 @@
hidden="false" initial_value="false" label="Allow anyone to copy" left="10"
mouse_opaque="true" name="checkbox allow everyone copy" width="141" />
-
-
+
+
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 @@
left="0" mouse_opaque="true" name="separator7" width="250" />
-
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 @@
-
-
-
+ Name:
+
+
+
+
+ Description:
+
+
-
-
-
-
+
+
+ Information:
+
+
+
+
+ Location:
+
+
+
+
+
- Traffic: [TRAFFIC]
- , Area: [AREA] sq. m.
- , For Sale for L$ [PRICE]
- , Auction ID [ID].
+ Traffic: [TRAFFIC]
+ Area: [AREA] sq. m.
+ For Sale for L$ [PRICE]
+ Auction ID [ID].
+ Place information not available without server update.
+ Information about this location is unavailable at this time, please try again later.
+ Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner.
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 @@
-
-
-
+ Name:
+
+
+
+
+ Description:
+
+
-
-
-
+
+
+ Information:
+
+
+
+
+ Location:
+
+
+
+
-
- Traffic: [TRAFFIC]
- , Area: [AREA] sq. m.
- , For Sale for L$ [PRICE]
- , Auction ID [ID].
+ Traffic: [TRAFFIC]
+ Area: [AREA] sq. m.
+ For Sale for L$ [PRICE]
+ Auction ID [ID].
+ Place information not available without server update.
+ Information about this location is unavailable at this time, please try again later.
+ Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner.
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 @@
+
+
+
+ LCD Destination:
+
+
+
+
+ Logitech G15 Gaming Keyboard
+
+
+ Logitech Z10 Speakers
+
+
+
+
+ LCD Display Options:
+
+
+
+
+
+
+
+
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 @@
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 @@
Loading...
@@ -26,13 +26,13 @@
image_disabled_selected="status_buy_currency_pressed.tga"
image_selected="status_buy_currency_pressed.tga"
image_unselected="status_buy_currency.tga" label="" label_selected=""
- left="-120" mouse_opaque="true" name="buycurrency" scale_image="true"
+ left="-210" mouse_opaque="true" name="buycurrency" scale_image="true"
tool_tip="Buy currency" width="16" />
12:00 AM
@@ -108,10 +108,49 @@
image_unselected="status_buy_land.tga" label="" label_selected=""
left="569" mouse_opaque="true" name="buyland" scale_image="true"
tool_tip="Buy this parcel" width="16" />
-
- Packet Loss
-
-
- Bandwidth
-
+
+
+
+
+
+
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 @@
#include
#include
#include
-#include "curl/curl.h"
#if LL_WINDOWS
#include //_O_APPEND
@@ -156,7 +155,7 @@
#include "llbutton.h" // For constants
#include "llcallbacklist.h"
#include "llchatbar.h"
-#include "llcombobox.h" // For constants
+//#include "llcombobox.h" // For constants
#include "llconsole.h"
#include "llcontainerview.h"
#include "lldebugview.h"
@@ -248,6 +247,13 @@
#include "llwindebug.h"
#include "lldxhardware.h"
#include "llwindowwin32.h"
+
+// for Logitech LCD keyboards / speakers
+#ifndef LL_LOGITECH_LCD_H
+#include "lllogitechlcd.h"
+#endif
+extern void CreateLCDDebugWindows();
+
#endif // LL_WINDOWS
#if LL_QUICKTIME_ENABLED
@@ -321,6 +327,9 @@ F32 gSimFrames;
//
// Core Application globals
//
+#if LL_WINDOWS
+llLCD *gLcdScreen = NULL;
+#endif
LLString gSecondLife;
LLString gWindowTitle;
@@ -483,7 +492,6 @@ LLVector3 gRelativeWindVec(0.0, 0.0, 0.0);
BOOL gVelocityInterpolate = TRUE; // (These are written once/frame with the data from gSavedSettings)
BOOL gPingInterpolate = TRUE;
-
//
// System info
//
@@ -1167,7 +1175,8 @@ int main( int argc, char **argv )
//
// Check for another instance of the app running
//
- //RN: if we received a URL, hand it off to the existing instance
+
+ // RN: if we received a URL, hand it off to the existing instance
// don't call another_instance_running() when doing URL handoff, as
// it relies on checking a marker file which will not work when running
// out of different directories
@@ -1300,14 +1309,6 @@ int main( int argc, char **argv )
if (gSecondInstance)
{
gDisableVoice = TRUE;
- /* Don't start another instance if using -multiple
- //RN: if we received a URL, hand it off to the existing instance
- if (LLURLSimString::parse())
- {
- LLURLSimString::send_to_other_instance();
- return 1;
- }
- */
}
init_marker_file();
@@ -1689,6 +1690,13 @@ int main( int argc, char **argv )
// Show watch cursor
gViewerWindow->setCursor(UI_CURSOR_WAIT);
+
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // start up an LCD window on a logitech keyboard, if there is one
+ gLcdScreen = new llLCD(hInstance);
+ CreateLCDDebugWindows();
+#endif
+
// Finish view initialization
gViewerWindow->initBase();
@@ -1937,8 +1945,11 @@ void main_loop()
gMovieMaker.Snap();
}
#endif
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // update LCD Screen
+ gLcdScreen->UpdateDisplay();
+#endif
}
-
}
// Sleep and run background threads
@@ -3509,6 +3520,14 @@ void update_statistics(U32 frame_count)
LLViewerImageList::sTextureBits = 0;
LLViewerImageList::sTexturePackets = 0;
+
+#if LL_WINDOWS && LL_LCD_COMPILE
+ bool LCDenabled = gLcdScreen->Enabled();
+ gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, LCDenabled);
+#else
+ gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, false);
+#endif
+
}
//
@@ -5419,7 +5438,6 @@ int parse_args(int argc, char **argv)
gArgs += argv[j];
gArgs += " ";
- LLString argument = argv[j];
if ((!strcmp(argv[j], "-port")) && (++j < argc))
{
sscanf(argv[j], "%u", &(gAgent.mViewerPort));
@@ -6178,6 +6196,11 @@ void cleanup_app()
gDXHardware.cleanup();
#endif // LL_WINDOWS
+#if LL_WINDOWS && LL_LCD_COMPILE
+ // shut down the LCD window on a logitech keyboard, if there is one
+ delete gLcdScreen;
+#endif
+
if (!gVolumeMgr->cleanup())
{
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 @@
// Almost every file in the viewer depends on this file.
// If you need to add a shared class, put it in its own
// little file. JC
-#include "lltransactiontypes.h"
+
+// *TODO: remove this, viewer.h doesn't need it, but there
+// are lots of .cpp files that depend on this recursive
+// dependency.
#include "llviewercontrol.h"
// Enabled this definition to compile a 'hacked' viewer that
@@ -314,4 +317,9 @@ const std::vector& getLoginURIs();
const std::string& getHelperURI();
void resetURIs();
+#if LL_WINDOWS
+class llLCD;
+extern llLCD *gLcdScreen;
+#endif
+
#endif
--
cgit v1.1