Automated merge with https://bitbucket.org/jenn_linden/viewer-vs2010
commit
ba1d1267fe
20
.hgtags
20
.hgtags
|
|
@ -51,3 +51,23 @@ a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start
|
|||
345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1
|
||||
345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b
|
||||
0000000000000000000000000000000000000000 76f586a8e22b
|
||||
54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2
|
||||
7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1
|
||||
9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2
|
||||
b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3
|
||||
1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release
|
||||
a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1
|
||||
db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2
|
||||
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3
|
||||
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release
|
||||
3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1
|
||||
25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2
|
||||
1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release
|
||||
345b17e7cf630db77e840b4fe3451bd476d750a3 DRTVWR-32_2.5.0-beta1
|
||||
54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33_2.5.0-beta2
|
||||
b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-beta3
|
||||
b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3
|
||||
b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release
|
||||
b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release
|
||||
92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start
|
||||
63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ viewer-development.show_changes_since = last_sprint
|
|||
|
||||
# Build Settings
|
||||
viewer-development_coverity.coverity_product = viewer
|
||||
viewer-development_coverity.run_tests = false
|
||||
viewer-development.build_debug_release_separately = true
|
||||
|
||||
# Notifications - to configure email notices, add a setting like this:
|
||||
|
|
|
|||
|
|
@ -1356,9 +1356,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>039c65405b2bea7c1bf67cfeb15a67fe</string>
|
||||
<string>ca5765af55f798724d601720afdf6953</string>
|
||||
<key>url</key>
|
||||
<string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3-windows-20101001b.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openjpeg/rev/222548/arch/CYGWIN/installer/openjpeg-1.4-windows-20110302.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
|
|||
2
build.sh
2
build.sh
|
|
@ -51,7 +51,7 @@ pre_build()
|
|||
{
|
||||
local variant="$1"
|
||||
begin_section "Pre$variant"
|
||||
"$AUTOBUILD" configure -c $variant -- -DPACKAGE:BOOL=ON -DRELEASE_CRASH_REPORTING:BOOL=ON -DUSE_PRECOMPILED_HEADERS=FALSE
|
||||
"$AUTOBUILD" configure -c $variant -- -DPACKAGE:BOOL=ON -DRELEASE_CRASH_REPORTING:BOOL=ON -DUSE_PRECOMPILED_HEADERS=FALSE
|
||||
end_section "Pre$variant"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ Aleric Inglewood
|
|||
SNOW-626
|
||||
SNOW-756
|
||||
SNOW-764
|
||||
SNOW-800
|
||||
VWR-10001
|
||||
VWR-10579
|
||||
VWR-10759
|
||||
|
|
@ -85,17 +86,21 @@ Aleric Inglewood
|
|||
VWR-24320
|
||||
VWR-24321
|
||||
VWR-24354
|
||||
VWR-24366
|
||||
VWR-24519
|
||||
SNOW-84
|
||||
SNOW-477
|
||||
SNOW-744
|
||||
SNOW-766
|
||||
STORM-163
|
||||
STORM-955
|
||||
STORM-960
|
||||
Ales Beaumont
|
||||
VWR-9352
|
||||
SNOW-240
|
||||
Alexandrea Fride
|
||||
STORM-255
|
||||
STORM-960
|
||||
Alissa Sabre
|
||||
VWR-81
|
||||
VWR-83
|
||||
|
|
@ -185,6 +190,7 @@ Blakar Ogre
|
|||
blino Nakamura
|
||||
VWR-17
|
||||
Boroondas Gupte
|
||||
OPEN-29
|
||||
SNOW-278
|
||||
SNOW-503
|
||||
SNOW-510
|
||||
|
|
@ -373,20 +379,31 @@ JB Kraft
|
|||
Joghert LeSabre
|
||||
VWR-64
|
||||
Jonathan Yap
|
||||
STORM-435
|
||||
STORM-523
|
||||
STORM-596
|
||||
STORM-615
|
||||
STORM-616
|
||||
STORM-643
|
||||
STORM-679
|
||||
STORM-723
|
||||
STORM-726
|
||||
STORM-737
|
||||
STORM-869
|
||||
STORM-785
|
||||
STORM-812
|
||||
STORM-829
|
||||
STORM-844
|
||||
STORM-953
|
||||
STORM-954
|
||||
STORM-960
|
||||
STORM-869
|
||||
STORM-974
|
||||
STORM-975
|
||||
STORM-977
|
||||
STORM-979
|
||||
STORM-980
|
||||
VWR-17801
|
||||
VWR-24347
|
||||
STORM-844
|
||||
Kage Pixel
|
||||
VWR-11
|
||||
Ken March
|
||||
|
|
@ -614,6 +631,7 @@ Robin Cornelius
|
|||
SNOW-599
|
||||
SNOW-747
|
||||
STORM-422
|
||||
STORM-960
|
||||
VWR-2488
|
||||
VWR-9557
|
||||
VWR-10579
|
||||
|
|
@ -662,6 +680,8 @@ Sergen Davies
|
|||
CT-321
|
||||
Shawn Kaufmat
|
||||
SNOW-240
|
||||
Siana Gearz
|
||||
STORM-960
|
||||
SignpostMarv Martin
|
||||
VWR-153
|
||||
VWR-154
|
||||
|
|
@ -769,6 +789,8 @@ Twisted Laws
|
|||
STORM-466
|
||||
STORM-467
|
||||
STORM-844
|
||||
STORM-643
|
||||
STORM-954
|
||||
Vadim Bigbear
|
||||
VWR-2681
|
||||
Vector Hastings
|
||||
|
|
|
|||
|
|
@ -72,9 +72,9 @@ if (VIEWER)
|
|||
add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
|
||||
|
||||
# llplugin testbed code (is this the right way to include it?)
|
||||
if (NOT LINUX)
|
||||
if (LL_TESTS AND NOT LINUX)
|
||||
add_subdirectory(${VIEWER_PREFIX}test_apps/llplugintest)
|
||||
endif (NOT LINUX)
|
||||
endif (LL_TESTS AND NOT LINUX)
|
||||
|
||||
if (LINUX)
|
||||
add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@ set(GOOGLEMOCK_INCLUDE_DIRS
|
|||
${LIBS_PREBUILT_DIR}/include)
|
||||
|
||||
if (LINUX)
|
||||
# VWR-24366: gmock is underlinked, it needs gtest.
|
||||
set(GOOGLEMOCK_LIBRARIES
|
||||
gmock
|
||||
gtest)
|
||||
gmock -Wl,--no-as-needed
|
||||
gtest -Wl,--as-needed)
|
||||
elseif(WINDOWS)
|
||||
set(GOOGLEMOCK_LIBRARIES
|
||||
gmock)
|
||||
|
|
|
|||
|
|
@ -57,11 +57,6 @@ INCLUDE(GoogleMock)
|
|||
${CMAKE_SOURCE_DIR}/test/test.h
|
||||
)
|
||||
|
||||
# Use the default flags
|
||||
if (LINUX)
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "")
|
||||
endif (LINUX)
|
||||
|
||||
# start the source test executable definitions
|
||||
SET(${project}_TEST_OUTPUT "")
|
||||
FOREACH (source ${sources})
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file run_build_test.py
|
||||
@author Nat Goodspeed
|
||||
|
|
|
|||
|
|
@ -1,4 +1,28 @@
|
|||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file start-client.py
|
||||
|
||||
$LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2010-2011, Linden Research, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
version 2.1 of the License only.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
import sys, getopt
|
||||
import os
|
||||
import llstart
|
||||
|
|
|
|||
|
|
@ -1,4 +1,28 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file llperformance.py
|
||||
|
||||
$LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2010-2011, Linden Research, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
version 2.1 of the License only.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
# ------------------------------------------------
|
||||
# Sim metrics utility functions.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file simperf_proc_interface.py
|
||||
@brief Utility to extract log messages from *.<pid>.llsd files containing performance statistics.
|
||||
|
|
|
|||
|
|
@ -1,28 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
# @file test_win32_manifest.py
|
||||
# @brief Test an assembly binding version and uniqueness in a windows dll or exe.
|
||||
#
|
||||
# $LicenseInfo:firstyear=2009&license=viewerlgpl$
|
||||
# Second Life Viewer Source Code
|
||||
# Copyright (C) 2010, Linden Research, Inc.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation;
|
||||
# version 2.1 of the License only.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
# Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
# $/LicenseInfo$
|
||||
"""\
|
||||
@file test_win32_manifest.py
|
||||
@brief Test an assembly binding version and uniqueness in a windows dll or exe.
|
||||
|
||||
$LicenseInfo:firstyear=2009&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2009-2011, Linden Research, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
version 2.1 of the License only.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
import sys, os
|
||||
import tempfile
|
||||
from xml.dom.minidom import parse
|
||||
|
|
|
|||
|
|
@ -33,145 +33,145 @@
|
|||
#include "llanimationstates.h"
|
||||
#include "llstring.h"
|
||||
|
||||
const LLUUID ANIM_AGENT_AFRAID = LLUUID("6b61c8e8-4747-0d75-12d7-e49ff207a4ca");
|
||||
const LLUUID ANIM_AGENT_AIM_BAZOOKA_R = LLUUID("b5b4a67d-0aee-30d2-72cd-77b333e932ef");
|
||||
const LLUUID ANIM_AGENT_AIM_BOW_L = LLUUID("46bb4359-de38-4ed8-6a22-f1f52fe8f506");
|
||||
const LLUUID ANIM_AGENT_AIM_HANDGUN_R = LLUUID("3147d815-6338-b932-f011-16b56d9ac18b");
|
||||
const LLUUID ANIM_AGENT_AIM_RIFLE_R = LLUUID("ea633413-8006-180a-c3ba-96dd1d756720");
|
||||
const LLUUID ANIM_AGENT_ANGRY = LLUUID("5747a48e-073e-c331-f6f3-7c2149613d3e");
|
||||
const LLUUID ANIM_AGENT_AWAY = LLUUID("fd037134-85d4-f241-72c6-4f42164fedee");
|
||||
const LLUUID ANIM_AGENT_BACKFLIP = LLUUID("c4ca6188-9127-4f31-0158-23c4e2f93304");
|
||||
const LLUUID ANIM_AGENT_BELLY_LAUGH = LLUUID("18b3a4b5-b463-bd48-e4b6-71eaac76c515");
|
||||
const LLUUID ANIM_AGENT_BLOW_KISS = LLUUID("db84829b-462c-ee83-1e27-9bbee66bd624");
|
||||
const LLUUID ANIM_AGENT_BORED = LLUUID("b906c4ba-703b-1940-32a3-0c7f7d791510");
|
||||
const LLUUID ANIM_AGENT_BOW = LLUUID("82e99230-c906-1403-4d9c-3889dd98daba");
|
||||
const LLUUID ANIM_AGENT_BRUSH = LLUUID("349a3801-54f9-bf2c-3bd0-1ac89772af01");
|
||||
const LLUUID ANIM_AGENT_BUSY = LLUUID("efcf670c-2d18-8128-973a-034ebc806b67");
|
||||
const LLUUID ANIM_AGENT_CLAP = LLUUID("9b0c1c4e-8ac7-7969-1494-28c874c4f668");
|
||||
const LLUUID ANIM_AGENT_COURTBOW = LLUUID("9ba1c942-08be-e43a-fb29-16ad440efc50");
|
||||
const LLUUID ANIM_AGENT_CROUCH = LLUUID("201f3fdf-cb1f-dbec-201f-7333e328ae7c");
|
||||
const LLUUID ANIM_AGENT_CROUCHWALK = LLUUID("47f5f6fb-22e5-ae44-f871-73aaaf4a6022");
|
||||
const LLUUID ANIM_AGENT_CRY = LLUUID("92624d3e-1068-f1aa-a5ec-8244585193ed");
|
||||
const LLUUID ANIM_AGENT_CUSTOMIZE = LLUUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
|
||||
const LLUUID ANIM_AGENT_CUSTOMIZE_DONE = LLUUID("6883a61a-b27b-5914-a61e-dda118a9ee2c");
|
||||
const LLUUID ANIM_AGENT_DANCE1 = LLUUID("b68a3d7c-de9e-fc87-eec8-543d787e5b0d");
|
||||
const LLUUID ANIM_AGENT_DANCE2 = LLUUID("928cae18-e31d-76fd-9cc9-2f55160ff818");
|
||||
const LLUUID ANIM_AGENT_DANCE3 = LLUUID("30047778-10ea-1af7-6881-4db7a3a5a114");
|
||||
const LLUUID ANIM_AGENT_DANCE4 = LLUUID("951469f4-c7b2-c818-9dee-ad7eea8c30b7");
|
||||
const LLUUID ANIM_AGENT_DANCE5 = LLUUID("4bd69a1d-1114-a0b4-625f-84e0a5237155");
|
||||
const LLUUID ANIM_AGENT_DANCE6 = LLUUID("cd28b69b-9c95-bb78-3f94-8d605ff1bb12");
|
||||
const LLUUID ANIM_AGENT_DANCE7 = LLUUID("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6");
|
||||
const LLUUID ANIM_AGENT_DANCE8 = LLUUID("b0dc417c-1f11-af36-2e80-7e7489fa7cdc");
|
||||
const LLUUID ANIM_AGENT_DEAD = LLUUID("57abaae6-1d17-7b1b-5f98-6d11a6411276");
|
||||
const LLUUID ANIM_AGENT_DRINK = LLUUID("0f86e355-dd31-a61c-fdb0-3a96b9aad05f");
|
||||
const LLUUID ANIM_AGENT_EMBARRASSED = LLUUID("514af488-9051-044a-b3fc-d4dbf76377c6");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_AFRAID = LLUUID("aa2df84d-cf8f-7218-527b-424a52de766e");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_ANGER = LLUUID("1a03b575-9634-b62a-5767-3a679e81f4de");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_BORED = LLUUID("214aa6c1-ba6a-4578-f27c-ce7688f61d0d");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_CRY = LLUUID("d535471b-85bf-3b4d-a542-93bea4f59d33");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_DISDAIN = LLUUID("d4416ff1-09d3-300f-4183-1b68a19b9fc1");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_EMBARRASSED = LLUUID("0b8c8211-d78c-33e8-fa28-c51a9594e424");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_FROWN = LLUUID("fee3df48-fa3d-1015-1e26-a205810e3001");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_KISS = LLUUID("1e8d90cc-a84e-e135-884c-7c82c8b03a14");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_LAUGH = LLUUID("62570842-0950-96f8-341c-809e65110823");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_OPEN_MOUTH = LLUUID("d63bc1f9-fc81-9625-a0c6-007176d82eb7");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_REPULSED = LLUUID("f76cda94-41d4-a229-2872-e0296e58afe1");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_SAD = LLUUID("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_SHRUG = LLUUID("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_SMILE = LLUUID("b7c7c833-e3d3-c4e3-9fc0-131237446312");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_SURPRISE = LLUUID("728646d9-cc79-08b2-32d6-937f0a835c24");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_TONGUE_OUT = LLUUID("835965c6-7f2f-bda2-5deb-2478737f91bf");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_TOOTHSMILE = LLUUID("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_WINK = LLUUID("da020525-4d94-59d6-23d7-81fdebf33148");
|
||||
const LLUUID ANIM_AGENT_EXPRESS_WORRY = LLUUID("9c05e5c7-6f07-6ca4-ed5a-b230390c3950");
|
||||
const LLUUID ANIM_AGENT_FALLDOWN = LLUUID("666307d9-a860-572d-6fd4-c3ab8865c094");
|
||||
const LLUUID ANIM_AGENT_FEMALE_RUN_NEW = LLUUID("85995026-eade-5d78-d364-94a64512cb66");
|
||||
const LLUUID ANIM_AGENT_FEMALE_WALK = LLUUID("f5fc7433-043d-e819-8298-f519a119b688");
|
||||
const LLUUID ANIM_AGENT_FEMALE_WALK_NEW = LLUUID("d60c41d2-7c24-7074-d3fa-6101cea22a51");
|
||||
const LLUUID ANIM_AGENT_FINGER_WAG = LLUUID("c1bc7f36-3ba0-d844-f93c-93be945d644f");
|
||||
const LLUUID ANIM_AGENT_FIST_PUMP = LLUUID("7db00ccd-f380-f3ee-439d-61968ec69c8a");
|
||||
const LLUUID ANIM_AGENT_FLY = LLUUID("aec4610c-757f-bc4e-c092-c6e9caf18daf");
|
||||
const LLUUID ANIM_AGENT_FLYSLOW = LLUUID("2b5a38b2-5e00-3a97-a495-4c826bc443e6");
|
||||
const LLUUID ANIM_AGENT_HELLO = LLUUID("9b29cd61-c45b-5689-ded2-91756b8d76a9");
|
||||
const LLUUID ANIM_AGENT_HOLD_BAZOOKA_R = LLUUID("ef62d355-c815-4816-2474-b1acc21094a6");
|
||||
const LLUUID ANIM_AGENT_HOLD_BOW_L = LLUUID("8b102617-bcba-037b-86c1-b76219f90c88");
|
||||
const LLUUID ANIM_AGENT_HOLD_HANDGUN_R = LLUUID("efdc1727-8b8a-c800-4077-975fc27ee2f2");
|
||||
const LLUUID ANIM_AGENT_HOLD_RIFLE_R = LLUUID("3d94bad0-c55b-7dcc-8763-033c59405d33");
|
||||
const LLUUID ANIM_AGENT_HOLD_THROW_R = LLUUID("7570c7b5-1f22-56dd-56ef-a9168241bbb6");
|
||||
const LLUUID ANIM_AGENT_HOVER = LLUUID("4ae8016b-31b9-03bb-c401-b1ea941db41d");
|
||||
const LLUUID ANIM_AGENT_HOVER_DOWN = LLUUID("20f063ea-8306-2562-0b07-5c853b37b31e");
|
||||
const LLUUID ANIM_AGENT_HOVER_UP = LLUUID("62c5de58-cb33-5743-3d07-9e4cd4352864");
|
||||
const LLUUID ANIM_AGENT_IMPATIENT = LLUUID("5ea3991f-c293-392e-6860-91dfa01278a3");
|
||||
const LLUUID ANIM_AGENT_JUMP = LLUUID("2305bd75-1ca9-b03b-1faa-b176b8a8c49e");
|
||||
const LLUUID ANIM_AGENT_JUMP_FOR_JOY = LLUUID("709ea28e-1573-c023-8bf8-520c8bc637fa");
|
||||
const LLUUID ANIM_AGENT_KISS_MY_BUTT = LLUUID("19999406-3a3a-d58c-a2ac-d72e555dcf51");
|
||||
const LLUUID ANIM_AGENT_LAND = LLUUID("7a17b059-12b2-41b1-570a-186368b6aa6f");
|
||||
const LLUUID ANIM_AGENT_LAUGH_SHORT = LLUUID("ca5b3f14-3194-7a2b-c894-aa699b718d1f");
|
||||
const LLUUID ANIM_AGENT_MEDIUM_LAND = LLUUID("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57");
|
||||
const LLUUID ANIM_AGENT_MOTORCYCLE_SIT = LLUUID("08464f78-3a8e-2944-cba5-0c94aff3af29");
|
||||
const LLUUID ANIM_AGENT_MUSCLE_BEACH = LLUUID("315c3a41-a5f3-0ba4-27da-f893f769e69b");
|
||||
const LLUUID ANIM_AGENT_NO = LLUUID("5a977ed9-7f72-44e9-4c4c-6e913df8ae74");
|
||||
const LLUUID ANIM_AGENT_NO_UNHAPPY = LLUUID("d83fa0e5-97ed-7eb2-e798-7bd006215cb4");
|
||||
const LLUUID ANIM_AGENT_NYAH_NYAH = LLUUID("f061723d-0a18-754f-66ee-29a44795a32f");
|
||||
const LLUUID ANIM_AGENT_ONETWO_PUNCH = LLUUID("eefc79be-daae-a239-8c04-890f5d23654a");
|
||||
const LLUUID ANIM_AGENT_PEACE = LLUUID("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9");
|
||||
const LLUUID ANIM_AGENT_POINT_ME = LLUUID("17c024cc-eef2-f6a0-3527-9869876d7752");
|
||||
const LLUUID ANIM_AGENT_POINT_YOU = LLUUID("ec952cca-61ef-aa3b-2789-4d1344f016de");
|
||||
const LLUUID ANIM_AGENT_PRE_JUMP = LLUUID("7a4e87fe-de39-6fcb-6223-024b00893244");
|
||||
const LLUUID ANIM_AGENT_PUNCH_LEFT = LLUUID("f3300ad9-3462-1d07-2044-0fef80062da0");
|
||||
const LLUUID ANIM_AGENT_PUNCH_RIGHT = LLUUID("c8e42d32-7310-6906-c903-cab5d4a34656");
|
||||
const LLUUID ANIM_AGENT_REPULSED = LLUUID("36f81a92-f076-5893-dc4b-7c3795e487cf");
|
||||
const LLUUID ANIM_AGENT_ROUNDHOUSE_KICK = LLUUID("49aea43b-5ac3-8a44-b595-96100af0beda");
|
||||
const LLUUID ANIM_AGENT_RPS_COUNTDOWN = LLUUID("35db4f7e-28c2-6679-cea9-3ee108f7fc7f");
|
||||
const LLUUID ANIM_AGENT_RPS_PAPER = LLUUID("0836b67f-7f7b-f37b-c00a-460dc1521f5a");
|
||||
const LLUUID ANIM_AGENT_RPS_ROCK = LLUUID("42dd95d5-0bc6-6392-f650-777304946c0f");
|
||||
const LLUUID ANIM_AGENT_RPS_SCISSORS = LLUUID("16803a9f-5140-e042-4d7b-d28ba247c325");
|
||||
const LLUUID ANIM_AGENT_RUN = LLUUID("05ddbff8-aaa9-92a1-2b74-8fe77a29b445");
|
||||
const LLUUID ANIM_AGENT_RUN_NEW = LLUUID("1ab1b236-cd08-21e6-0cbc-0d923fc6eca2");
|
||||
const LLUUID ANIM_AGENT_SAD = LLUUID("0eb702e2-cc5a-9a88-56a5-661a55c0676a");
|
||||
const LLUUID ANIM_AGENT_SALUTE = LLUUID("cd7668a6-7011-d7e2-ead8-fc69eff1a104");
|
||||
const LLUUID ANIM_AGENT_SHOOT_BOW_L = LLUUID("e04d450d-fdb5-0432-fd68-818aaf5935f8");
|
||||
const LLUUID ANIM_AGENT_SHOUT = LLUUID("6bd01860-4ebd-127a-bb3d-d1427e8e0c42");
|
||||
const LLUUID ANIM_AGENT_SHRUG = LLUUID("70ea714f-3a97-d742-1b01-590a8fcd1db5");
|
||||
const LLUUID ANIM_AGENT_SIT = LLUUID("1a5fe8ac-a804-8a5d-7cbd-56bd83184568");
|
||||
const LLUUID ANIM_AGENT_SIT_FEMALE = LLUUID("b1709c8d-ecd3-54a1-4f28-d55ac0840782");
|
||||
const LLUUID ANIM_AGENT_SIT_GENERIC = LLUUID("245f3c54-f1c0-bf2e-811f-46d8eeb386e7");
|
||||
const LLUUID ANIM_AGENT_SIT_GROUND = LLUUID("1c7600d6-661f-b87b-efe2-d7421eb93c86");
|
||||
const LLUUID ANIM_AGENT_SIT_GROUND_CONSTRAINED = LLUUID("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e");
|
||||
const LLUUID ANIM_AGENT_SIT_TO_STAND = LLUUID("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e");
|
||||
const LLUUID ANIM_AGENT_SLEEP = LLUUID("f2bed5f9-9d44-39af-b0cd-257b2a17fe40");
|
||||
const LLUUID ANIM_AGENT_SMOKE_IDLE = LLUUID("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a");
|
||||
const LLUUID ANIM_AGENT_SMOKE_INHALE = LLUUID("6802d553-49da-0778-9f85-1599a2266526");
|
||||
const LLUUID ANIM_AGENT_SMOKE_THROW_DOWN = LLUUID("0a9fb970-8b44-9114-d3a9-bf69cfe804d6");
|
||||
const LLUUID ANIM_AGENT_SNAPSHOT = LLUUID("eae8905b-271a-99e2-4c0e-31106afd100c");
|
||||
const LLUUID ANIM_AGENT_STAND = LLUUID("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f");
|
||||
const LLUUID ANIM_AGENT_STANDUP = LLUUID("3da1d753-028a-5446-24f3-9c9b856d9422");
|
||||
const LLUUID ANIM_AGENT_STAND_1 = LLUUID("15468e00-3400-bb66-cecc-646d7c14458e");
|
||||
const LLUUID ANIM_AGENT_STAND_2 = LLUUID("370f3a20-6ca6-9971-848c-9a01bc42ae3c");
|
||||
const LLUUID ANIM_AGENT_STAND_3 = LLUUID("42b46214-4b44-79ae-deb8-0df61424ff4b");
|
||||
const LLUUID ANIM_AGENT_STAND_4 = LLUUID("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f");
|
||||
const LLUUID ANIM_AGENT_STRETCH = LLUUID("80700431-74ec-a008-14f8-77575e73693f");
|
||||
const LLUUID ANIM_AGENT_STRIDE = LLUUID("1cb562b0-ba21-2202-efb3-30f82cdf9595");
|
||||
const LLUUID ANIM_AGENT_SURF = LLUUID("41426836-7437-7e89-025d-0aa4d10f1d69");
|
||||
const LLUUID ANIM_AGENT_SURPRISE = LLUUID("313b9881-4302-73c0-c7d0-0e7a36b6c224");
|
||||
const LLUUID ANIM_AGENT_SWORD_STRIKE = LLUUID("85428680-6bf9-3e64-b489-6f81087c24bd");
|
||||
const LLUUID ANIM_AGENT_TALK = LLUUID("5c682a95-6da4-a463-0bf6-0f5b7be129d1");
|
||||
const LLUUID ANIM_AGENT_TANTRUM = LLUUID("11000694-3f41-adc2-606b-eee1d66f3724");
|
||||
const LLUUID ANIM_AGENT_THROW_R = LLUUID("aa134404-7dac-7aca-2cba-435f9db875ca");
|
||||
const LLUUID ANIM_AGENT_TRYON_SHIRT = LLUUID("83ff59fe-2346-f236-9009-4e3608af64c1");
|
||||
const LLUUID ANIM_AGENT_TURNLEFT = LLUUID("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135");
|
||||
const LLUUID ANIM_AGENT_TURNRIGHT = LLUUID("2d6daa51-3192-6794-8e2e-a15f8338ec30");
|
||||
const LLUUID ANIM_AGENT_TYPE = LLUUID("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9");
|
||||
const LLUUID ANIM_AGENT_WALK = LLUUID("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0");
|
||||
const LLUUID ANIM_AGENT_WALK_NEW = LLUUID("33339176-7ddc-9397-94a4-bf3403cbc8f5");
|
||||
const LLUUID ANIM_AGENT_WHISPER = LLUUID("7693f268-06c7-ea71-fa21-2b30d6533f8f");
|
||||
const LLUUID ANIM_AGENT_WHISTLE = LLUUID("b1ed7982-c68e-a982-7561-52a88a5298c0");
|
||||
const LLUUID ANIM_AGENT_WINK = LLUUID("869ecdad-a44b-671e-3266-56aef2e3ac2e");
|
||||
const LLUUID ANIM_AGENT_WINK_HOLLYWOOD = LLUUID("c0c4030f-c02b-49de-24ba-2331f43fe41c");
|
||||
const LLUUID ANIM_AGENT_WORRY = LLUUID("9f496bd2-589a-709f-16cc-69bf7df1d36c");
|
||||
const LLUUID ANIM_AGENT_YES = LLUUID("15dd911d-be82-2856-26db-27659b142875");
|
||||
const LLUUID ANIM_AGENT_YES_HAPPY = LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d");
|
||||
const LLUUID ANIM_AGENT_YOGA_FLOAT = LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb");
|
||||
LLUUID const ANIM_AGENT_AFRAID ("6b61c8e8-4747-0d75-12d7-e49ff207a4ca");
|
||||
LLUUID const ANIM_AGENT_AIM_BAZOOKA_R ("b5b4a67d-0aee-30d2-72cd-77b333e932ef");
|
||||
LLUUID const ANIM_AGENT_AIM_BOW_L ("46bb4359-de38-4ed8-6a22-f1f52fe8f506");
|
||||
LLUUID const ANIM_AGENT_AIM_HANDGUN_R ("3147d815-6338-b932-f011-16b56d9ac18b");
|
||||
LLUUID const ANIM_AGENT_AIM_RIFLE_R ("ea633413-8006-180a-c3ba-96dd1d756720");
|
||||
LLUUID const ANIM_AGENT_ANGRY ("5747a48e-073e-c331-f6f3-7c2149613d3e");
|
||||
LLUUID const ANIM_AGENT_AWAY ("fd037134-85d4-f241-72c6-4f42164fedee");
|
||||
LLUUID const ANIM_AGENT_BACKFLIP ("c4ca6188-9127-4f31-0158-23c4e2f93304");
|
||||
LLUUID const ANIM_AGENT_BELLY_LAUGH ("18b3a4b5-b463-bd48-e4b6-71eaac76c515");
|
||||
LLUUID const ANIM_AGENT_BLOW_KISS ("db84829b-462c-ee83-1e27-9bbee66bd624");
|
||||
LLUUID const ANIM_AGENT_BORED ("b906c4ba-703b-1940-32a3-0c7f7d791510");
|
||||
LLUUID const ANIM_AGENT_BOW ("82e99230-c906-1403-4d9c-3889dd98daba");
|
||||
LLUUID const ANIM_AGENT_BRUSH ("349a3801-54f9-bf2c-3bd0-1ac89772af01");
|
||||
LLUUID const ANIM_AGENT_BUSY ("efcf670c-2d18-8128-973a-034ebc806b67");
|
||||
LLUUID const ANIM_AGENT_CLAP ("9b0c1c4e-8ac7-7969-1494-28c874c4f668");
|
||||
LLUUID const ANIM_AGENT_COURTBOW ("9ba1c942-08be-e43a-fb29-16ad440efc50");
|
||||
LLUUID const ANIM_AGENT_CROUCH ("201f3fdf-cb1f-dbec-201f-7333e328ae7c");
|
||||
LLUUID const ANIM_AGENT_CROUCHWALK ("47f5f6fb-22e5-ae44-f871-73aaaf4a6022");
|
||||
LLUUID const ANIM_AGENT_CRY ("92624d3e-1068-f1aa-a5ec-8244585193ed");
|
||||
LLUUID const ANIM_AGENT_CUSTOMIZE ("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
|
||||
LLUUID const ANIM_AGENT_CUSTOMIZE_DONE ("6883a61a-b27b-5914-a61e-dda118a9ee2c");
|
||||
LLUUID const ANIM_AGENT_DANCE1 ("b68a3d7c-de9e-fc87-eec8-543d787e5b0d");
|
||||
LLUUID const ANIM_AGENT_DANCE2 ("928cae18-e31d-76fd-9cc9-2f55160ff818");
|
||||
LLUUID const ANIM_AGENT_DANCE3 ("30047778-10ea-1af7-6881-4db7a3a5a114");
|
||||
LLUUID const ANIM_AGENT_DANCE4 ("951469f4-c7b2-c818-9dee-ad7eea8c30b7");
|
||||
LLUUID const ANIM_AGENT_DANCE5 ("4bd69a1d-1114-a0b4-625f-84e0a5237155");
|
||||
LLUUID const ANIM_AGENT_DANCE6 ("cd28b69b-9c95-bb78-3f94-8d605ff1bb12");
|
||||
LLUUID const ANIM_AGENT_DANCE7 ("a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6");
|
||||
LLUUID const ANIM_AGENT_DANCE8 ("b0dc417c-1f11-af36-2e80-7e7489fa7cdc");
|
||||
LLUUID const ANIM_AGENT_DEAD ("57abaae6-1d17-7b1b-5f98-6d11a6411276");
|
||||
LLUUID const ANIM_AGENT_DRINK ("0f86e355-dd31-a61c-fdb0-3a96b9aad05f");
|
||||
LLUUID const ANIM_AGENT_EMBARRASSED ("514af488-9051-044a-b3fc-d4dbf76377c6");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_AFRAID ("aa2df84d-cf8f-7218-527b-424a52de766e");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_ANGER ("1a03b575-9634-b62a-5767-3a679e81f4de");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_BORED ("214aa6c1-ba6a-4578-f27c-ce7688f61d0d");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_CRY ("d535471b-85bf-3b4d-a542-93bea4f59d33");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_DISDAIN ("d4416ff1-09d3-300f-4183-1b68a19b9fc1");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_EMBARRASSED ("0b8c8211-d78c-33e8-fa28-c51a9594e424");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_FROWN ("fee3df48-fa3d-1015-1e26-a205810e3001");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_KISS ("1e8d90cc-a84e-e135-884c-7c82c8b03a14");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_LAUGH ("62570842-0950-96f8-341c-809e65110823");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_OPEN_MOUTH ("d63bc1f9-fc81-9625-a0c6-007176d82eb7");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_REPULSED ("f76cda94-41d4-a229-2872-e0296e58afe1");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_SAD ("eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_SHRUG ("a351b1bc-cc94-aac2-7bea-a7e6ebad15ef");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_SMILE ("b7c7c833-e3d3-c4e3-9fc0-131237446312");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_SURPRISE ("728646d9-cc79-08b2-32d6-937f0a835c24");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_TONGUE_OUT ("835965c6-7f2f-bda2-5deb-2478737f91bf");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_TOOTHSMILE ("b92ec1a5-e7ce-a76b-2b05-bcdb9311417e");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_WINK ("da020525-4d94-59d6-23d7-81fdebf33148");
|
||||
LLUUID const ANIM_AGENT_EXPRESS_WORRY ("9c05e5c7-6f07-6ca4-ed5a-b230390c3950");
|
||||
LLUUID const ANIM_AGENT_FALLDOWN ("666307d9-a860-572d-6fd4-c3ab8865c094");
|
||||
LLUUID const ANIM_AGENT_FEMALE_RUN_NEW ("85995026-eade-5d78-d364-94a64512cb66");
|
||||
LLUUID const ANIM_AGENT_FEMALE_WALK ("f5fc7433-043d-e819-8298-f519a119b688");
|
||||
LLUUID const ANIM_AGENT_FEMALE_WALK_NEW ("d60c41d2-7c24-7074-d3fa-6101cea22a51");
|
||||
LLUUID const ANIM_AGENT_FINGER_WAG ("c1bc7f36-3ba0-d844-f93c-93be945d644f");
|
||||
LLUUID const ANIM_AGENT_FIST_PUMP ("7db00ccd-f380-f3ee-439d-61968ec69c8a");
|
||||
LLUUID const ANIM_AGENT_FLY ("aec4610c-757f-bc4e-c092-c6e9caf18daf");
|
||||
LLUUID const ANIM_AGENT_FLYSLOW ("2b5a38b2-5e00-3a97-a495-4c826bc443e6");
|
||||
LLUUID const ANIM_AGENT_HELLO ("9b29cd61-c45b-5689-ded2-91756b8d76a9");
|
||||
LLUUID const ANIM_AGENT_HOLD_BAZOOKA_R ("ef62d355-c815-4816-2474-b1acc21094a6");
|
||||
LLUUID const ANIM_AGENT_HOLD_BOW_L ("8b102617-bcba-037b-86c1-b76219f90c88");
|
||||
LLUUID const ANIM_AGENT_HOLD_HANDGUN_R ("efdc1727-8b8a-c800-4077-975fc27ee2f2");
|
||||
LLUUID const ANIM_AGENT_HOLD_RIFLE_R ("3d94bad0-c55b-7dcc-8763-033c59405d33");
|
||||
LLUUID const ANIM_AGENT_HOLD_THROW_R ("7570c7b5-1f22-56dd-56ef-a9168241bbb6");
|
||||
LLUUID const ANIM_AGENT_HOVER ("4ae8016b-31b9-03bb-c401-b1ea941db41d");
|
||||
LLUUID const ANIM_AGENT_HOVER_DOWN ("20f063ea-8306-2562-0b07-5c853b37b31e");
|
||||
LLUUID const ANIM_AGENT_HOVER_UP ("62c5de58-cb33-5743-3d07-9e4cd4352864");
|
||||
LLUUID const ANIM_AGENT_IMPATIENT ("5ea3991f-c293-392e-6860-91dfa01278a3");
|
||||
LLUUID const ANIM_AGENT_JUMP ("2305bd75-1ca9-b03b-1faa-b176b8a8c49e");
|
||||
LLUUID const ANIM_AGENT_JUMP_FOR_JOY ("709ea28e-1573-c023-8bf8-520c8bc637fa");
|
||||
LLUUID const ANIM_AGENT_KISS_MY_BUTT ("19999406-3a3a-d58c-a2ac-d72e555dcf51");
|
||||
LLUUID const ANIM_AGENT_LAND ("7a17b059-12b2-41b1-570a-186368b6aa6f");
|
||||
LLUUID const ANIM_AGENT_LAUGH_SHORT ("ca5b3f14-3194-7a2b-c894-aa699b718d1f");
|
||||
LLUUID const ANIM_AGENT_MEDIUM_LAND ("f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57");
|
||||
LLUUID const ANIM_AGENT_MOTORCYCLE_SIT ("08464f78-3a8e-2944-cba5-0c94aff3af29");
|
||||
LLUUID const ANIM_AGENT_MUSCLE_BEACH ("315c3a41-a5f3-0ba4-27da-f893f769e69b");
|
||||
LLUUID const ANIM_AGENT_NO ("5a977ed9-7f72-44e9-4c4c-6e913df8ae74");
|
||||
LLUUID const ANIM_AGENT_NO_UNHAPPY ("d83fa0e5-97ed-7eb2-e798-7bd006215cb4");
|
||||
LLUUID const ANIM_AGENT_NYAH_NYAH ("f061723d-0a18-754f-66ee-29a44795a32f");
|
||||
LLUUID const ANIM_AGENT_ONETWO_PUNCH ("eefc79be-daae-a239-8c04-890f5d23654a");
|
||||
LLUUID const ANIM_AGENT_PEACE ("b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9");
|
||||
LLUUID const ANIM_AGENT_POINT_ME ("17c024cc-eef2-f6a0-3527-9869876d7752");
|
||||
LLUUID const ANIM_AGENT_POINT_YOU ("ec952cca-61ef-aa3b-2789-4d1344f016de");
|
||||
LLUUID const ANIM_AGENT_PRE_JUMP ("7a4e87fe-de39-6fcb-6223-024b00893244");
|
||||
LLUUID const ANIM_AGENT_PUNCH_LEFT ("f3300ad9-3462-1d07-2044-0fef80062da0");
|
||||
LLUUID const ANIM_AGENT_PUNCH_RIGHT ("c8e42d32-7310-6906-c903-cab5d4a34656");
|
||||
LLUUID const ANIM_AGENT_REPULSED ("36f81a92-f076-5893-dc4b-7c3795e487cf");
|
||||
LLUUID const ANIM_AGENT_ROUNDHOUSE_KICK ("49aea43b-5ac3-8a44-b595-96100af0beda");
|
||||
LLUUID const ANIM_AGENT_RPS_COUNTDOWN ("35db4f7e-28c2-6679-cea9-3ee108f7fc7f");
|
||||
LLUUID const ANIM_AGENT_RPS_PAPER ("0836b67f-7f7b-f37b-c00a-460dc1521f5a");
|
||||
LLUUID const ANIM_AGENT_RPS_ROCK ("42dd95d5-0bc6-6392-f650-777304946c0f");
|
||||
LLUUID const ANIM_AGENT_RPS_SCISSORS ("16803a9f-5140-e042-4d7b-d28ba247c325");
|
||||
LLUUID const ANIM_AGENT_RUN ("05ddbff8-aaa9-92a1-2b74-8fe77a29b445");
|
||||
LLUUID const ANIM_AGENT_RUN_NEW ("1ab1b236-cd08-21e6-0cbc-0d923fc6eca2");
|
||||
LLUUID const ANIM_AGENT_SAD ("0eb702e2-cc5a-9a88-56a5-661a55c0676a");
|
||||
LLUUID const ANIM_AGENT_SALUTE ("cd7668a6-7011-d7e2-ead8-fc69eff1a104");
|
||||
LLUUID const ANIM_AGENT_SHOOT_BOW_L ("e04d450d-fdb5-0432-fd68-818aaf5935f8");
|
||||
LLUUID const ANIM_AGENT_SHOUT ("6bd01860-4ebd-127a-bb3d-d1427e8e0c42");
|
||||
LLUUID const ANIM_AGENT_SHRUG ("70ea714f-3a97-d742-1b01-590a8fcd1db5");
|
||||
LLUUID const ANIM_AGENT_SIT ("1a5fe8ac-a804-8a5d-7cbd-56bd83184568");
|
||||
LLUUID const ANIM_AGENT_SIT_FEMALE ("b1709c8d-ecd3-54a1-4f28-d55ac0840782");
|
||||
LLUUID const ANIM_AGENT_SIT_GENERIC ("245f3c54-f1c0-bf2e-811f-46d8eeb386e7");
|
||||
LLUUID const ANIM_AGENT_SIT_GROUND ("1c7600d6-661f-b87b-efe2-d7421eb93c86");
|
||||
LLUUID const ANIM_AGENT_SIT_GROUND_CONSTRAINED("1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e");
|
||||
LLUUID const ANIM_AGENT_SIT_TO_STAND ("a8dee56f-2eae-9e7a-05a2-6fb92b97e21e");
|
||||
LLUUID const ANIM_AGENT_SLEEP ("f2bed5f9-9d44-39af-b0cd-257b2a17fe40");
|
||||
LLUUID const ANIM_AGENT_SMOKE_IDLE ("d2f2ee58-8ad1-06c9-d8d3-3827ba31567a");
|
||||
LLUUID const ANIM_AGENT_SMOKE_INHALE ("6802d553-49da-0778-9f85-1599a2266526");
|
||||
LLUUID const ANIM_AGENT_SMOKE_THROW_DOWN ("0a9fb970-8b44-9114-d3a9-bf69cfe804d6");
|
||||
LLUUID const ANIM_AGENT_SNAPSHOT ("eae8905b-271a-99e2-4c0e-31106afd100c");
|
||||
LLUUID const ANIM_AGENT_STAND ("2408fe9e-df1d-1d7d-f4ff-1384fa7b350f");
|
||||
LLUUID const ANIM_AGENT_STANDUP ("3da1d753-028a-5446-24f3-9c9b856d9422");
|
||||
LLUUID const ANIM_AGENT_STAND_1 ("15468e00-3400-bb66-cecc-646d7c14458e");
|
||||
LLUUID const ANIM_AGENT_STAND_2 ("370f3a20-6ca6-9971-848c-9a01bc42ae3c");
|
||||
LLUUID const ANIM_AGENT_STAND_3 ("42b46214-4b44-79ae-deb8-0df61424ff4b");
|
||||
LLUUID const ANIM_AGENT_STAND_4 ("f22fed8b-a5ed-2c93-64d5-bdd8b93c889f");
|
||||
LLUUID const ANIM_AGENT_STRETCH ("80700431-74ec-a008-14f8-77575e73693f");
|
||||
LLUUID const ANIM_AGENT_STRIDE ("1cb562b0-ba21-2202-efb3-30f82cdf9595");
|
||||
LLUUID const ANIM_AGENT_SURF ("41426836-7437-7e89-025d-0aa4d10f1d69");
|
||||
LLUUID const ANIM_AGENT_SURPRISE ("313b9881-4302-73c0-c7d0-0e7a36b6c224");
|
||||
LLUUID const ANIM_AGENT_SWORD_STRIKE ("85428680-6bf9-3e64-b489-6f81087c24bd");
|
||||
LLUUID const ANIM_AGENT_TALK ("5c682a95-6da4-a463-0bf6-0f5b7be129d1");
|
||||
LLUUID const ANIM_AGENT_TANTRUM ("11000694-3f41-adc2-606b-eee1d66f3724");
|
||||
LLUUID const ANIM_AGENT_THROW_R ("aa134404-7dac-7aca-2cba-435f9db875ca");
|
||||
LLUUID const ANIM_AGENT_TRYON_SHIRT ("83ff59fe-2346-f236-9009-4e3608af64c1");
|
||||
LLUUID const ANIM_AGENT_TURNLEFT ("56e0ba0d-4a9f-7f27-6117-32f2ebbf6135");
|
||||
LLUUID const ANIM_AGENT_TURNRIGHT ("2d6daa51-3192-6794-8e2e-a15f8338ec30");
|
||||
LLUUID const ANIM_AGENT_TYPE ("c541c47f-e0c0-058b-ad1a-d6ae3a4584d9");
|
||||
LLUUID const ANIM_AGENT_WALK ("6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0");
|
||||
LLUUID const ANIM_AGENT_WALK_NEW ("33339176-7ddc-9397-94a4-bf3403cbc8f5");
|
||||
LLUUID const ANIM_AGENT_WHISPER ("7693f268-06c7-ea71-fa21-2b30d6533f8f");
|
||||
LLUUID const ANIM_AGENT_WHISTLE ("b1ed7982-c68e-a982-7561-52a88a5298c0");
|
||||
LLUUID const ANIM_AGENT_WINK ("869ecdad-a44b-671e-3266-56aef2e3ac2e");
|
||||
LLUUID const ANIM_AGENT_WINK_HOLLYWOOD ("c0c4030f-c02b-49de-24ba-2331f43fe41c");
|
||||
LLUUID const ANIM_AGENT_WORRY ("9f496bd2-589a-709f-16cc-69bf7df1d36c");
|
||||
LLUUID const ANIM_AGENT_YES ("15dd911d-be82-2856-26db-27659b142875");
|
||||
LLUUID const ANIM_AGENT_YES_HAPPY ("b8c8b2a3-9008-1771-3bfc-90924955ab2d");
|
||||
LLUUID const ANIM_AGENT_YOGA_FLOAT ("42ecd00b-9947-a97c-400a-bbc9174c7aeb");
|
||||
|
||||
LLUUID AGENT_WALK_ANIMS[] = {ANIM_AGENT_WALK, ANIM_AGENT_RUN, ANIM_AGENT_CROUCHWALK, ANIM_AGENT_TURNLEFT, ANIM_AGENT_TURNRIGHT};
|
||||
S32 NUM_AGENT_WALK_ANIMS = LL_ARRAY_SIZE(AGENT_WALK_ANIMS);
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@ const U32 AVATAR_TRANSACTED = 0x1 << 3; // whether avatar has actively used p
|
|||
const U32 AVATAR_ONLINE = 0x1 << 4; // the online status of this avatar, if known.
|
||||
const U32 AVATAR_AGEVERIFIED = 0x1 << 5; // whether avatar has been age-verified
|
||||
|
||||
static const std::string VISIBILITY_DEFAULT("default");
|
||||
static const std::string VISIBILITY_HIDDEN("hidden");
|
||||
static const std::string VISIBILITY_VISIBLE("visible");
|
||||
static const std::string VISIBILITY_INVISIBLE("invisible");
|
||||
char const* const VISIBILITY_DEFAULT = "default";
|
||||
char const* const VISIBILITY_HIDDEN = "hidden";
|
||||
char const* const VISIBILITY_VISIBLE = "visible";
|
||||
char const* const VISIBILITY_INVISIBLE = "invisible";
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ const S32 OBJECT_GROUP = 7;
|
|||
const S32 OBJECT_CREATOR = 8;
|
||||
|
||||
// llTextBox() magic token string - yes this is a hack. sue me.
|
||||
const std::string TEXTBOX_MAGIC_TOKEN = "!!llTextBox!!";
|
||||
char const* const TEXTBOX_MAGIC_TOKEN = "!!llTextBox!!";
|
||||
|
||||
// changed() event flags
|
||||
const U32 CHANGED_NONE = 0x0;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,12 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llmemory.h"
|
||||
|
||||
#if MEM_TRACK_MEM
|
||||
#include "llthread.h"
|
||||
#endif
|
||||
|
||||
#if defined(LL_WINDOWS)
|
||||
# include <windows.h>
|
||||
# include <psapi.h>
|
||||
|
|
@ -37,8 +43,6 @@
|
|||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "llmemory.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//static
|
||||
|
|
@ -105,6 +109,20 @@ U64 LLMemory::getCurrentRSS()
|
|||
return counters.WorkingSetSize;
|
||||
}
|
||||
|
||||
//static
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS pmc ;
|
||||
U32 ret = 0 ;
|
||||
|
||||
if (GetProcessMemoryInfo( GetCurrentProcess(), &pmc, sizeof(pmc)) )
|
||||
{
|
||||
ret = pmc.WorkingSetSize ;
|
||||
}
|
||||
|
||||
return ret ;
|
||||
}
|
||||
|
||||
#elif defined(LL_DARWIN)
|
||||
|
||||
/*
|
||||
|
|
@ -151,6 +169,11 @@ U64 LLMemory::getCurrentRSS()
|
|||
return residentSize;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#elif defined(LL_LINUX)
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
|
|
@ -185,6 +208,11 @@ bail:
|
|||
return rss;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#elif LL_SOLARIS
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
|
@ -213,6 +241,12 @@ U64 LLMemory::getCurrentRSS()
|
|||
|
||||
return((U64)proc_psinfo.pr_rssize * 1024);
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
|
|
@ -220,4 +254,144 @@ U64 LLMemory::getCurrentRSS()
|
|||
return 0;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
#if MEM_TRACK_MEM
|
||||
#include "llframetimer.h"
|
||||
|
||||
//static
|
||||
LLMemTracker* LLMemTracker::sInstance = NULL ;
|
||||
|
||||
LLMemTracker::LLMemTracker()
|
||||
{
|
||||
mLastAllocatedMem = LLMemory::getWorkingSetSize() ;
|
||||
mCapacity = 128 ;
|
||||
mCurIndex = 0 ;
|
||||
mCounter = 0 ;
|
||||
mDrawnIndex = 0 ;
|
||||
mPaused = FALSE ;
|
||||
|
||||
mMutexp = new LLMutex(NULL) ;
|
||||
mStringBuffer = new char*[128] ;
|
||||
mStringBuffer[0] = new char[mCapacity * 128] ;
|
||||
for(S32 i = 1 ; i < mCapacity ; i++)
|
||||
{
|
||||
mStringBuffer[i] = mStringBuffer[i-1] + 128 ;
|
||||
}
|
||||
}
|
||||
|
||||
LLMemTracker::~LLMemTracker()
|
||||
{
|
||||
delete[] mStringBuffer[0] ;
|
||||
delete[] mStringBuffer;
|
||||
delete mMutexp ;
|
||||
}
|
||||
|
||||
//static
|
||||
LLMemTracker* LLMemTracker::getInstance()
|
||||
{
|
||||
if(!sInstance)
|
||||
{
|
||||
sInstance = new LLMemTracker() ;
|
||||
}
|
||||
return sInstance ;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLMemTracker::release()
|
||||
{
|
||||
if(sInstance)
|
||||
{
|
||||
delete sInstance ;
|
||||
sInstance = NULL ;
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLMemTracker::track(const char* function, const int line)
|
||||
{
|
||||
static const S32 MIN_ALLOCATION = 0 ; //1KB
|
||||
|
||||
if(mPaused)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
U32 allocated_mem = LLMemory::getWorkingSetSize() ;
|
||||
|
||||
LLMutexLock lock(mMutexp) ;
|
||||
|
||||
S32 delta_mem = allocated_mem - mLastAllocatedMem ;
|
||||
mLastAllocatedMem = allocated_mem ;
|
||||
|
||||
if(delta_mem <= 0)
|
||||
{
|
||||
return ; //occupied memory does not grow
|
||||
}
|
||||
|
||||
if(delta_mem < MIN_ALLOCATION)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
char* buffer = mStringBuffer[mCurIndex++] ;
|
||||
F32 time = (F32)LLFrameTimer::getElapsedSeconds() ;
|
||||
S32 hours = (S32)(time / (60*60));
|
||||
S32 mins = (S32)((time - hours*(60*60)) / 60);
|
||||
S32 secs = (S32)((time - hours*(60*60) - mins*60));
|
||||
strcpy(buffer, function) ;
|
||||
sprintf(buffer + strlen(function), " line: %d DeltaMem: %d (bytes) Time: %d:%02d:%02d", line, delta_mem, hours,mins,secs) ;
|
||||
|
||||
if(mCounter < mCapacity)
|
||||
{
|
||||
mCounter++ ;
|
||||
}
|
||||
if(mCurIndex >= mCapacity)
|
||||
{
|
||||
mCurIndex = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
void LLMemTracker::preDraw(BOOL pause)
|
||||
{
|
||||
mMutexp->lock() ;
|
||||
|
||||
mPaused = pause ;
|
||||
mDrawnIndex = mCurIndex - 1;
|
||||
mNumOfDrawn = 0 ;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLMemTracker::postDraw()
|
||||
{
|
||||
mMutexp->unlock() ;
|
||||
}
|
||||
|
||||
//static
|
||||
const char* LLMemTracker::getNextLine()
|
||||
{
|
||||
if(mNumOfDrawn >= mCounter)
|
||||
{
|
||||
return NULL ;
|
||||
}
|
||||
mNumOfDrawn++;
|
||||
|
||||
if(mDrawnIndex < 0)
|
||||
{
|
||||
mDrawnIndex = mCapacity - 1 ;
|
||||
}
|
||||
|
||||
return mStringBuffer[mDrawnIndex--] ;
|
||||
}
|
||||
|
||||
#endif //MEM_TRACK_MEM
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#ifndef LLMEMORY_H
|
||||
#define LLMEMORY_H
|
||||
|
||||
|
||||
#include "llmemtype.h"
|
||||
|
||||
extern S32 gTotalDAlloc;
|
||||
extern S32 gTotalDAUse;
|
||||
|
|
@ -44,10 +44,55 @@ public:
|
|||
// Return the resident set size of the current process, in bytes.
|
||||
// Return value is zero if not known.
|
||||
static U64 getCurrentRSS();
|
||||
static U32 getWorkingSetSize();
|
||||
private:
|
||||
static char* reserveMem;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
#if MEM_TRACK_MEM
|
||||
class LLMutex ;
|
||||
class LL_COMMON_API LLMemTracker
|
||||
{
|
||||
private:
|
||||
LLMemTracker() ;
|
||||
~LLMemTracker() ;
|
||||
|
||||
public:
|
||||
static void release() ;
|
||||
static LLMemTracker* getInstance() ;
|
||||
|
||||
void track(const char* function, const int line) ;
|
||||
void preDraw(BOOL pause) ;
|
||||
void postDraw() ;
|
||||
const char* getNextLine() ;
|
||||
|
||||
private:
|
||||
static LLMemTracker* sInstance ;
|
||||
|
||||
char** mStringBuffer ;
|
||||
S32 mCapacity ;
|
||||
U32 mLastAllocatedMem ;
|
||||
S32 mCurIndex ;
|
||||
S32 mCounter;
|
||||
S32 mDrawnIndex;
|
||||
S32 mNumOfDrawn;
|
||||
BOOL mPaused;
|
||||
LLMutex* mMutexp ;
|
||||
};
|
||||
|
||||
#define MEM_TRACK_RELEASE LLMemTracker::release() ;
|
||||
#define MEM_TRACK LLMemTracker::getInstance()->track(__FUNCTION__, __LINE__) ;
|
||||
|
||||
#else // MEM_TRACK_MEM
|
||||
|
||||
#define MEM_TRACK_RELEASE
|
||||
#define MEM_TRACK
|
||||
|
||||
#endif // MEM_TRACK_MEM
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
// LLRefCount moved to llrefcount.h
|
||||
|
||||
// LLPointer moved to llpointer.h
|
||||
|
|
|
|||
|
|
@ -229,3 +229,4 @@ char const * LLMemType::getNameFromID(S32 id)
|
|||
return DeclareMemType::mNameList[id];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#ifndef LL_METRICPERFORMANCETESTER_H
|
||||
#define LL_METRICPERFORMANCETESTER_H
|
||||
|
||||
const std::string DEFAULT_METRIC_NAME("metric");
|
||||
char const* const DEFAULT_METRIC_NAME = "metric";
|
||||
|
||||
/**
|
||||
* @class LLMetricPerformanceTesterBasic
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@
|
|||
#define LL_LLVERSIONVIEWER_H
|
||||
|
||||
const S32 LL_VERSION_MAJOR = 2;
|
||||
const S32 LL_VERSION_MINOR = 6;
|
||||
const S32 LL_VERSION_PATCH = 0;
|
||||
const S32 LL_VERSION_MINOR = 5;
|
||||
const S32 LL_VERSION_PATCH = 1;
|
||||
const S32 LL_VERSION_BUILD = 0;
|
||||
|
||||
const char * const LL_CHANNEL = "Second Life Developer";
|
||||
|
|
|
|||
|
|
@ -274,11 +274,11 @@ LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components)
|
|||
++sRawImageCount;
|
||||
}
|
||||
|
||||
LLImageRaw::LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only)
|
||||
: LLImageBase()
|
||||
{
|
||||
createFromFile(filename, j2c_lowest_mip_only);
|
||||
}
|
||||
//LLImageRaw::LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only)
|
||||
// : LLImageBase()
|
||||
//{
|
||||
// createFromFile(filename, j2c_lowest_mip_only);
|
||||
//}
|
||||
|
||||
LLImageRaw::~LLImageRaw()
|
||||
{
|
||||
|
|
@ -1178,7 +1178,7 @@ file_extensions[] =
|
|||
{ "png", IMG_CODEC_PNG }
|
||||
};
|
||||
#define NUM_FILE_EXTENSIONS LL_ARRAY_SIZE(file_extensions)
|
||||
|
||||
#if 0
|
||||
static std::string find_file(std::string &name, S8 *codec)
|
||||
{
|
||||
std::string tname;
|
||||
|
|
@ -1196,7 +1196,7 @@ static std::string find_file(std::string &name, S8 *codec)
|
|||
}
|
||||
return std::string("");
|
||||
}
|
||||
|
||||
#endif
|
||||
EImageCodec LLImageBase::getCodecFromExtension(const std::string& exten)
|
||||
{
|
||||
for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++)
|
||||
|
|
@ -1206,7 +1206,7 @@ EImageCodec LLImageBase::getCodecFromExtension(const std::string& exten)
|
|||
}
|
||||
return IMG_CODEC_INVALID;
|
||||
}
|
||||
|
||||
#if 0
|
||||
bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip_only)
|
||||
{
|
||||
std::string name = filename;
|
||||
|
|
@ -1313,7 +1313,7 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
//---------------------------------------------------------------------------
|
||||
// LLImageFormatted
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ public:
|
|||
LLImageRaw(U16 width, U16 height, S8 components);
|
||||
LLImageRaw(U8 *data, U16 width, U16 height, S8 components);
|
||||
// Construct using createFromFile (used by tools)
|
||||
LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only = false);
|
||||
//LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only = false);
|
||||
|
||||
/*virtual*/ void deleteData();
|
||||
/*virtual*/ U8* allocateData(S32 size = -1);
|
||||
|
|
@ -226,7 +226,7 @@ public:
|
|||
|
||||
protected:
|
||||
// Create an image from a local file (generally used in tools)
|
||||
bool createFromFile(const std::string& filename, bool j2c_lowest_mip_only = false);
|
||||
//bool createFromFile(const std::string& filename, bool j2c_lowest_mip_only = false);
|
||||
|
||||
void copyLineScaled( U8* in, U8* out, S32 in_pixel_len, S32 out_pixel_len, S32 in_pixel_step, S32 out_pixel_step );
|
||||
void compositeRowScaled4onto3( U8* in, U8* out, S32 in_pixel_len, S32 out_pixel_len );
|
||||
|
|
|
|||
|
|
@ -38,6 +38,12 @@ LLImageDecodeThread::LLImageDecodeThread(bool threaded)
|
|||
mCreationMutex = new LLMutex(getAPRPool());
|
||||
}
|
||||
|
||||
//virtual
|
||||
LLImageDecodeThread::~LLImageDecodeThread()
|
||||
{
|
||||
delete mCreationMutex ;
|
||||
}
|
||||
|
||||
// MAIN THREAD
|
||||
// virtual
|
||||
S32 LLImageDecodeThread::update(U32 max_time_ms)
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ public:
|
|||
|
||||
public:
|
||||
LLImageDecodeThread(bool threaded = true);
|
||||
virtual ~LLImageDecodeThread();
|
||||
|
||||
handle_t decodeImage(LLImageFormatted* image,
|
||||
U32 priority, S32 discard, BOOL needs_aux,
|
||||
Responder* responder);
|
||||
|
|
|
|||
|
|
@ -703,6 +703,7 @@ void LLCamera::calculateFrustumPlanes(F32 left, F32 right, F32 top, F32 bottom)
|
|||
mLocalPlanes[PLANE_BOTTOM].setVec( a, c, b);
|
||||
|
||||
//calculate center and radius squared of frustum in world absolute coordinates
|
||||
static LLVector3 const X_AXIS(1.f, 0.f, 0.f);
|
||||
mFrustCenter = X_AXIS*mFarPlane*0.5f;
|
||||
mFrustCenter = transformToAbsolute(mFrustCenter);
|
||||
mFrustRadiusSquared = mFarPlane*0.5f;
|
||||
|
|
|
|||
|
|
@ -50,15 +50,6 @@ const F32 MIN_FAR_PLANE = 0.2f;
|
|||
static const F32 MIN_FIELD_OF_VIEW = 5.0f * DEG_TO_RAD;
|
||||
static const F32 MAX_FIELD_OF_VIEW = 175.f * DEG_TO_RAD;
|
||||
|
||||
static const LLVector3 X_AXIS(1.f,0.f,0.f);
|
||||
static const LLVector3 Y_AXIS(0.f,1.f,0.f);
|
||||
static const LLVector3 Z_AXIS(0.f,0.f,1.f);
|
||||
|
||||
static const LLVector3 NEG_X_AXIS(-1.f,0.f,0.f);
|
||||
static const LLVector3 NEG_Y_AXIS(0.f,-1.f,0.f);
|
||||
static const LLVector3 NEG_Z_AXIS(0.f,0.f,-1.f);
|
||||
|
||||
|
||||
// An LLCamera is an LLCoorFrame with a view frustum.
|
||||
// This means that it has several methods for moving it around
|
||||
// that are inherited from the LLCoordFrame() class :
|
||||
|
|
|
|||
|
|
@ -4406,19 +4406,54 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep)
|
|||
|
||||
BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
|
||||
{
|
||||
BOOL ret = FALSE ;
|
||||
if (mTypeMask & CAP_MASK)
|
||||
{
|
||||
return createCap(volume, partial_build);
|
||||
ret = createCap(volume, partial_build);
|
||||
}
|
||||
else if ((mTypeMask & END_MASK) || (mTypeMask & SIDE_MASK))
|
||||
{
|
||||
return createSide(volume, partial_build);
|
||||
ret = createSide(volume, partial_build);
|
||||
}
|
||||
else
|
||||
{
|
||||
llerrs << "Unknown/uninitialized face type!" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//update the range of the texture coordinates
|
||||
if(ret)
|
||||
{
|
||||
mTexCoordExtents[0].setVec(1.f, 1.f) ;
|
||||
mTexCoordExtents[1].setVec(0.f, 0.f) ;
|
||||
|
||||
U32 end = mVertices.size() ;
|
||||
for(U32 i = 0 ; i < end ; i++)
|
||||
{
|
||||
if(mTexCoordExtents[0].mV[0] > mVertices[i].mTexCoord.mV[0])
|
||||
{
|
||||
mTexCoordExtents[0].mV[0] = mVertices[i].mTexCoord.mV[0] ;
|
||||
}
|
||||
if(mTexCoordExtents[1].mV[0] < mVertices[i].mTexCoord.mV[0])
|
||||
{
|
||||
mTexCoordExtents[1].mV[0] = mVertices[i].mTexCoord.mV[0] ;
|
||||
}
|
||||
|
||||
if(mTexCoordExtents[0].mV[1] > mVertices[i].mTexCoord.mV[1])
|
||||
{
|
||||
mTexCoordExtents[0].mV[1] = mVertices[i].mTexCoord.mV[1] ;
|
||||
}
|
||||
if(mTexCoordExtents[1].mV[1] < mVertices[i].mTexCoord.mV[1])
|
||||
{
|
||||
mTexCoordExtents[1].mV[1] = mVertices[i].mTexCoord.mV[1] ;
|
||||
}
|
||||
}
|
||||
mTexCoordExtents[0].mV[0] = llmax(0.f, mTexCoordExtents[0].mV[0]) ;
|
||||
mTexCoordExtents[0].mV[1] = llmax(0.f, mTexCoordExtents[0].mV[1]) ;
|
||||
mTexCoordExtents[1].mV[0] = llmin(1.f, mTexCoordExtents[1].mV[0]) ;
|
||||
mTexCoordExtents[1].mV[1] = llmin(1.f, mTexCoordExtents[1].mV[1]) ;
|
||||
}
|
||||
|
||||
return ret ;
|
||||
}
|
||||
|
||||
void LerpPlanarVertex(LLVolumeFace::VertexData& v0,
|
||||
|
|
|
|||
|
|
@ -831,6 +831,7 @@ public:
|
|||
S32 mNumT;
|
||||
|
||||
LLVector3 mExtents[2]; //minimum and maximum point of face
|
||||
LLVector2 mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face.
|
||||
|
||||
std::vector<VertexData> mVertices;
|
||||
std::vector<U16> mIndices;
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ namespace tut
|
|||
{
|
||||
skip("this test is flaky, but we should figure out why...");
|
||||
// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\"");
|
||||
std::string hostStr = "linux.org";
|
||||
std::string hostStr = "lindenlab.com";
|
||||
LLHost host;
|
||||
host.setHostByName(hostStr);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file test_llsdmessage_peer.py
|
||||
@author Nat Goodspeed
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file testrunner.py
|
||||
@author Nat Goodspeed
|
||||
|
|
|
|||
|
|
@ -64,9 +64,10 @@ LLPluginClassMedia::~LLPluginClassMedia()
|
|||
reset();
|
||||
}
|
||||
|
||||
bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug)
|
||||
bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)
|
||||
{
|
||||
LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL;
|
||||
LL_DEBUGS("Plugin") << "dir: " << plugin_dir << LL_ENDL;
|
||||
LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL;
|
||||
|
||||
mPlugin = new LLPluginProcessParent(this);
|
||||
|
|
@ -77,7 +78,7 @@ bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::s
|
|||
message.setValue("target", mTarget);
|
||||
sendMessage(message);
|
||||
|
||||
mPlugin->init(launcher_filename, plugin_filename, debug);
|
||||
mPlugin->init(launcher_filename, plugin_dir, plugin_filename, debug);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ public:
|
|||
|
||||
// local initialization, called by the media manager when creating a source
|
||||
virtual bool init(const std::string &launcher_filename,
|
||||
const std::string &plugin_dir,
|
||||
const std::string &plugin_filename,
|
||||
bool debug);
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@
|
|||
|
||||
#include "llapr.h"
|
||||
|
||||
#if LL_WINDOWS
|
||||
#include "direct.h" // needed for _chdir()
|
||||
#endif
|
||||
|
||||
/** Virtual destructor. */
|
||||
LLPluginInstanceMessageListener::~LLPluginInstanceMessageListener()
|
||||
{
|
||||
|
|
@ -73,10 +77,24 @@ LLPluginInstance::~LLPluginInstance()
|
|||
* @param[in] plugin_file Name of plugin dll/dylib/so. TODO:DOC is this correct? see .h
|
||||
* @return 0 if successful, APR error code or error code from the plugin's init function on failure.
|
||||
*/
|
||||
int LLPluginInstance::load(std::string &plugin_file)
|
||||
int LLPluginInstance::load(const std::string& plugin_dir, std::string &plugin_file)
|
||||
{
|
||||
pluginInitFunction init_function = NULL;
|
||||
|
||||
if ( plugin_dir.length() )
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
// VWR-21275:
|
||||
// *SOME* Windows systems fail to load the Qt plugins if the current working
|
||||
// directory is not the same as the directory with the Qt DLLs in.
|
||||
// This should not cause any run time issues since we are changing the cwd for the
|
||||
// plugin shell process and not the viewer.
|
||||
// Changing back to the previous directory is not necessary since the plugin shell
|
||||
// quits once the plugin exits.
|
||||
_chdir( plugin_dir.c_str() );
|
||||
#endif
|
||||
};
|
||||
|
||||
int result = apr_dso_load(&mDSOHandle,
|
||||
plugin_file.c_str(),
|
||||
gAPRPoolp);
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public:
|
|||
|
||||
// Load a plugin dll/dylib/so
|
||||
// Returns 0 if successful, APR error code or error code returned from the plugin's init function on failure.
|
||||
int load(std::string &plugin_file);
|
||||
int load(const std::string& plugin_dir, std::string &plugin_file);
|
||||
|
||||
// Sends a message to the plugin.
|
||||
void sendMessage(const std::string &message);
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ void LLPluginProcessChild::idle(void)
|
|||
if(!mPluginFile.empty())
|
||||
{
|
||||
mInstance = new LLPluginInstance(this);
|
||||
if(mInstance->load(mPluginFile) == 0)
|
||||
if(mInstance->load(mPluginDir, mPluginFile) == 0)
|
||||
{
|
||||
mHeartbeat.start();
|
||||
mHeartbeat.setTimerExpirySec(HEARTBEAT_SECONDS);
|
||||
|
|
@ -348,6 +348,7 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message)
|
|||
if(message_name == "load_plugin")
|
||||
{
|
||||
mPluginFile = parsed.getValue("file");
|
||||
mPluginDir = parsed.getValue("dir");
|
||||
}
|
||||
else if(message_name == "shm_add")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ private:
|
|||
LLSocket::ptr_t mSocket;
|
||||
|
||||
std::string mPluginFile;
|
||||
std::string mPluginDir;
|
||||
|
||||
LLPluginInstance *mInstance;
|
||||
|
||||
|
|
|
|||
|
|
@ -157,10 +157,11 @@ void LLPluginProcessParent::errorState(void)
|
|||
setState(STATE_ERROR);
|
||||
}
|
||||
|
||||
void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug)
|
||||
void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)
|
||||
{
|
||||
mProcess.setExecutable(launcher_filename);
|
||||
mPluginFile = plugin_filename;
|
||||
mPluginDir = plugin_dir;
|
||||
mCPUUsage = 0.0f;
|
||||
mDebug = debug;
|
||||
setState(STATE_INITIALIZED);
|
||||
|
|
@ -445,6 +446,7 @@ void LLPluginProcessParent::idle(void)
|
|||
{
|
||||
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "load_plugin");
|
||||
message.setValue("file", mPluginFile);
|
||||
message.setValue("dir", mPluginDir);
|
||||
sendMessage(message);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ public:
|
|||
~LLPluginProcessParent();
|
||||
|
||||
void init(const std::string &launcher_filename,
|
||||
const std::string &plugin_dir,
|
||||
const std::string &plugin_filename,
|
||||
bool debug);
|
||||
|
||||
|
|
@ -151,6 +152,7 @@ private:
|
|||
LLProcessLauncher mProcess;
|
||||
|
||||
std::string mPluginFile;
|
||||
std::string mPluginDir;
|
||||
|
||||
LLPluginProcessParentOwner *mOwner;
|
||||
|
||||
|
|
|
|||
|
|
@ -403,7 +403,7 @@ S32 LLTextureEntry::setOffsetT(F32 t)
|
|||
|
||||
S32 LLTextureEntry::setRotation(F32 theta)
|
||||
{
|
||||
if (mRotation != theta)
|
||||
if (mRotation != theta && llfinite(theta))
|
||||
{
|
||||
mRotation = theta;
|
||||
return TEM_CHANGE_TEXTURE;
|
||||
|
|
|
|||
|
|
@ -1063,16 +1063,6 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_
|
|||
{
|
||||
if (gGL.getTexUnit(0)->bind(this, false, true))
|
||||
{
|
||||
if(gGLManager.mDebugGPU)
|
||||
{
|
||||
llinfos << "Calling glCopyTexSubImage2D(...)" << llendl ;
|
||||
checkTexSize(true) ;
|
||||
llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height <<
|
||||
" : " << (S32)mComponents << llcallstacksendl ;
|
||||
|
||||
log_glerror() ;
|
||||
}
|
||||
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height);
|
||||
mGLTextureCreated = true;
|
||||
stop_glerror();
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ U32 LLVertexBuffer::sSetCount = 0;
|
|||
S32 LLVertexBuffer::sCount = 0;
|
||||
S32 LLVertexBuffer::sGLCount = 0;
|
||||
S32 LLVertexBuffer::sMappedCount = 0;
|
||||
BOOL LLVertexBuffer::sDisableVBOMapping = FALSE ;
|
||||
BOOL LLVertexBuffer::sEnableVBOs = TRUE;
|
||||
U32 LLVertexBuffer::sGLRenderBuffer = 0;
|
||||
U32 LLVertexBuffer::sGLRenderIndices = 0;
|
||||
|
|
@ -251,6 +252,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
|
|||
void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
|
||||
{
|
||||
llassert(mRequestedNumIndices >= 0);
|
||||
|
||||
if (indices_offset >= (U32) mRequestedNumIndices ||
|
||||
indices_offset + count > (U32) mRequestedNumIndices)
|
||||
{
|
||||
|
|
@ -282,6 +284,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
|
|||
void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
|
||||
{
|
||||
llassert(mRequestedNumVerts >= 0);
|
||||
|
||||
if (first >= (U32) mRequestedNumVerts ||
|
||||
first + count > (U32) mRequestedNumVerts)
|
||||
{
|
||||
|
|
@ -305,9 +308,10 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
|
|||
}
|
||||
|
||||
//static
|
||||
void LLVertexBuffer::initClass(bool use_vbo)
|
||||
void LLVertexBuffer::initClass(bool use_vbo, bool no_vbo_mapping)
|
||||
{
|
||||
sEnableVBOs = use_vbo;
|
||||
sDisableVBOMapping = sEnableVBOs && no_vbo_mapping ;
|
||||
LLGLNamePool::registerPool(&sDynamicVBOPool);
|
||||
LLGLNamePool::registerPool(&sDynamicIBOPool);
|
||||
LLGLNamePool::registerPool(&sStreamVBOPool);
|
||||
|
|
@ -364,7 +368,9 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
|
|||
mGLBuffer(0),
|
||||
mGLIndices(0),
|
||||
mMappedData(NULL),
|
||||
mMappedIndexData(NULL), mLocked(FALSE),
|
||||
mMappedIndexData(NULL),
|
||||
mVertexLocked(FALSE),
|
||||
mIndexLocked(FALSE),
|
||||
mFinal(FALSE),
|
||||
mFilthy(FALSE),
|
||||
mEmpty(TRUE),
|
||||
|
|
@ -422,6 +428,8 @@ LLVertexBuffer::~LLVertexBuffer()
|
|||
destroyGLBuffer();
|
||||
destroyGLIndices();
|
||||
sCount--;
|
||||
|
||||
llassert_always(!mMappedData && !mMappedIndexData) ;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
@ -567,6 +575,8 @@ void LLVertexBuffer::destroyGLBuffer()
|
|||
{
|
||||
if (useVBOs())
|
||||
{
|
||||
freeClientBuffer() ;
|
||||
|
||||
if (mMappedData || mMappedIndexData)
|
||||
{
|
||||
llerrs << "Vertex buffer destroyed while mapped!" << llendl;
|
||||
|
|
@ -594,11 +604,13 @@ void LLVertexBuffer::destroyGLIndices()
|
|||
{
|
||||
if (useVBOs())
|
||||
{
|
||||
freeClientBuffer() ;
|
||||
|
||||
if (mMappedData || mMappedIndexData)
|
||||
{
|
||||
llerrs << "Vertex buffer destroyed while mapped." << llendl;
|
||||
}
|
||||
releaseIndices();
|
||||
releaseIndices();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -799,6 +811,7 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)
|
|||
|
||||
if (mResized && useVBOs())
|
||||
{
|
||||
freeClientBuffer() ;
|
||||
setBuffer(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -822,36 +835,69 @@ BOOL LLVertexBuffer::useVBOs() const
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void LLVertexBuffer::freeClientBuffer()
|
||||
{
|
||||
if(useVBOs() && sDisableVBOMapping && (mMappedData || mMappedIndexData))
|
||||
{
|
||||
delete[] mMappedData ;
|
||||
delete[] mMappedIndexData ;
|
||||
mMappedData = NULL ;
|
||||
mMappedIndexData = NULL ;
|
||||
}
|
||||
}
|
||||
|
||||
void LLVertexBuffer::allocateClientVertexBuffer()
|
||||
{
|
||||
if(!mMappedData)
|
||||
{
|
||||
U32 size = getSize() ;
|
||||
mMappedData = new U8[size];
|
||||
memset(mMappedData, 0, size);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVertexBuffer::allocateClientIndexBuffer()
|
||||
{
|
||||
if(!mMappedIndexData)
|
||||
{
|
||||
U32 size = getIndicesSize();
|
||||
mMappedIndexData = new U8[size];
|
||||
memset(mMappedIndexData, 0, size);
|
||||
}
|
||||
}
|
||||
|
||||
// Map for data access
|
||||
U8* LLVertexBuffer::mapBuffer(S32 access)
|
||||
U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 access)
|
||||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER);
|
||||
if (mFinal)
|
||||
{
|
||||
llerrs << "LLVertexBuffer::mapBuffer() called on a finalized buffer." << llendl;
|
||||
llerrs << "LLVertexBuffer::mapVeretxBuffer() called on a finalized buffer." << llendl;
|
||||
}
|
||||
if (!useVBOs() && !mMappedData && !mMappedIndexData)
|
||||
{
|
||||
llerrs << "LLVertexBuffer::mapBuffer() called on unallocated buffer." << llendl;
|
||||
llerrs << "LLVertexBuffer::mapVertexBuffer() called on unallocated buffer." << llendl;
|
||||
}
|
||||
|
||||
if (!mLocked && useVBOs())
|
||||
if (!mVertexLocked && useVBOs())
|
||||
{
|
||||
{
|
||||
LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES);
|
||||
setBuffer(0);
|
||||
mLocked = TRUE;
|
||||
setBuffer(0, type);
|
||||
mVertexLocked = TRUE;
|
||||
stop_glerror();
|
||||
mMappedData = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
|
||||
stop_glerror();
|
||||
}
|
||||
{
|
||||
LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_INDICES);
|
||||
mMappedIndexData = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
|
||||
stop_glerror();
|
||||
}
|
||||
|
||||
if(sDisableVBOMapping)
|
||||
{
|
||||
allocateClientVertexBuffer() ;
|
||||
}
|
||||
else
|
||||
{
|
||||
mMappedData = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
|
||||
}
|
||||
stop_glerror();
|
||||
}
|
||||
|
||||
if (!mMappedData)
|
||||
{
|
||||
log_glerror();
|
||||
|
|
@ -862,80 +908,166 @@ U8* LLVertexBuffer::mapBuffer(S32 access)
|
|||
llinfos << "Available physical mwmory(KB): " << avail_phy_mem << llendl ;
|
||||
llinfos << "Available virtual memory(KB): " << avail_vir_mem << llendl;
|
||||
|
||||
//--------------------
|
||||
//print out more debug info before crash
|
||||
llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl ;
|
||||
GLint size ;
|
||||
glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size) ;
|
||||
llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl ;
|
||||
//--------------------
|
||||
|
||||
GLint buff;
|
||||
glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
|
||||
if ((GLuint)buff != mGLBuffer)
|
||||
if(!sDisableVBOMapping)
|
||||
{
|
||||
llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
|
||||
//--------------------
|
||||
//print out more debug info before crash
|
||||
llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl ;
|
||||
GLint size ;
|
||||
glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size) ;
|
||||
llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl ;
|
||||
//--------------------
|
||||
|
||||
GLint buff;
|
||||
glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
|
||||
if ((GLuint)buff != mGLBuffer)
|
||||
{
|
||||
llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
|
||||
}
|
||||
|
||||
|
||||
llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
|
||||
}
|
||||
|
||||
|
||||
llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
|
||||
}
|
||||
|
||||
if (!mMappedIndexData)
|
||||
{
|
||||
log_glerror();
|
||||
|
||||
GLint buff;
|
||||
glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
|
||||
if ((GLuint)buff != mGLIndices)
|
||||
else
|
||||
{
|
||||
llerrs << "Invalid GL index buffer bound: " << buff << llendl;
|
||||
llerrs << "memory allocation for vertex data failed." << llendl ;
|
||||
}
|
||||
|
||||
llerrs << "glMapBuffer returned NULL (no index data)" << llendl;
|
||||
}
|
||||
|
||||
sMappedCount++;
|
||||
}
|
||||
|
||||
return mMappedData;
|
||||
}
|
||||
|
||||
void LLVertexBuffer::unmapBuffer()
|
||||
U8* LLVertexBuffer::mapIndexBuffer(S32 access)
|
||||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER);
|
||||
if (mFinal)
|
||||
{
|
||||
llerrs << "LLVertexBuffer::mapIndexBuffer() called on a finalized buffer." << llendl;
|
||||
}
|
||||
if (!useVBOs() && !mMappedData && !mMappedIndexData)
|
||||
{
|
||||
llerrs << "LLVertexBuffer::mapIndexBuffer() called on unallocated buffer." << llendl;
|
||||
}
|
||||
|
||||
if (!mIndexLocked && useVBOs())
|
||||
{
|
||||
{
|
||||
LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_INDICES);
|
||||
|
||||
setBuffer(0, TYPE_INDEX);
|
||||
mIndexLocked = TRUE;
|
||||
stop_glerror();
|
||||
|
||||
if(sDisableVBOMapping)
|
||||
{
|
||||
allocateClientIndexBuffer() ;
|
||||
}
|
||||
else
|
||||
{
|
||||
mMappedIndexData = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
|
||||
}
|
||||
stop_glerror();
|
||||
}
|
||||
|
||||
if (!mMappedIndexData)
|
||||
{
|
||||
log_glerror();
|
||||
|
||||
if(!sDisableVBOMapping)
|
||||
{
|
||||
GLint buff;
|
||||
glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
|
||||
if ((GLuint)buff != mGLIndices)
|
||||
{
|
||||
llerrs << "Invalid GL index buffer bound: " << buff << llendl;
|
||||
}
|
||||
|
||||
llerrs << "glMapBuffer returned NULL (no index data)" << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
llerrs << "memory allocation for Index data failed. " << llendl ;
|
||||
}
|
||||
}
|
||||
|
||||
sMappedCount++;
|
||||
}
|
||||
|
||||
return mMappedIndexData ;
|
||||
}
|
||||
|
||||
void LLVertexBuffer::unmapBuffer(S32 type)
|
||||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_UNMAP_BUFFER);
|
||||
if (mMappedData || mMappedIndexData)
|
||||
if (!useVBOs())
|
||||
{
|
||||
if (useVBOs() && mLocked)
|
||||
return ; //nothing to unmap
|
||||
}
|
||||
|
||||
bool updated_all = false ;
|
||||
if (mMappedData && mVertexLocked && type != TYPE_INDEX)
|
||||
{
|
||||
updated_all = (mIndexLocked && type < 0) ; //both vertex and index buffers done updating
|
||||
|
||||
if(sDisableVBOMapping)
|
||||
{
|
||||
stop_glerror();
|
||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, getSize(), mMappedData);
|
||||
stop_glerror();
|
||||
}
|
||||
else
|
||||
{
|
||||
stop_glerror();
|
||||
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
||||
stop_glerror();
|
||||
|
||||
mMappedData = NULL;
|
||||
}
|
||||
|
||||
mVertexLocked = FALSE ;
|
||||
sMappedCount--;
|
||||
}
|
||||
|
||||
if(mMappedIndexData && mIndexLocked && (type < 0 || type == TYPE_INDEX))
|
||||
{
|
||||
if(sDisableVBOMapping)
|
||||
{
|
||||
stop_glerror();
|
||||
glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, getIndicesSize(), mMappedIndexData);
|
||||
stop_glerror();
|
||||
}
|
||||
else
|
||||
{
|
||||
stop_glerror();
|
||||
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
|
||||
stop_glerror();
|
||||
|
||||
/*if (!sMapped)
|
||||
{
|
||||
llerrs << "Redundantly unmapped VBO!" << llendl;
|
||||
}
|
||||
sMapped = FALSE;*/
|
||||
sMappedCount--;
|
||||
mMappedIndexData = NULL ;
|
||||
}
|
||||
|
||||
if (mUsage == GL_STATIC_DRAW_ARB)
|
||||
{ //static draw buffers can only be mapped a single time
|
||||
//throw out client data (we won't be using it again)
|
||||
mEmpty = TRUE;
|
||||
mFinal = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
mEmpty = FALSE;
|
||||
}
|
||||
mIndexLocked = FALSE ;
|
||||
sMappedCount--;
|
||||
}
|
||||
|
||||
mMappedIndexData = NULL;
|
||||
mMappedData = NULL;
|
||||
|
||||
mLocked = FALSE;
|
||||
if(updated_all)
|
||||
{
|
||||
if(mUsage == GL_STATIC_DRAW_ARB)
|
||||
{
|
||||
//static draw buffers can only be mapped a single time
|
||||
//throw out client data (we won't be using it again)
|
||||
mEmpty = TRUE;
|
||||
mFinal = TRUE;
|
||||
|
||||
if(sDisableVBOMapping)
|
||||
{
|
||||
freeClientBuffer() ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mEmpty = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -949,15 +1081,16 @@ template <class T,S32 type> struct VertexBufferStrider
|
|||
strider_t& strider,
|
||||
S32 index)
|
||||
{
|
||||
if (vbo.mapBuffer() == NULL)
|
||||
{
|
||||
llwarns << "mapBuffer failed!" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (type == LLVertexBuffer::TYPE_INDEX)
|
||||
{
|
||||
S32 stride = sizeof(T);
|
||||
|
||||
if (vbo.mapIndexBuffer() == NULL)
|
||||
{
|
||||
llwarns << "mapIndexBuffer failed!" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
strider = (T*)(vbo.getMappedIndices() + index*stride);
|
||||
strider.setStride(0);
|
||||
return TRUE;
|
||||
|
|
@ -965,6 +1098,13 @@ template <class T,S32 type> struct VertexBufferStrider
|
|||
else if (vbo.hasDataType(type))
|
||||
{
|
||||
S32 stride = vbo.getStride();
|
||||
|
||||
if (vbo.mapVertexBuffer(type) == NULL)
|
||||
{
|
||||
llwarns << "mapVertexBuffer failed!" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
strider = (T*)(vbo.getMappedData() + vbo.getOffset(type) + index*stride);
|
||||
strider.setStride(stride);
|
||||
return TRUE;
|
||||
|
|
@ -1045,7 +1185,7 @@ void LLVertexBuffer::setStride(S32 type, S32 new_stride)
|
|||
//----------------------------------------------------------------------------
|
||||
|
||||
// Set for rendering
|
||||
void LLVertexBuffer::setBuffer(U32 data_mask)
|
||||
void LLVertexBuffer::setBuffer(U32 data_mask, S32 type)
|
||||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_SET_BUFFER);
|
||||
//set up pointers if the data mask is different ...
|
||||
|
|
@ -1186,7 +1326,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)
|
|||
{
|
||||
ll_fail("LLVertexBuffer::mapBuffer failed");
|
||||
}
|
||||
unmapBuffer();
|
||||
unmapBuffer(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ public:
|
|||
|
||||
static BOOL sUseStreamDraw;
|
||||
|
||||
static void initClass(bool use_vbo);
|
||||
static void initClass(bool use_vbo, bool no_vbo_mapping);
|
||||
static void cleanupClass();
|
||||
static void setupClientArrays(U32 data_mask);
|
||||
static void clientCopy(F64 max_time = 0.005); //copy data from client to GL
|
||||
|
|
@ -139,19 +139,24 @@ protected:
|
|||
void updateNumVerts(S32 nverts);
|
||||
void updateNumIndices(S32 nindices);
|
||||
virtual BOOL useVBOs() const;
|
||||
void unmapBuffer();
|
||||
|
||||
void unmapBuffer(S32 type);
|
||||
void freeClientBuffer() ;
|
||||
void allocateClientVertexBuffer() ;
|
||||
void allocateClientIndexBuffer() ;
|
||||
|
||||
public:
|
||||
LLVertexBuffer(U32 typemask, S32 usage);
|
||||
|
||||
// map for data access
|
||||
U8* mapBuffer(S32 access = -1);
|
||||
U8* mapVertexBuffer(S32 type = -1, S32 access = -1);
|
||||
U8* mapIndexBuffer(S32 access = -1);
|
||||
|
||||
// set for rendering
|
||||
virtual void setBuffer(U32 data_mask); // calls setupVertexBuffer() if data_mask is not 0
|
||||
virtual void setBuffer(U32 data_mask, S32 type = -1); // calls setupVertexBuffer() if data_mask is not 0
|
||||
// allocate buffer
|
||||
void allocateBuffer(S32 nverts, S32 nindices, bool create);
|
||||
virtual void resizeBuffer(S32 newnverts, S32 newnindices);
|
||||
|
||||
|
||||
// Only call each getVertexPointer, etc, once before calling unmapBuffer()
|
||||
// call unmapBuffer() after calls to getXXXStrider() before any cals to setBuffer()
|
||||
// example:
|
||||
|
|
@ -170,7 +175,7 @@ public:
|
|||
bool getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index=0);
|
||||
|
||||
BOOL isEmpty() const { return mEmpty; }
|
||||
BOOL isLocked() const { return mLocked; }
|
||||
BOOL isLocked() const { return mVertexLocked || mIndexLocked; }
|
||||
S32 getNumVerts() const { return mNumVerts; }
|
||||
S32 getNumIndices() const { return mNumIndices; }
|
||||
S32 getRequestedVerts() const { return mRequestedNumVerts; }
|
||||
|
|
@ -209,13 +214,14 @@ protected:
|
|||
U32 mGLIndices; // GL IBO handle
|
||||
U8* mMappedData; // pointer to currently mapped data (NULL if unmapped)
|
||||
U8* mMappedIndexData; // pointer to currently mapped indices (NULL if unmapped)
|
||||
BOOL mLocked; // if TRUE, buffer is being or has been written to in client memory
|
||||
BOOL mVertexLocked; // if TRUE, vertex buffer is being or has been written to in client memory
|
||||
BOOL mIndexLocked; // if TRUE, index buffer is being or has been written to in client memory
|
||||
BOOL mFinal; // if TRUE, buffer can not be mapped again
|
||||
BOOL mFilthy; // if TRUE, entire buffer must be copied (used to prevent redundant dirty flags)
|
||||
BOOL mEmpty; // if TRUE, client buffer is empty (or NULL). Old values have been discarded.
|
||||
S32 mOffsets[TYPE_MAX];
|
||||
BOOL mEmpty; // if TRUE, client buffer is empty (or NULL). Old values have been discarded.
|
||||
BOOL mResized; // if TRUE, client buffer has been resized and GL buffer has not
|
||||
BOOL mDynamicSize; // if TRUE, buffer has been resized at least once (and should be padded)
|
||||
S32 mOffsets[TYPE_MAX];
|
||||
|
||||
class DirtyRegion
|
||||
{
|
||||
|
|
@ -240,13 +246,14 @@ public:
|
|||
static std::vector<U32> sDeleteList;
|
||||
typedef std::list<LLVertexBuffer*> buffer_list_t;
|
||||
|
||||
static BOOL sDisableVBOMapping; //disable glMapBufferARB
|
||||
static BOOL sEnableVBOs;
|
||||
static BOOL sVBOActive;
|
||||
static BOOL sIBOActive;
|
||||
static S32 sTypeOffsets[TYPE_MAX];
|
||||
static U32 sGLMode[LLRender::NUM_MODES];
|
||||
static U32 sGLRenderBuffer;
|
||||
static U32 sGLRenderIndices;
|
||||
static BOOL sVBOActive;
|
||||
static BOOL sIBOActive;
|
||||
static U32 sGLRenderIndices;
|
||||
static U32 sLastMask;
|
||||
static U32 sAllocatedBytes;
|
||||
static U32 sBindCount;
|
||||
|
|
|
|||
|
|
@ -101,10 +101,18 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask)
|
|||
{
|
||||
if (0 != LLFile::remove(fullpath))
|
||||
{
|
||||
retry_count++;
|
||||
result = errno;
|
||||
llwarns << "Problem removing " << fullpath << " - errorcode: "
|
||||
<< result << " attempt " << retry_count << llendl;
|
||||
ms_sleep(1000);
|
||||
|
||||
if(retry_count >= 5)
|
||||
{
|
||||
llwarns << "Failed to remove " << fullpath << llendl ;
|
||||
return count ;
|
||||
}
|
||||
|
||||
ms_sleep(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -113,8 +121,7 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask)
|
|||
llwarns << "Successfully removed " << fullpath << llendl;
|
||||
}
|
||||
break;
|
||||
}
|
||||
retry_count++;
|
||||
}
|
||||
}
|
||||
count++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file lldir_linux.h
|
||||
* @brief Definition of directory utilities class for linux
|
||||
* @brief Definition of directory utilities class for linux
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
|
|
@ -24,6 +24,10 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_LINUX
|
||||
#error This header must not be included when compiling for any target other than Linux. Consider including lldir.h instead.
|
||||
#endif // !LL_LINUX
|
||||
|
||||
#ifndef LL_LLDIR_LINUX_H
|
||||
#define LL_LLDIR_LINUX_H
|
||||
|
||||
|
|
@ -40,7 +44,7 @@ public:
|
|||
|
||||
/*virtual*/ void initAppDirs(const std::string &app_name,
|
||||
const std::string& app_read_only_data_dir);
|
||||
public:
|
||||
|
||||
virtual std::string getCurPath();
|
||||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
virtual BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);
|
||||
|
|
@ -53,7 +57,7 @@ private:
|
|||
DIR *mDirp;
|
||||
int mCurrentDirIndex;
|
||||
int mCurrentDirCount;
|
||||
std::string mCurrentDir;
|
||||
std::string mCurrentDir;
|
||||
};
|
||||
|
||||
#endif // LL_LLDIR_LINUX_H
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_DARWIN
|
||||
#error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead.
|
||||
#endif // !LL_DARWIN
|
||||
|
||||
#ifndef LL_LLDIR_MAC_H
|
||||
#define LL_LLDIR_MAC_H
|
||||
|
||||
|
|
@ -39,7 +43,7 @@ public:
|
|||
|
||||
/*virtual*/ void initAppDirs(const std::string &app_name,
|
||||
const std::string& app_read_only_data_dir);
|
||||
public:
|
||||
|
||||
virtual S32 deleteFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
virtual std::string getCurPath();
|
||||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_SOLARIS
|
||||
#error This header must not be included when compiling for any target other than Solaris. Consider including lldir.h instead.
|
||||
#endif // !LL_SOLARIS
|
||||
|
||||
#ifndef LL_LLDIR_SOLARIS_H
|
||||
#define LL_LLDIR_SOLARIS_H
|
||||
|
||||
|
|
@ -40,7 +44,7 @@ public:
|
|||
|
||||
/*virtual*/ void initAppDirs(const std::string &app_name,
|
||||
const std::string& app_read_only_data_dir);
|
||||
public:
|
||||
|
||||
virtual std::string getCurPath();
|
||||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
virtual BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);
|
||||
|
|
@ -50,7 +54,7 @@ private:
|
|||
DIR *mDirp;
|
||||
int mCurrentDirIndex;
|
||||
int mCurrentDirCount;
|
||||
std::string mCurrentDir;
|
||||
std::string mCurrentDir;
|
||||
};
|
||||
|
||||
#endif // LL_LLDIR_SOLARIS_H
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_WINDOWS
|
||||
#error This header must not be included when compiling for any target other than Windows. Consider including lldir.h instead.
|
||||
#endif // !LL_WINDOWS
|
||||
|
||||
#ifndef LL_LLDIR_WIN32_H
|
||||
#define LL_LLDIR_WIN32_H
|
||||
|
||||
|
|
@ -47,8 +51,8 @@ public:
|
|||
/*virtual*/ std::string getLLPluginFilename(std::string base_name);
|
||||
|
||||
private:
|
||||
BOOL LLDir_Win32::getNextFileInDir(const llutf16string &dirname, const std::string &mask, std::string &fname);
|
||||
|
||||
BOOL getNextFileInDir(const llutf16string &dirname, const std::string &mask, std::string &fname);
|
||||
|
||||
void* mDirSearch_h;
|
||||
llutf16string mCurrentDir;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -697,28 +697,6 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>BrowserUseDefaultCAFile</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Tell the built-in web browser to use the CA.pem file shipped with the client.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>BrowserCAFilePath</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Tell the built-in web browser the path to an alternative CA.pem file (only used if BrowserUseDefaultCAFile is false).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string></string>
|
||||
</map>
|
||||
<key>BlockAvatarAppearanceMessages</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -1179,7 +1157,7 @@
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>20000</integer>
|
||||
<integer>128</integer>
|
||||
</map>
|
||||
<key>CacheSize</key>
|
||||
<map>
|
||||
|
|
@ -1852,6 +1830,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>DebugShowMemory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show Total Allocated Memory</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>DebugShowRenderInfo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -1874,10 +1863,21 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>DebugShowTextureInfo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show inertested texture info</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>DebugShowTime</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show depth buffer contents</string>
|
||||
<string>Show time info</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8451,6 +8451,17 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderVBOMappingDisable</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Disable VBO glMapBufferARB</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderUseStreamVBO</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1,29 +1,31 @@
|
|||
#!/usr/bin/env python
|
||||
# @file generate_breakpad_symbols.py
|
||||
# @author Brad Kittenbrink <brad@lindenlab.com>
|
||||
# @brief Simple tool for generating google_breakpad symbol information
|
||||
# for the crash reporter.
|
||||
#
|
||||
# $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
# Second Life Viewer Source Code
|
||||
# Copyright (C) 2010, Linden Research, Inc.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation;
|
||||
# version 2.1 of the License only.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
# Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
# $/LicenseInfo$
|
||||
"""\
|
||||
@file generate_breakpad_symbols.py
|
||||
@author Brad Kittenbrink <brad@lindenlab.com>
|
||||
@brief Simple tool for generating google_breakpad symbol information
|
||||
for the crash reporter.
|
||||
|
||||
$LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2010-2011, Linden Research, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
version 2.1 of the License only.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
|
||||
import collections
|
||||
|
|
|
|||
|
|
@ -1296,7 +1296,7 @@ bool LLAppViewer::mainLoop()
|
|||
resumeMainloopTimeout();
|
||||
|
||||
pingMainloopTimeout("Main:End");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(std::bad_alloc)
|
||||
{
|
||||
|
|
@ -1779,6 +1779,8 @@ bool LLAppViewer::cleanup()
|
|||
|
||||
ll_close_fail_log();
|
||||
|
||||
MEM_TRACK_RELEASE
|
||||
|
||||
llinfos << "Goodbye!" << llendflush;
|
||||
|
||||
// return 0;
|
||||
|
|
@ -2471,15 +2473,23 @@ namespace {
|
|||
|
||||
if(data["required"].asBoolean())
|
||||
{
|
||||
apply_callback = &apply_update_ok_callback;
|
||||
if(LLStartUp::getStartupState() <= STATE_LOGIN_WAIT)
|
||||
{
|
||||
// The user never saw the progress bar.
|
||||
apply_callback = &apply_update_ok_callback;
|
||||
notification_name = "RequiredUpdateDownloadedVerboseDialog";
|
||||
}
|
||||
else if(LLStartUp::getStartupState() < STATE_WORLD_INIT)
|
||||
{
|
||||
// The user is logging in but blocked.
|
||||
apply_callback = &apply_update_ok_callback;
|
||||
notification_name = "RequiredUpdateDownloadedDialog";
|
||||
}
|
||||
else
|
||||
{
|
||||
notification_name = "RequiredUpdateDownloadedDialog";
|
||||
// The user is already logged in; treat like an optional update.
|
||||
apply_callback = &apply_update_callback;
|
||||
notification_name = "DownloadBackgroundTip";
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -240,6 +240,9 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i
|
|||
LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);
|
||||
item->setAvatarId(item_id, session_id, true, false);
|
||||
item->setName(item_name);
|
||||
item->showLastInteractionTime(mShowLastInteractionTime);
|
||||
item->showSpeakingIndicator(mShowSpeakingIndicator);
|
||||
item->setOnline(false);
|
||||
|
||||
addItem(item, item_id);
|
||||
mIDs.push_back(item_id);
|
||||
|
|
@ -286,9 +289,18 @@ void LLAvatarList::refresh()
|
|||
{
|
||||
// *NOTE: If you change the UI to show a different string,
|
||||
// be sure to change the filter code below.
|
||||
addNewItem(buddy_id,
|
||||
av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
|
||||
LLAvatarTracker::instance().isBuddyOnline(buddy_id));
|
||||
if (LLRecentPeople::instance().isAvalineCaller(buddy_id))
|
||||
{
|
||||
const LLSD& call_data = LLRecentPeople::instance().getData(buddy_id);
|
||||
addAvalineItem(buddy_id, call_data["session_id"].asUUID(), call_data["call_number"].asString());
|
||||
}
|
||||
else
|
||||
{
|
||||
addNewItem(buddy_id,
|
||||
av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
|
||||
LLAvatarTracker::instance().isBuddyOnline(buddy_id));
|
||||
}
|
||||
|
||||
modified = true;
|
||||
nadded++;
|
||||
}
|
||||
|
|
@ -440,7 +452,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
|
|||
BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
|
||||
if ( mContextMenu )
|
||||
if ( mContextMenu && !isAvalineItemSelected())
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getSelectedUUIDs(selected_uuids);
|
||||
|
|
@ -449,6 +461,21 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
|||
return handled;
|
||||
}
|
||||
|
||||
bool LLAvatarList::isAvalineItemSelected()
|
||||
{
|
||||
std::vector<LLPanel*> selected_items;
|
||||
getSelectedItems(selected_items);
|
||||
std::vector<LLPanel*>::iterator it = selected_items.begin();
|
||||
|
||||
for(; it != selected_items.end(); ++it)
|
||||
{
|
||||
if (dynamic_cast<LLAvalineListItem*>(*it))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLAvatarList::setVisible(BOOL visible)
|
||||
{
|
||||
if ( visible == FALSE && mContextMenu )
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ protected:
|
|||
|
||||
private:
|
||||
|
||||
bool isAvalineItemSelected();
|
||||
|
||||
bool mIgnoreOnlineStatus;
|
||||
bool mShowLastInteractionTime;
|
||||
bool mDirty;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public:
|
|||
/**
|
||||
* Get host to which to send that capability request.
|
||||
*/
|
||||
virtual LLHost getHost() const = 0;
|
||||
virtual const LLHost& getHost() const = 0;
|
||||
/**
|
||||
* Describe this LLCapabilityProvider for logging etc.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -899,31 +899,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
|
|||
}
|
||||
}
|
||||
|
||||
LLTextEditor* text_editor = notify_box->getChild<LLTextEditor>("text_editor_box", TRUE);
|
||||
S32 text_heigth = 0;
|
||||
if(text_editor != NULL)
|
||||
{
|
||||
text_heigth = text_editor->getTextBoundingRect().getHeight();
|
||||
}
|
||||
|
||||
//Prepare the rect for the view
|
||||
LLRect target_rect = mEditor->getDocumentView()->getRect();
|
||||
// squeeze down the widget by subtracting padding off left and right
|
||||
target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad();
|
||||
target_rect.mRight -= mRightWidgetPad;
|
||||
notify_box->reshape(target_rect.getWidth(),
|
||||
notify_box->getRect().getHeight());
|
||||
notify_box->reshape(target_rect.getWidth(), notify_box->getRect().getHeight());
|
||||
notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
|
||||
|
||||
if (text_editor != NULL)
|
||||
{
|
||||
S32 text_heigth_delta =
|
||||
text_editor->getTextBoundingRect().getHeight()
|
||||
- text_heigth;
|
||||
notify_box->reshape(target_rect.getWidth(),
|
||||
notify_box->getRect().getHeight() + text_heigth_delta);
|
||||
}
|
||||
|
||||
LLInlineViewSegment::Params params;
|
||||
params.view = notify_box;
|
||||
params.left_pad = mLeftWidgetPad;
|
||||
|
|
|
|||
|
|
@ -185,6 +185,10 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
llassert(getEnabled());
|
||||
llassert(getVisible());
|
||||
|
||||
// Focus the widget now in order to return the focus
|
||||
// after the color picker is closed.
|
||||
setFocus(TRUE);
|
||||
|
||||
showPicker(FALSE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,10 +177,6 @@ void LLViewerDynamicTexture::postRender(BOOL success)
|
|||
generateGLTexture() ;
|
||||
}
|
||||
|
||||
if(gGLManager.mDebugGPU)
|
||||
{
|
||||
LLGLState::dumpStates() ;
|
||||
}
|
||||
success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
|
||||
}
|
||||
}
|
||||
|
|
@ -220,12 +216,6 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
|
|||
LLViewerDynamicTexture *dynamicTexture = *iter;
|
||||
if (dynamicTexture->needsRender())
|
||||
{
|
||||
if(gGLManager.mDebugGPU)
|
||||
{
|
||||
llinfos << "class type: " << (S32)dynamicTexture->getType() << llendl;
|
||||
LLGLState::dumpStates() ;
|
||||
}
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
gDepthDirty = TRUE;
|
||||
|
||||
|
|
|
|||
|
|
@ -1155,7 +1155,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
if (rebuild_tcoord)
|
||||
{
|
||||
LLVector2 tc = vf.mVertices[i].mTexCoord;
|
||||
|
||||
|
||||
if (texgen != LLTextureEntry::TEX_GEN_DEFAULT)
|
||||
{
|
||||
LLVector3 vec = vf.mVertices[i].mPosition;
|
||||
|
|
@ -1331,7 +1331,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
mTexExtents[0].setVec(0,0);
|
||||
mTexExtents[1].setVec(1,1);
|
||||
xform(mTexExtents[0], cos_ang, sin_ang, os, ot, ms, mt);
|
||||
xform(mTexExtents[1], cos_ang, sin_ang, os, ot, ms, mt);
|
||||
xform(mTexExtents[1], cos_ang, sin_ang, os, ot, ms, mt);
|
||||
|
||||
F32 es = vf.mTexCoordExtents[1].mV[0] - vf.mTexCoordExtents[0].mV[0] ;
|
||||
F32 et = vf.mTexCoordExtents[1].mV[1] - vf.mTexCoordExtents[0].mV[1] ;
|
||||
mTexExtents[0][0] *= es ;
|
||||
mTexExtents[1][0] *= es ;
|
||||
mTexExtents[0][1] *= et ;
|
||||
mTexExtents[1][1] *= et ;
|
||||
}
|
||||
|
||||
mLastVertexBuffer = mVertexBuffer;
|
||||
|
|
|
|||
|
|
@ -403,9 +403,9 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
|
|||
{
|
||||
wcsncpy( mFilesW,L"untitled.jpeg", FILENAME_BUFFER_SIZE); /*Flawfinder: ignore*/
|
||||
}
|
||||
mOFN.lpstrDefExt = L"jpeg";
|
||||
mOFN.lpstrDefExt = L"jpg";
|
||||
mOFN.lpstrFilter =
|
||||
L"JPEG Images (*.jpeg)\0*.jpeg\0" \
|
||||
L"JPEG Images (*.jpg *.jpeg)\0*.jpg;*.jpeg\0" \
|
||||
L"\0";
|
||||
break;
|
||||
case FFSAVE_AVI:
|
||||
|
|
|
|||
|
|
@ -41,35 +41,36 @@
|
|||
|
||||
|
||||
// static
|
||||
std::set<std::string> LLFirstUse::sConfigVariables;
|
||||
//std::set<std::string> LLFirstUse::sConfigVariables;
|
||||
std::set<std::string> LLFirstUse::sConfigVariablesEnabled;
|
||||
|
||||
// static
|
||||
void LLFirstUse::addConfigVariable(const std::string& var)
|
||||
{
|
||||
sConfigVariables.insert(var);
|
||||
}
|
||||
//void LLFirstUse::addConfigVariable(const std::string& var)
|
||||
//{
|
||||
// sConfigVariables.insert(var);
|
||||
//}
|
||||
|
||||
// static
|
||||
void LLFirstUse::disableFirstUse()
|
||||
{
|
||||
// Set all first-use warnings to disabled
|
||||
for (std::set<std::string>::iterator iter = sConfigVariables.begin();
|
||||
iter != sConfigVariables.end(); ++iter)
|
||||
{
|
||||
gWarningSettings.setBOOL(*iter, FALSE);
|
||||
}
|
||||
}
|
||||
//void LLFirstUse::disableFirstUse()
|
||||
//{
|
||||
// // Set all first-use warnings to disabled
|
||||
// for (std::set<std::string>::iterator iter = sConfigVariables.begin();
|
||||
// iter != sConfigVariables.end(); ++iter)
|
||||
// {
|
||||
// gWarningSettings.setBOOL(*iter, FALSE);
|
||||
// }
|
||||
//}
|
||||
|
||||
// static
|
||||
void LLFirstUse::resetFirstUse()
|
||||
{
|
||||
// Set all first-use warnings to disabled
|
||||
for (std::set<std::string>::iterator iter = sConfigVariables.begin();
|
||||
iter != sConfigVariables.end(); ++iter)
|
||||
{
|
||||
gWarningSettings.setBOOL(*iter, TRUE);
|
||||
}
|
||||
}
|
||||
//void LLFirstUse::resetFirstUse()
|
||||
//{
|
||||
// // Set all first-use warnings to disabled
|
||||
// for (std::set<std::string>::iterator iter = sConfigVariables.begin();
|
||||
// iter != sConfigVariables.end(); ++iter)
|
||||
// {
|
||||
// gWarningSettings.setBOOL(*iter, TRUE);
|
||||
// }
|
||||
//}
|
||||
|
||||
// static
|
||||
void LLFirstUse::otherAvatarChatFirst(bool enable)
|
||||
|
|
@ -151,13 +152,21 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
|
|||
|
||||
if (enable)
|
||||
{
|
||||
if(sConfigVariablesEnabled.find(control_var) != sConfigVariablesEnabled.end())
|
||||
{
|
||||
return ; //already added
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("EnableUIHints"))
|
||||
{
|
||||
LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
|
||||
|
||||
// if notification doesn't already exist and this notification hasn't been disabled...
|
||||
if (gWarningSettings.getBOOL(control_var))
|
||||
{ // create new notification
|
||||
{
|
||||
sConfigVariablesEnabled.insert(control_var) ;
|
||||
|
||||
// create new notification
|
||||
LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
|
||||
}
|
||||
}
|
||||
|
|
@ -169,7 +178,6 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
|
|||
// redundantly clear settings var here, in case there are no notifications to cancel
|
||||
gWarningSettings.setBOOL(control_var, FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -78,11 +78,11 @@ class LLFirstUse
|
|||
public:
|
||||
|
||||
// Add a config variable to be reset on resetFirstUse()
|
||||
static void addConfigVariable(const std::string& var);
|
||||
//static void addConfigVariable(const std::string& var);
|
||||
|
||||
// Sets all controls back to show the dialogs.
|
||||
static void disableFirstUse();
|
||||
static void resetFirstUse();
|
||||
//static void disableFirstUse();
|
||||
//static void resetFirstUse();
|
||||
|
||||
static void otherAvatarChatFirst(bool enable = true);
|
||||
static void sit(bool enable = true);
|
||||
|
|
@ -98,7 +98,8 @@ public:
|
|||
|
||||
protected:
|
||||
static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
|
||||
static std::set<std::string> sConfigVariables;
|
||||
//static std::set<std::string> sConfigVariables;
|
||||
static std::set<std::string> sConfigVariablesEnabled;
|
||||
|
||||
static void init();
|
||||
static bool processNotification(const LLSD& notify);
|
||||
|
|
|
|||
|
|
@ -83,7 +83,8 @@ LLFloaterMap::~LLFloaterMap()
|
|||
BOOL LLFloaterMap::postBuild()
|
||||
{
|
||||
mMap = getChild<LLNetMap>("Net Map");
|
||||
mMap->setToolTipMsg(getString("ToolTipMsg"));
|
||||
mMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ?
|
||||
getString("AltToolTipMsg") : getString("ToolTipMsg"));
|
||||
sendChildToBack(mMap);
|
||||
|
||||
mTextBoxNorth = getChild<LLTextBox> ("floater_map_north");
|
||||
|
|
|
|||
|
|
@ -1539,6 +1539,7 @@ LLPanelPreference::LLPanelPreference()
|
|||
: LLPanel()
|
||||
{
|
||||
mCommitCallbackRegistrar.add("Pref.setControlFalse", boost::bind(&LLPanelPreference::setControlFalse,this, _2));
|
||||
mCommitCallbackRegistrar.add("Pref.updateMediaAutoPlayCheckbox", boost::bind(&LLPanelPreference::updateMediaAutoPlayCheckbox, this, _1));
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -1700,6 +1701,21 @@ void LLPanelPreference::setControlFalse(const LLSD& user_data)
|
|||
control->set(LLSD(FALSE));
|
||||
}
|
||||
|
||||
void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)
|
||||
{
|
||||
std::string name = ctrl->getName();
|
||||
|
||||
// Disable "Allow Media to auto play" only when both
|
||||
// "Streaming Music" and "Media" are unchecked. STORM-513.
|
||||
if ((name == "enable_music") || (name == "enable_media"))
|
||||
{
|
||||
bool music_enabled = getChild<LLCheckBoxCtrl>("enable_music")->get();
|
||||
bool media_enabled = getChild<LLCheckBoxCtrl>("enable_media")->get();
|
||||
|
||||
getChild<LLCheckBoxCtrl>("media_auto_play_btn")->setEnabled(music_enabled || media_enabled);
|
||||
}
|
||||
}
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics");
|
||||
|
||||
BOOL LLPanelPreferenceGraphics::postBuild()
|
||||
|
|
|
|||
|
|
@ -189,6 +189,10 @@ public:
|
|||
void setControlFalse(const LLSD& user_data);
|
||||
virtual void setHardwareDefaults(){};
|
||||
|
||||
// Disables "Allow Media to auto play" check box only when both
|
||||
// "Streaming Music" and "Media" are unchecked. Otherwise enables it.
|
||||
void updateMediaAutoPlayCheckbox(LLUICtrl* ctrl);
|
||||
|
||||
// This function squirrels away the current values of the controls so that
|
||||
// cancel() can restore them.
|
||||
virtual void saveSettings();
|
||||
|
|
|
|||
|
|
@ -3,31 +3,25 @@
|
|||
* @author Brad Kittenbrink <brad@lindenlab.com>
|
||||
* @brief Quick and dirty console for region debug settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2010-2010, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* 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.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -3,31 +3,25 @@
|
|||
* @author Brad Kittenbrink <brad@lindenlab.com>
|
||||
* @brief Quick and dirty console for region debug settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2010-2010, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* 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.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1363,6 +1363,36 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
|
|||
floater->getChildView("auto_snapshot_check")->setVisible( is_advance);
|
||||
floater->getChildView("image_quality_slider")->setVisible( is_advance && show_slider);
|
||||
|
||||
if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
|
||||
{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot
|
||||
|
||||
LLSpinCtrl* width_ctrl = floater->getChild<LLSpinCtrl>("snapshot_width");
|
||||
LLSpinCtrl* height_ctrl = floater->getChild<LLSpinCtrl>("snapshot_height");
|
||||
|
||||
S32 width = gViewerWindow->getWindowWidthRaw();
|
||||
S32 height = gViewerWindow->getWindowHeightRaw();
|
||||
|
||||
width_ctrl->setMaxValue(width);
|
||||
|
||||
height_ctrl->setMaxValue(height);
|
||||
|
||||
if (width_ctrl->getValue().asInteger() > width)
|
||||
{
|
||||
width_ctrl->forceSetValue(width);
|
||||
}
|
||||
if (height_ctrl->getValue().asInteger() > height)
|
||||
{
|
||||
height_ctrl->forceSetValue(height);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSpinCtrl* width = floater->getChild<LLSpinCtrl>("snapshot_width");
|
||||
width->setMaxValue(6016);
|
||||
LLSpinCtrl* height = floater->getChild<LLSpinCtrl>("snapshot_height");
|
||||
height->setMaxValue(6016);
|
||||
}
|
||||
|
||||
LLSnapshotLivePreview* previewp = getPreviewView(floater);
|
||||
BOOL got_bytes = previewp && previewp->getDataSize() > 0;
|
||||
BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
|
||||
|
|
@ -1810,6 +1840,13 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
|
|||
|
||||
previewp->getSize(width, height);
|
||||
|
||||
if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
|
||||
{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot
|
||||
width = llmin(width, gViewerWindow->getWindowWidthRaw());
|
||||
height = llmin(height, gViewerWindow->getWindowHeightRaw());
|
||||
}
|
||||
|
||||
|
||||
if(checkImageSize(previewp, width, height, TRUE, previewp->getMaxImageSize()))
|
||||
{
|
||||
resetSnapshotSizeOnUI(view, width, height) ;
|
||||
|
|
|
|||
|
|
@ -220,6 +220,8 @@ BOOL LLFloaterTools::postBuild()
|
|||
mRadioGroupEdit = getChild<LLRadioGroup>("edit_radio_group");
|
||||
mBtnGridOptions = getChild<LLButton>("Options...");
|
||||
mTitleMedia = getChild<LLMediaCtrl>("title_media");
|
||||
mBtnLink = getChild<LLButton>("link_btn");
|
||||
mBtnUnlink = getChild<LLButton>("unlink_btn");
|
||||
|
||||
mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts");
|
||||
getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
|
||||
|
|
@ -315,6 +317,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
|
|||
mBtnRotateReset(NULL),
|
||||
mBtnRotateRight(NULL),
|
||||
|
||||
mBtnLink(NULL),
|
||||
mBtnUnlink(NULL),
|
||||
|
||||
mBtnDelete(NULL),
|
||||
mBtnDuplicate(NULL),
|
||||
mBtnDuplicateInPlace(NULL),
|
||||
|
|
@ -341,7 +346,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
|
|||
mNeedMediaTitle(TRUE)
|
||||
{
|
||||
gFloaterTools = this;
|
||||
|
||||
|
||||
setAutoFocus(FALSE);
|
||||
mFactoryMap["General"] = LLCallbackMap(createPanelPermissions, this);//LLPanelPermissions
|
||||
mFactoryMap["Object"] = LLCallbackMap(createPanelObject, this);//LLPanelObject
|
||||
|
|
@ -366,6 +371,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
|
|||
mCommitCallbackRegistrar.add("BuildTool.DeleteMedia", boost::bind(&LLFloaterTools::onClickBtnDeleteMedia,this));
|
||||
mCommitCallbackRegistrar.add("BuildTool.EditMedia", boost::bind(&LLFloaterTools::onClickBtnEditMedia,this));
|
||||
|
||||
mCommitCallbackRegistrar.add("BuildTool.LinkObjects", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance()));
|
||||
mCommitCallbackRegistrar.add("BuildTool.UnlinkObjects", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance()));
|
||||
|
||||
}
|
||||
|
||||
LLFloaterTools::~LLFloaterTools()
|
||||
|
|
@ -566,6 +574,12 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
|
|||
bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts");
|
||||
getChildView("RenderingCost")->setVisible( !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost);
|
||||
|
||||
mBtnLink->setVisible(edit_visible);
|
||||
mBtnUnlink->setVisible(edit_visible);
|
||||
|
||||
mBtnLink->setEnabled(LLSelectMgr::instance().enableLinkObjects());
|
||||
mBtnUnlink->setEnabled(LLSelectMgr::instance().enableUnlinkObjects());
|
||||
|
||||
if (mCheckSelectIndividual)
|
||||
{
|
||||
mCheckSelectIndividual->setVisible(edit_visible);
|
||||
|
|
|
|||
|
|
@ -135,6 +135,8 @@ public:
|
|||
LLRadioGroup* mRadioGroupEdit;
|
||||
|
||||
LLCheckBoxCtrl *mCheckSelectIndividual;
|
||||
LLButton* mBtnLink;
|
||||
LLButton* mBtnUnlink;
|
||||
|
||||
LLCheckBoxCtrl* mCheckSnapToGrid;
|
||||
LLButton* mBtnGridOptions;
|
||||
|
|
|
|||
|
|
@ -1854,31 +1854,9 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )
|
|||
{
|
||||
if (mCallbackRegistrar)
|
||||
mCallbackRegistrar->pushScope();
|
||||
//menu->empty();
|
||||
const LLView::child_list_t *list = menu->getChildList();
|
||||
|
||||
LLView::child_list_t::const_iterator menu_itor;
|
||||
for (menu_itor = list->begin(); menu_itor != list->end(); ++menu_itor)
|
||||
{
|
||||
(*menu_itor)->setVisible(FALSE);
|
||||
(*menu_itor)->pushVisible(TRUE);
|
||||
(*menu_itor)->setEnabled(TRUE);
|
||||
}
|
||||
|
||||
// Successively filter out invalid options
|
||||
|
||||
U32 flags = FIRST_SELECTED_ITEM;
|
||||
for (selected_items_t::iterator item_itor = mSelectedItems.begin();
|
||||
item_itor != mSelectedItems.end();
|
||||
++item_itor)
|
||||
{
|
||||
LLFolderViewItem* selected_item = (*item_itor);
|
||||
selected_item->buildContextMenu(*menu, flags);
|
||||
flags = 0x0;
|
||||
}
|
||||
updateMenuOptions(menu);
|
||||
|
||||
addNoOptions(menu);
|
||||
|
||||
menu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, menu, x, y);
|
||||
if (mCallbackRegistrar)
|
||||
|
|
@ -2365,6 +2343,45 @@ void LLFolderView::updateRenamerPosition()
|
|||
}
|
||||
}
|
||||
|
||||
// Update visibility and availability (i.e. enabled/disabled) of context menu items.
|
||||
void LLFolderView::updateMenuOptions(LLMenuGL* menu)
|
||||
{
|
||||
const LLView::child_list_t *list = menu->getChildList();
|
||||
|
||||
LLView::child_list_t::const_iterator menu_itor;
|
||||
for (menu_itor = list->begin(); menu_itor != list->end(); ++menu_itor)
|
||||
{
|
||||
(*menu_itor)->setVisible(FALSE);
|
||||
(*menu_itor)->pushVisible(TRUE);
|
||||
(*menu_itor)->setEnabled(TRUE);
|
||||
}
|
||||
|
||||
// Successively filter out invalid options
|
||||
|
||||
U32 flags = FIRST_SELECTED_ITEM;
|
||||
for (selected_items_t::iterator item_itor = mSelectedItems.begin();
|
||||
item_itor != mSelectedItems.end();
|
||||
++item_itor)
|
||||
{
|
||||
LLFolderViewItem* selected_item = (*item_itor);
|
||||
selected_item->buildContextMenu(*menu, flags);
|
||||
flags = 0x0;
|
||||
}
|
||||
|
||||
addNoOptions(menu);
|
||||
}
|
||||
|
||||
// Refresh the context menu (that is already shown).
|
||||
void LLFolderView::updateMenu()
|
||||
{
|
||||
LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get();
|
||||
if (menu && menu->getVisible())
|
||||
{
|
||||
updateMenuOptions(menu);
|
||||
menu->needsArrange(); // update menu height if needed
|
||||
}
|
||||
}
|
||||
|
||||
bool LLFolderView::selectFirstItem()
|
||||
{
|
||||
for (folders_t::iterator iter = mFolders.begin();
|
||||
|
|
|
|||
|
|
@ -269,7 +269,10 @@ public:
|
|||
virtual S32 notify(const LLSD& info) ;
|
||||
|
||||
bool useLabelSuffix() { return mUseLabelSuffix; }
|
||||
void updateMenu();
|
||||
|
||||
private:
|
||||
void updateMenuOptions(LLMenuGL* menu);
|
||||
void updateRenamerPosition();
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -2719,6 +2719,15 @@ void LLIMMgr::inviteToSession(
|
|||
{
|
||||
LLFloaterReg::showInstance("incoming_call", payload, FALSE);
|
||||
}
|
||||
|
||||
// Add the caller to the Recent List here (at this point
|
||||
// "incoming_call" floater is shown and the recipient can
|
||||
// reject the call), because even if a recipient will reject
|
||||
// the call, the caller should be added to the recent list
|
||||
// anyway. STORM-507.
|
||||
if(type == IM_SESSION_P2P_INVITE)
|
||||
LLRecentPeople::instance().add(caller_id);
|
||||
|
||||
mPendingInvitations[session_id.asString()] = LLSD();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "llvoiceclient.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "lltransientfloatermgr.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
// Linden libraries
|
||||
#include "llfloater.h"
|
||||
|
|
@ -126,16 +127,20 @@ private:
|
|||
void onClickReport();
|
||||
void onClickFreeze();
|
||||
void onClickEject();
|
||||
void onClickKick();
|
||||
void onClickCSR();
|
||||
void onClickZoomIn();
|
||||
void onClickFindOnMap();
|
||||
bool onVisibleFindOnMap();
|
||||
bool onVisibleFreezeEject();
|
||||
bool onVisibleEject();
|
||||
bool onVisibleFreeze();
|
||||
bool onVisibleZoomIn();
|
||||
void onClickMuteVolume();
|
||||
void onVolumeChange(const LLSD& data);
|
||||
bool enableMute();
|
||||
bool enableUnmute();
|
||||
bool enableTeleportOffer();
|
||||
bool godModeEnabled();
|
||||
|
||||
// Is used to determine if "Add friend" option should be enabled in gear menu
|
||||
bool isNotFriend();
|
||||
|
|
@ -214,20 +219,21 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
|
|||
mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Share", boost::bind(&LLInspectAvatar::onClickShare, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.ToggleMute", boost::bind(&LLInspectAvatar::onToggleMute, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Freeze",
|
||||
boost::bind(&LLInspectAvatar::onClickFreeze, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Eject",
|
||||
boost::bind(&LLInspectAvatar::onClickEject, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Freeze", boost::bind(&LLInspectAvatar::onClickFreeze, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Eject", boost::bind(&LLInspectAvatar::onClickEject, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Kick", boost::bind(&LLInspectAvatar::onClickKick, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.CSR", boost::bind(&LLInspectAvatar::onClickCSR, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Report", boost::bind(&LLInspectAvatar::onClickReport, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.FindOnMap", boost::bind(&LLInspectAvatar::onClickFindOnMap, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.ZoomIn", boost::bind(&LLInspectAvatar::onClickZoomIn, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.DisableVoice", boost::bind(&LLInspectAvatar::toggleSelectedVoice, this, false));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.EnableVoice", boost::bind(&LLInspectAvatar::toggleSelectedVoice, this, true));
|
||||
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.EnableGod", boost::bind(&LLInspectAvatar::godModeEnabled, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap", boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject",
|
||||
boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleZoomIn",
|
||||
boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleEject", boost::bind(&LLInspectAvatar::onVisibleEject, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleFreeze", boost::bind(&LLInspectAvatar::onVisibleFreeze, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.VisibleZoomIn", boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.Enable", boost::bind(&LLInspectAvatar::isNotFriend, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableCall", boost::bind(&LLAvatarActions::canCall));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableTeleportOffer", boost::bind(&LLInspectAvatar::enableTeleportOffer, this));
|
||||
|
|
@ -656,11 +662,18 @@ bool LLInspectAvatar::onVisibleFindOnMap()
|
|||
return gAgent.isGodlike() || is_agent_mappable(mAvatarID);
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::onVisibleFreezeEject()
|
||||
bool LLInspectAvatar::onVisibleEject()
|
||||
{
|
||||
return enable_freeze_eject( LLSD(mAvatarID) );
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::onVisibleFreeze()
|
||||
{
|
||||
// either user is a god and can do long distance freeze
|
||||
// or check for target proximity and permissions
|
||||
return gAgent.isGodlike() || enable_freeze_eject(LLSD(mAvatarID));
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::onVisibleZoomIn()
|
||||
{
|
||||
return gObjectList.findObject(mAvatarID);
|
||||
|
|
@ -704,7 +717,7 @@ void LLInspectAvatar::onClickShare()
|
|||
|
||||
void LLInspectAvatar::onToggleMute()
|
||||
{
|
||||
LLMute mute(mAvatarID, mAvatarName.getLegacyName(), LLMute::AGENT);
|
||||
LLMute mute(mAvatarID, mAvatarName.mDisplayName, LLMute::AGENT);
|
||||
|
||||
if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName))
|
||||
{
|
||||
|
|
@ -725,9 +738,41 @@ void LLInspectAvatar::onClickReport()
|
|||
closeFloater();
|
||||
}
|
||||
|
||||
bool godlike_freeze(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
switch (option)
|
||||
{
|
||||
case 0:
|
||||
LLAvatarActions::freeze(avatar_id);
|
||||
break;
|
||||
case 1:
|
||||
LLAvatarActions::unfreeze(avatar_id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickFreeze()
|
||||
{
|
||||
handle_avatar_freeze( LLSD(mAvatarID) );
|
||||
if (gAgent.isGodlike())
|
||||
{
|
||||
// use godlike freeze-at-a-distance, with confirmation
|
||||
LLNotificationsUtil::add("FreezeAvatar",
|
||||
LLSD(),
|
||||
LLSD().with("avatar_id", mAvatarID),
|
||||
godlike_freeze);
|
||||
}
|
||||
else
|
||||
{
|
||||
// use default "local" version of freezing that requires avatar to be in range
|
||||
handle_avatar_freeze( LLSD(mAvatarID) );
|
||||
}
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
|
|
@ -737,6 +782,20 @@ void LLInspectAvatar::onClickEject()
|
|||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickKick()
|
||||
{
|
||||
LLAvatarActions::kick(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickCSR()
|
||||
{
|
||||
std::string name;
|
||||
gCacheName->getFullName(mAvatarID, name);
|
||||
LLAvatarActions::csr(mAvatarID, name);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickZoomIn()
|
||||
{
|
||||
handle_zoom_to_object(mAvatarID);
|
||||
|
|
@ -785,6 +844,11 @@ bool LLInspectAvatar::enableTeleportOffer()
|
|||
return LLAvatarActions::canOfferTeleport(mAvatarID);
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::godModeEnabled()
|
||||
{
|
||||
return gAgent.isGodlike();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// LLInspectAvatarUtil
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -3230,7 +3230,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
}
|
||||
else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
|
||||
{
|
||||
accept = TRUE;
|
||||
// Don't allow placing an original item from a notecard to Current Outfit or an outfit folder
|
||||
// because they must contain only links to wearable items.
|
||||
accept = !(move_is_into_current_outfit || move_is_into_outfit);
|
||||
|
||||
if(drop)
|
||||
{
|
||||
copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
|
||||
|
|
|
|||
|
|
@ -393,18 +393,22 @@ void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
|
|||
|
||||
void LLInventoryFilter::setFilterSubString(const std::string& string)
|
||||
{
|
||||
if (mFilterSubString != string)
|
||||
std::string filter_sub_string_new = string;
|
||||
mFilterSubStringOrig = string;
|
||||
LLStringUtil::trimHead(filter_sub_string_new);
|
||||
LLStringUtil::toUpper(filter_sub_string_new);
|
||||
|
||||
if (mFilterSubString != filter_sub_string_new)
|
||||
{
|
||||
// hitting BACKSPACE, for example
|
||||
const BOOL less_restrictive = mFilterSubString.size() >= string.size() && !mFilterSubString.substr(0, string.size()).compare(string);
|
||||
const BOOL less_restrictive = mFilterSubString.size() >= filter_sub_string_new.size()
|
||||
&& !mFilterSubString.substr(0, filter_sub_string_new.size()).compare(filter_sub_string_new);
|
||||
|
||||
// appending new characters
|
||||
const BOOL more_restrictive = mFilterSubString.size() < string.size() && !string.substr(0, mFilterSubString.size()).compare(mFilterSubString);
|
||||
const BOOL more_restrictive = mFilterSubString.size() < filter_sub_string_new.size()
|
||||
&& !filter_sub_string_new.substr(0, mFilterSubString.size()).compare(mFilterSubString);
|
||||
|
||||
mFilterSubStringOrig = string;
|
||||
LLStringUtil::trimHead(mFilterSubStringOrig);
|
||||
mFilterSubString = mFilterSubStringOrig;
|
||||
LLStringUtil::toUpper(mFilterSubString);
|
||||
mFilterSubString = filter_sub_string_new;
|
||||
if (less_restrictive)
|
||||
{
|
||||
setModified(FILTER_LESS_RESTRICTIVE);
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
|
|||
//
|
||||
// Bridge to support knowing when the inventory has changed.
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
class LLInventoryPanelObserver : public LLInventoryObserver
|
||||
{
|
||||
public:
|
||||
|
|
@ -73,9 +74,57 @@ protected:
|
|||
LLInventoryPanel* mIP;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLInvPanelComplObserver
|
||||
//
|
||||
// Calls specified callback when all specified items become complete.
|
||||
//
|
||||
// Usage:
|
||||
// observer = new LLInvPanelComplObserver(boost::bind(onComplete));
|
||||
// inventory->addObserver(observer);
|
||||
// observer->reset(); // (optional)
|
||||
// observer->watchItem(incomplete_item1_id);
|
||||
// observer->watchItem(incomplete_item2_id);
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
class LLInvPanelComplObserver : public LLInventoryCompletionObserver
|
||||
{
|
||||
public:
|
||||
typedef boost::function<void()> callback_t;
|
||||
|
||||
LLInvPanelComplObserver(callback_t cb)
|
||||
: mCallback(cb)
|
||||
{
|
||||
}
|
||||
|
||||
void reset();
|
||||
|
||||
private:
|
||||
/*virtual*/ void done();
|
||||
|
||||
/// Called when all the items are complete.
|
||||
callback_t mCallback;
|
||||
};
|
||||
|
||||
void LLInvPanelComplObserver::reset()
|
||||
{
|
||||
mIncomplete.clear();
|
||||
mComplete.clear();
|
||||
}
|
||||
|
||||
void LLInvPanelComplObserver::done()
|
||||
{
|
||||
mCallback();
|
||||
}
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLInventoryPanel
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
|
||||
LLPanel(p),
|
||||
mInventoryObserver(NULL),
|
||||
mCompletionObserver(NULL),
|
||||
mFolderRoot(NULL),
|
||||
mScroller(NULL),
|
||||
mSortOrderSetting(p.sort_order_setting),
|
||||
|
|
@ -152,6 +201,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
|
|||
mInventoryObserver = new LLInventoryPanelObserver(this);
|
||||
mInventory->addObserver(mInventoryObserver);
|
||||
|
||||
mCompletionObserver = new LLInvPanelComplObserver(boost::bind(&LLInventoryPanel::onItemsCompletion, this));
|
||||
mInventory->addObserver(mCompletionObserver);
|
||||
|
||||
// Build view of inventory if we need default full hierarchy and inventory ready,
|
||||
// otherwise wait for idle callback.
|
||||
if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mViewsInitialized)
|
||||
|
|
@ -189,7 +241,10 @@ LLInventoryPanel::~LLInventoryPanel()
|
|||
|
||||
// LLView destructor will take care of the sub-views.
|
||||
mInventory->removeObserver(mInventoryObserver);
|
||||
mInventory->removeObserver(mCompletionObserver);
|
||||
delete mInventoryObserver;
|
||||
delete mCompletionObserver;
|
||||
|
||||
mScroller = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -654,6 +709,11 @@ void LLInventoryPanel::openStartFolderOrMyInventory()
|
|||
}
|
||||
}
|
||||
|
||||
void LLInventoryPanel::onItemsCompletion()
|
||||
{
|
||||
if (mFolderRoot) mFolderRoot->updateMenu();
|
||||
}
|
||||
|
||||
void LLInventoryPanel::openSelected()
|
||||
{
|
||||
LLFolderViewItem* folder_item = mFolderRoot->getCurSelectedItem();
|
||||
|
|
@ -757,6 +817,19 @@ void LLInventoryPanel::clearSelection()
|
|||
|
||||
void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
|
||||
{
|
||||
// Schedule updating the folder view context menu when all selected items become complete (STORM-373).
|
||||
mCompletionObserver->reset();
|
||||
for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
LLUUID id = (*it)->getListener()->getUUID();
|
||||
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
|
||||
|
||||
if (inv_item && !inv_item->isFinished())
|
||||
{
|
||||
mCompletionObserver->watchItem(id);
|
||||
}
|
||||
}
|
||||
|
||||
LLFolderView* fv = getRootFolder();
|
||||
if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
|
||||
{
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ class LLIconCtrl;
|
|||
class LLSaveFolderState;
|
||||
class LLFilterEditor;
|
||||
class LLTabContainer;
|
||||
class LLInvPanelComplObserver;
|
||||
|
||||
class LLInventoryPanel : public LLPanel
|
||||
{
|
||||
|
|
@ -167,9 +168,11 @@ public:
|
|||
|
||||
protected:
|
||||
void openStartFolderOrMyInventory(); // open the first level of inventory
|
||||
void onItemsCompletion(); // called when selected items are complete
|
||||
|
||||
LLInventoryModel* mInventory;
|
||||
LLInventoryObserver* mInventoryObserver;
|
||||
LLInvPanelComplObserver* mCompletionObserver;
|
||||
BOOL mAllowMultiSelect;
|
||||
BOOL mShowItemLinkOverlays; // Shows link graphic over inventory item icons
|
||||
|
||||
|
|
|
|||
|
|
@ -901,32 +901,32 @@ void LLManipRotate::renderSnapGuides()
|
|||
{
|
||||
if (i == 0)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
|
||||
}
|
||||
else if (i == 16)
|
||||
{
|
||||
if (constraint_axis.mV[VZ] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
else if (i == 32)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (constraint_axis.mV[VZ] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -934,32 +934,32 @@ void LLManipRotate::renderSnapGuides()
|
|||
{
|
||||
if (i == 0)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
|
||||
}
|
||||
else if (i == 16)
|
||||
{
|
||||
if (constraint_axis.mV[VX] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
else if (i == 32)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (constraint_axis.mV[VX] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -967,32 +967,32 @@ void LLManipRotate::renderSnapGuides()
|
|||
{
|
||||
if (i == 0)
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
|
||||
}
|
||||
else if (i == 16)
|
||||
{
|
||||
if (constraint_axis.mV[VY] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
else if (i == 32)
|
||||
{
|
||||
renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
|
||||
renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (constraint_axis.mV[VY] > 0.f)
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
|
||||
renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,9 +37,11 @@
|
|||
#include <sstream>
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
|
||||
#include "llmemory.h"
|
||||
|
||||
LLMemoryView::LLMemoryView(const LLMemoryView::Params& p)
|
||||
: LLView(p),
|
||||
mPaused(FALSE),
|
||||
//mDelay(120),
|
||||
mAlloc(NULL)
|
||||
{
|
||||
|
|
@ -59,6 +61,7 @@ BOOL LLMemoryView::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
}
|
||||
else
|
||||
{
|
||||
mPaused = !mPaused;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -148,13 +151,14 @@ void LLMemoryView::draw()
|
|||
|
||||
// cut off lines on bottom
|
||||
U32 max_lines = U32((height - 2 * line_height) / line_height);
|
||||
std::vector<LLWString>::const_iterator end = mLines.end();
|
||||
y_pos = height - MARGIN_AMT - line_height;
|
||||
y_off = 0.f;
|
||||
|
||||
#if !MEM_TRACK_MEM
|
||||
std::vector<LLWString>::const_iterator end = mLines.end();
|
||||
if(mLines.size() > max_lines) {
|
||||
end = mLines.begin() + max_lines;
|
||||
}
|
||||
|
||||
y_pos = height - MARGIN_AMT - line_height;
|
||||
y_off = 0.f;
|
||||
for (std::vector<LLWString>::const_iterator i = mLines.begin(); i != end; ++i)
|
||||
{
|
||||
font->render(*i, 0, MARGIN_AMT, y_pos - y_off,
|
||||
|
|
@ -169,6 +173,47 @@ void LLMemoryView::draw()
|
|||
y_off += line_height;
|
||||
}
|
||||
|
||||
#else
|
||||
LLMemTracker::getInstance()->preDraw(mPaused) ;
|
||||
|
||||
{
|
||||
F32 x_pos = MARGIN_AMT ;
|
||||
U32 lines = 0 ;
|
||||
const char* str = LLMemTracker::getInstance()->getNextLine() ;
|
||||
while(str != NULL)
|
||||
{
|
||||
lines++ ;
|
||||
font->renderUTF8(str, 0, x_pos, y_pos - y_off,
|
||||
LLColor4::white,
|
||||
LLFontGL::LEFT,
|
||||
LLFontGL::BASELINE,
|
||||
LLFontGL::NORMAL,
|
||||
LLFontGL::DROP_SHADOW,
|
||||
S32_MAX,
|
||||
target_width,
|
||||
NULL, FALSE);
|
||||
|
||||
str = LLMemTracker::getInstance()->getNextLine() ;
|
||||
y_off += line_height;
|
||||
|
||||
if(lines >= max_lines)
|
||||
{
|
||||
lines = 0 ;
|
||||
x_pos += 512.f ;
|
||||
if(x_pos + 512.f > target_width)
|
||||
{
|
||||
break ;
|
||||
}
|
||||
|
||||
y_pos = height - MARGIN_AMT - line_height;
|
||||
y_off = 0.f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLMemTracker::getInstance()->postDraw() ;
|
||||
#endif
|
||||
|
||||
#if MEM_TRACK_TYPE
|
||||
|
||||
S32 left, top, right, bottom;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ public:
|
|||
private:
|
||||
std::vector<LLWString> mLines;
|
||||
LLAllocator* mAlloc;
|
||||
BOOL mPaused ;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -373,17 +373,19 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
|
|||
// Must be after erase.
|
||||
setLoaded(); // why is this here? -MG
|
||||
}
|
||||
|
||||
// Clean up any legacy mutes
|
||||
string_set_t::iterator legacy_it = mLegacyMutes.find(mute.mName);
|
||||
if (legacy_it != mLegacyMutes.end())
|
||||
else
|
||||
{
|
||||
// Database representation of legacy mute is UUID null.
|
||||
LLMute mute(LLUUID::null, *legacy_it, LLMute::BY_NAME);
|
||||
updateRemove(mute);
|
||||
mLegacyMutes.erase(legacy_it);
|
||||
// Must be after erase.
|
||||
setLoaded(); // why is this here? -MG
|
||||
// Clean up any legacy mutes
|
||||
string_set_t::iterator legacy_it = mLegacyMutes.find(mute.mName);
|
||||
if (legacy_it != mLegacyMutes.end())
|
||||
{
|
||||
// Database representation of legacy mute is UUID null.
|
||||
LLMute mute(LLUUID::null, *legacy_it, LLMute::BY_NAME);
|
||||
updateRemove(mute);
|
||||
mLegacyMutes.erase(legacy_it);
|
||||
// Must be after erase.
|
||||
setLoaded(); // why is this here? -MG
|
||||
}
|
||||
}
|
||||
|
||||
return found;
|
||||
|
|
@ -607,7 +609,8 @@ BOOL LLMuteList::isMuted(const LLUUID& id, const std::string& name, U32 flags) c
|
|||
}
|
||||
|
||||
// empty names can't be legacy-muted
|
||||
if (name.empty()) return FALSE;
|
||||
bool avatar = mute_object && mute_object->isAvatar();
|
||||
if (name.empty() || avatar) return FALSE;
|
||||
|
||||
// Look in legacy pile
|
||||
string_set_t::const_iterator legacy_it = mLegacyMutes.find(name);
|
||||
|
|
|
|||
|
|
@ -143,6 +143,30 @@ void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index )
|
|||
S32 cur_index = getHighlightedItemInx();
|
||||
if (cur_index != target_index)
|
||||
{
|
||||
bool is_mouse_over_name_cell = false;
|
||||
|
||||
S32 mouse_x, mouse_y;
|
||||
LLUI::getMousePositionLocal(this, &mouse_x, &mouse_y);
|
||||
|
||||
S32 column_index = getColumnIndexFromOffset(mouse_x);
|
||||
LLScrollListItem* hit_item = hitItem(mouse_x, mouse_y);
|
||||
if (hit_item && column_index == mNameColumnIndex)
|
||||
{
|
||||
// Get the name cell which is currently under the mouse pointer.
|
||||
LLScrollListCell* hit_cell = hit_item->getColumn(column_index);
|
||||
if (hit_cell)
|
||||
{
|
||||
is_mouse_over_name_cell = getCellRect(cur_index, column_index).pointInRect(mouse_x, mouse_y);
|
||||
}
|
||||
}
|
||||
|
||||
// If the tool tip is visible and the mouse is over the currently highlighted item's name cell,
|
||||
// we should not reset the highlighted item index i.e. set mHighlightedItem = -1
|
||||
// and should not increase the width of the text inside the cell because it may
|
||||
// overlap the tool tip icon.
|
||||
if (LLToolTipMgr::getInstance()->toolTipVisible() && is_mouse_over_name_cell)
|
||||
return;
|
||||
|
||||
if(0 <= cur_index && cur_index < (S32)getItemList().size())
|
||||
{
|
||||
LLScrollListItem* item = getItemList()[cur_index];
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "llagentcamera.h"
|
||||
#include "llappviewer.h" // for gDisconnected
|
||||
#include "llcallingcard.h" // LLAvatarTracker
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "lltracker.h"
|
||||
#include "llsurface.h"
|
||||
#include "llviewercamera.h"
|
||||
|
|
@ -91,7 +92,8 @@ LLNetMap::LLNetMap (const Params & p)
|
|||
mObjectImagep(),
|
||||
mClosestAgentToCursor(),
|
||||
mClosestAgentAtLastRightClick(),
|
||||
mToolTipMsg()
|
||||
mToolTipMsg(),
|
||||
mPopupMenu(NULL)
|
||||
{
|
||||
mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
|
||||
setScale(gSavedSettings.getF32("MiniMapScale"));
|
||||
|
|
@ -102,6 +104,21 @@ LLNetMap::~LLNetMap()
|
|||
gSavedSettings.setF32("MiniMapScale", mScale);
|
||||
}
|
||||
|
||||
BOOL LLNetMap::postBuild()
|
||||
{
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
|
||||
registrar.add("Minimap.Zoom", boost::bind(&LLNetMap::handleZoom, this, _2));
|
||||
registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2));
|
||||
|
||||
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
if (mPopupMenu && !LLTracker::isTracking(0))
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", false);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLNetMap::setScale( F32 scale )
|
||||
{
|
||||
scale = llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX);
|
||||
|
|
@ -354,16 +371,49 @@ void LLNetMap::draw()
|
|||
|
||||
pos_map = globalPosToView(pos_global);
|
||||
|
||||
LLUUID uuid(NULL);
|
||||
BOOL show_as_friend = FALSE;
|
||||
if( i < regionp->mMapAvatarIDs.count())
|
||||
{
|
||||
show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(regionp->mMapAvatarIDs.get(i)) != NULL);
|
||||
uuid = regionp->mMapAvatarIDs.get(i);
|
||||
show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL);
|
||||
}
|
||||
|
||||
LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color;
|
||||
LLWorldMapView::drawAvatar(
|
||||
pos_map.mV[VX], pos_map.mV[VY],
|
||||
show_as_friend ? map_avatar_friend_color : map_avatar_color,
|
||||
color,
|
||||
pos_map.mV[VZ], mDotRadius);
|
||||
|
||||
if(uuid.notNull())
|
||||
{
|
||||
bool selected = false;
|
||||
uuid_vec_t::iterator sel_iter = gmSelected.begin();
|
||||
for (; sel_iter != gmSelected.end(); sel_iter++)
|
||||
{
|
||||
if(*sel_iter == uuid)
|
||||
{
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(selected)
|
||||
{
|
||||
if( (pos_map.mV[VX] < 0) ||
|
||||
(pos_map.mV[VY] < 0) ||
|
||||
(pos_map.mV[VX] >= getRect().getWidth()) ||
|
||||
(pos_map.mV[VY] >= getRect().getHeight()) )
|
||||
{
|
||||
S32 x = llround( pos_map.mV[VX] );
|
||||
S32 y = llround( pos_map.mV[VY] );
|
||||
LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);
|
||||
} else
|
||||
{
|
||||
LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]),
|
||||
LLVector2(local_mouse_x,local_mouse_y));
|
||||
if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist)
|
||||
|
|
@ -460,6 +510,13 @@ void LLNetMap::draw()
|
|||
gGL.popUIMatrix();
|
||||
|
||||
LLUICtrl::draw();
|
||||
|
||||
if (LLTracker::isTracking(0))
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
|
||||
|
|
@ -600,7 +657,6 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
|
|||
args["[REGION]"] = region_name;
|
||||
std::string msg = mToolTipMsg;
|
||||
LLStringUtil::format(msg, args);
|
||||
|
||||
LLToolTipMgr::instance().show(LLToolTip::Params()
|
||||
.message(msg)
|
||||
.sticky_rect(sticky_rect));
|
||||
|
|
@ -793,6 +849,9 @@ BOOL LLNetMap::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
|
||||
BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
|
||||
{
|
||||
if(abs(mMouseDown.mX-x)<3 && abs(mMouseDown.mY-y)<3)
|
||||
handleClick(x,y,mask);
|
||||
|
||||
if (hasMouseCapture())
|
||||
{
|
||||
if (mPanning)
|
||||
|
|
@ -821,6 +880,53 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (mPopupMenu)
|
||||
{
|
||||
mPopupMenu->buildDrawLabels();
|
||||
mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, mPopupMenu, x, y);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
// TODO: allow clicking an avatar on minimap to select avatar in the nearby avatar list
|
||||
// if(mClosestAgentToCursor.notNull())
|
||||
// mNearbyList->selectUser(mClosestAgentToCursor);
|
||||
// Needs a registered observer i guess to accomplish this without using
|
||||
// globals to tell the mNearbyList in llpeoplepanel to select the user
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLVector3d pos_global = viewPosToGlobal(x, y);
|
||||
|
||||
// If we're not tracking a beacon already, double-click will set one
|
||||
if (!LLTracker::isTracking(NULL))
|
||||
{
|
||||
LLFloaterWorldMap* world_map = LLFloaterWorldMap::getInstance();
|
||||
if (world_map)
|
||||
{
|
||||
world_map->trackLocation(pos_global);
|
||||
}
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("DoubleClickTeleport"))
|
||||
{
|
||||
// If DoubleClickTeleport is on, double clicking the minimap will teleport there
|
||||
gAgent.teleportViaLocationLookAt(pos_global);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFloaterReg::showInstance("world_map");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLNetMap::outsideSlop( S32 x, S32 y, S32 start_x, S32 start_y, S32 slop )
|
||||
{
|
||||
|
|
@ -871,3 +977,38 @@ BOOL LLNetMap::handleHover( S32 x, S32 y, MASK mask )
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLNetMap::handleZoom(const LLSD& userdata)
|
||||
{
|
||||
std::string level = userdata.asString();
|
||||
|
||||
F32 scale = 0.0f;
|
||||
if (level == std::string("default"))
|
||||
{
|
||||
LLControlVariable *pvar = gSavedSettings.getControl("MiniMapScale");
|
||||
if(pvar)
|
||||
{
|
||||
pvar->resetToDefault();
|
||||
scale = gSavedSettings.getF32("MiniMapScale");
|
||||
}
|
||||
}
|
||||
else if (level == std::string("close"))
|
||||
scale = LLNetMap::MAP_SCALE_MAX;
|
||||
else if (level == std::string("medium"))
|
||||
scale = LLNetMap::MAP_SCALE_MID;
|
||||
else if (level == std::string("far"))
|
||||
scale = LLNetMap::MAP_SCALE_MIN;
|
||||
if (scale != 0.0f)
|
||||
{
|
||||
setScale(scale);
|
||||
}
|
||||
}
|
||||
|
||||
void LLNetMap::handleStopTracking (const LLSD& userdata)
|
||||
{
|
||||
if (mPopupMenu)
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", false);
|
||||
LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class LLCoordGL;
|
|||
class LLImageRaw;
|
||||
class LLViewerTexture;
|
||||
class LLFloaterMap;
|
||||
class LLMenuGL;
|
||||
|
||||
class LLNetMap : public LLUICtrl
|
||||
{
|
||||
|
|
@ -72,7 +73,12 @@ public:
|
|||
/*virtual*/ BOOL handleHover( S32 x, S32 y, MASK mask );
|
||||
/*virtual*/ BOOL handleToolTip( S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
|
||||
/*virtual*/ BOOL handleClick(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
|
||||
|
||||
void setScale( F32 scale );
|
||||
void setToolTipMsg(const std::string& msg) { mToolTipMsg = msg; }
|
||||
void renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius );
|
||||
|
|
@ -120,6 +126,16 @@ private:
|
|||
LLUUID mClosestAgentAtLastRightClick;
|
||||
|
||||
std::string mToolTipMsg;
|
||||
|
||||
public:
|
||||
void setSelected(uuid_vec_t uuids) { gmSelected=uuids; };
|
||||
|
||||
private:
|
||||
void handleZoom(const LLSD& userdata);
|
||||
void handleStopTracking (const LLSD& userdata);
|
||||
|
||||
LLMenuGL* mPopupMenu;
|
||||
uuid_vec_t gmSelected;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -625,10 +625,15 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g
|
|||
getChild<LLUICtrl>("sl_groups")->setValue(groups);
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::got_full_name_callback( const LLUUID& id, const std::string& full_name, bool is_group )
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
|
||||
static void got_full_name_callback( LLHandle<LLPanel> profile_panel_handle, const std::string& full_name )
|
||||
{
|
||||
if (profile_panel_handle.isDead() ) return;
|
||||
|
||||
LLPanelAvatarProfile* profile_panel = dynamic_cast<LLPanelAvatarProfile*>(profile_panel_handle.get());
|
||||
if ( ! profile_panel ) return;
|
||||
|
||||
LLStringUtil::format_map_t args;
|
||||
|
||||
std::string name;
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
|
|
@ -637,21 +642,21 @@ void LLPanelAvatarProfile::got_full_name_callback( const LLUUID& id, const std::
|
|||
else
|
||||
{
|
||||
name = full_name;
|
||||
}
|
||||
|
||||
args["[NAME]"] = name;
|
||||
|
||||
std::string linden_name = getString("name_text_args", args);
|
||||
getChild<LLUICtrl>("name_descr_text")->setValue(linden_name);
|
||||
}
|
||||
}
|
||||
|
||||
args["[NAME]"] = name;
|
||||
|
||||
std::string linden_name = profile_panel->getString("name_text_args", args);
|
||||
profile_panel->getChild<LLUICtrl>("name_descr_text")->setValue(linden_name);
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[DISPLAY_NAME]"] = av_name.mDisplayName;
|
||||
|
||||
std::string display_name = getString("display_name_text_args", args);
|
||||
getChild<LLUICtrl>("display_name_descr_text")->setValue(display_name);
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[DISPLAY_NAME]"] = av_name.mDisplayName;
|
||||
|
||||
std::string display_name = getString("display_name_text_args", args);
|
||||
getChild<LLUICtrl>("display_name_descr_text")->setValue(display_name);
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
|
||||
|
|
@ -667,22 +672,23 @@ void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
|
|||
}
|
||||
|
||||
// ask (asynchronously) for the avatar name
|
||||
std::string full_name;
|
||||
if (gCacheName->getFullName(avatar_data->agent_id, full_name))
|
||||
{
|
||||
// name in cache, call callback directly
|
||||
got_full_name_callback( avatar_data->agent_id, full_name, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
// not in cache, lookup name
|
||||
gCacheName->get(avatar_data->agent_id, false, boost::bind( &LLPanelAvatarProfile::got_full_name_callback, this, _1, _2, _3 ));
|
||||
}
|
||||
|
||||
// get display name
|
||||
LLHandle<LLPanel> profile_panel_handle = getHandle();
|
||||
std::string full_name;
|
||||
if (gCacheName->getFullName(avatar_data->agent_id, full_name))
|
||||
{
|
||||
// name in cache, call callback directly
|
||||
got_full_name_callback( profile_panel_handle, full_name );
|
||||
}
|
||||
else
|
||||
{
|
||||
// not in cache, lookup name
|
||||
gCacheName->get(avatar_data->agent_id, false, boost::bind( got_full_name_callback, profile_panel_handle, _2 ));
|
||||
}
|
||||
|
||||
// get display name
|
||||
LLAvatarNameCache::get(avatar_data->avatar_id,
|
||||
boost::bind(&LLPanelAvatarProfile::onNameCache, this, _1, _2));
|
||||
|
||||
boost::bind(&LLPanelAvatarProfile::onNameCache, this, _1, _2));
|
||||
|
||||
args["[AGE]"] = LLDateUtil::ageFromDate( avatar_data->born_on, LLDate::now());
|
||||
std::string register_date = getString("RegisterDateFormat", args);
|
||||
getChild<LLUICtrl>("register_date")->setValue(register_date );
|
||||
|
|
|
|||
|
|
@ -1,298 +1,297 @@
|
|||
/**
|
||||
* @file llpanelavatar.h
|
||||
* @brief LLPanelAvatar and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2004&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELAVATAR_H
|
||||
#define LL_LLPANELAVATAR_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
class LLComboBox;
|
||||
class LLLineEditor;
|
||||
|
||||
enum EOnlineStatus
|
||||
{
|
||||
ONLINE_STATUS_NO = 0,
|
||||
ONLINE_STATUS_YES = 1
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class for any Profile View or My Profile Panel.
|
||||
*/
|
||||
class LLPanelProfileTab
|
||||
: public LLPanel
|
||||
, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Sets avatar ID, sets panel as observer of avatar related info replies from server.
|
||||
*/
|
||||
virtual void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Returns avatar ID.
|
||||
*/
|
||||
virtual const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
virtual void updateData() = 0;
|
||||
|
||||
/**
|
||||
* Clears panel data if viewing avatar info for first time and sends update data request.
|
||||
*/
|
||||
virtual void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* Profile tabs should close any opened panels here.
|
||||
*
|
||||
* Called from LLPanelProfile::onOpen() before opening new profile.
|
||||
* See LLPanelPicks::onClosePanel for example. LLPanelPicks closes picture info panel
|
||||
* before new profile is displayed, otherwise new profile will
|
||||
* be hidden behind picture info panel.
|
||||
*/
|
||||
virtual void onClosePanel() {}
|
||||
|
||||
/**
|
||||
* Resets controls visibility, state, etc.
|
||||
*/
|
||||
virtual void resetControls(){};
|
||||
|
||||
/**
|
||||
* Clears all data received from server.
|
||||
*/
|
||||
virtual void resetData(){};
|
||||
|
||||
/*virtual*/ ~LLPanelProfileTab();
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelProfileTab();
|
||||
|
||||
/**
|
||||
* Scrolls panel to top when viewing avatar info for first time.
|
||||
*/
|
||||
void scrollToTop();
|
||||
|
||||
virtual void onMapButtonClick();
|
||||
|
||||
virtual void updateButtons();
|
||||
|
||||
private:
|
||||
|
||||
LLUUID mAvatarId;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's first and second life related info.
|
||||
*/
|
||||
class LLPanelAvatarProfile
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
public:
|
||||
LLPanelAvatarProfile();
|
||||
/*virtual*/ ~LLPanelAvatarProfile();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
|
||||
// button when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
/*virtual*/ void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Processes data received from server.
|
||||
*/
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Process profile related data received from server.
|
||||
*/
|
||||
virtual void processProfileProperties(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Processes group related data received from server.
|
||||
*/
|
||||
virtual void processGroupProperties(const LLAvatarGroups* avatar_groups);
|
||||
|
||||
/**
|
||||
* Fills common for Avatar profile and My Profile fields.
|
||||
*/
|
||||
virtual void fillCommonData(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Fills partner data.
|
||||
*/
|
||||
virtual void fillPartnerData(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Fills account status.
|
||||
*/
|
||||
virtual void fillAccountStatus(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Opens "Pay Resident" dialog.
|
||||
*/
|
||||
void pay();
|
||||
|
||||
/**
|
||||
* opens inventory and IM for sharing items
|
||||
*/
|
||||
void share();
|
||||
|
||||
/**
|
||||
* Add/remove resident to/from your block list.
|
||||
*/
|
||||
void toggleBlock();
|
||||
|
||||
void kick();
|
||||
void freeze();
|
||||
void unfreeze();
|
||||
void csr();
|
||||
|
||||
bool enableShowOnMap();
|
||||
bool enableBlock();
|
||||
bool enableUnblock();
|
||||
bool enableGod();
|
||||
|
||||
void onSeeProfileBtnClick();
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onCallButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
void onShareButtonClick();
|
||||
|
||||
private:
|
||||
void got_full_name_callback( const LLUUID& id, const std::string& full_name, bool is_group );
|
||||
void onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
|
||||
typedef std::map< std::string,LLUUID> group_map_t;
|
||||
group_map_t mGroups;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying own first and second life related info.
|
||||
*/
|
||||
class LLPanelMyProfile
|
||||
: public LLPanelAvatarProfile
|
||||
{
|
||||
public:
|
||||
LLPanelMyProfile();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
protected:
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void processProfileProperties(const LLAvatarData* avatar_data);
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
protected:
|
||||
void onStatusMessageChanged();
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's notes and modifying friend's rights.
|
||||
*/
|
||||
class LLPanelAvatarNotes
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
public:
|
||||
LLPanelAvatarNotes();
|
||||
/*virtual*/ ~LLPanelAvatarNotes();
|
||||
|
||||
virtual void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
|
||||
// button when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
protected:
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
/**
|
||||
* Fills rights data for friends.
|
||||
*/
|
||||
void fillRightsData();
|
||||
|
||||
void rightsConfirmationCallback(const LLSD& notification,
|
||||
const LLSD& response, S32 rights);
|
||||
void confirmModifyRights(bool grant, S32 rights);
|
||||
void onCommitRights();
|
||||
void onCommitNotes();
|
||||
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onCallButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
void onShareButtonClick();
|
||||
void enableCheckboxes(bool enable);
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELAVATAR_H
|
||||
/**
|
||||
* @file llpanelavatar.h
|
||||
* @brief LLPanelAvatar and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2004&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELAVATAR_H
|
||||
#define LL_LLPANELAVATAR_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
class LLComboBox;
|
||||
class LLLineEditor;
|
||||
|
||||
enum EOnlineStatus
|
||||
{
|
||||
ONLINE_STATUS_NO = 0,
|
||||
ONLINE_STATUS_YES = 1
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class for any Profile View or My Profile Panel.
|
||||
*/
|
||||
class LLPanelProfileTab
|
||||
: public LLPanel
|
||||
, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Sets avatar ID, sets panel as observer of avatar related info replies from server.
|
||||
*/
|
||||
virtual void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Returns avatar ID.
|
||||
*/
|
||||
virtual const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
virtual void updateData() = 0;
|
||||
|
||||
/**
|
||||
* Clears panel data if viewing avatar info for first time and sends update data request.
|
||||
*/
|
||||
virtual void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* Profile tabs should close any opened panels here.
|
||||
*
|
||||
* Called from LLPanelProfile::onOpen() before opening new profile.
|
||||
* See LLPanelPicks::onClosePanel for example. LLPanelPicks closes picture info panel
|
||||
* before new profile is displayed, otherwise new profile will
|
||||
* be hidden behind picture info panel.
|
||||
*/
|
||||
virtual void onClosePanel() {}
|
||||
|
||||
/**
|
||||
* Resets controls visibility, state, etc.
|
||||
*/
|
||||
virtual void resetControls(){};
|
||||
|
||||
/**
|
||||
* Clears all data received from server.
|
||||
*/
|
||||
virtual void resetData(){};
|
||||
|
||||
/*virtual*/ ~LLPanelProfileTab();
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelProfileTab();
|
||||
|
||||
/**
|
||||
* Scrolls panel to top when viewing avatar info for first time.
|
||||
*/
|
||||
void scrollToTop();
|
||||
|
||||
virtual void onMapButtonClick();
|
||||
|
||||
virtual void updateButtons();
|
||||
|
||||
private:
|
||||
|
||||
LLUUID mAvatarId;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's first and second life related info.
|
||||
*/
|
||||
class LLPanelAvatarProfile
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
public:
|
||||
LLPanelAvatarProfile();
|
||||
/*virtual*/ ~LLPanelAvatarProfile();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
|
||||
// button when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
/*virtual*/ void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Processes data received from server.
|
||||
*/
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Process profile related data received from server.
|
||||
*/
|
||||
virtual void processProfileProperties(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Processes group related data received from server.
|
||||
*/
|
||||
virtual void processGroupProperties(const LLAvatarGroups* avatar_groups);
|
||||
|
||||
/**
|
||||
* Fills common for Avatar profile and My Profile fields.
|
||||
*/
|
||||
virtual void fillCommonData(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Fills partner data.
|
||||
*/
|
||||
virtual void fillPartnerData(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Fills account status.
|
||||
*/
|
||||
virtual void fillAccountStatus(const LLAvatarData* avatar_data);
|
||||
|
||||
/**
|
||||
* Opens "Pay Resident" dialog.
|
||||
*/
|
||||
void pay();
|
||||
|
||||
/**
|
||||
* opens inventory and IM for sharing items
|
||||
*/
|
||||
void share();
|
||||
|
||||
/**
|
||||
* Add/remove resident to/from your block list.
|
||||
*/
|
||||
void toggleBlock();
|
||||
|
||||
void kick();
|
||||
void freeze();
|
||||
void unfreeze();
|
||||
void csr();
|
||||
|
||||
bool enableShowOnMap();
|
||||
bool enableBlock();
|
||||
bool enableUnblock();
|
||||
bool enableGod();
|
||||
|
||||
void onSeeProfileBtnClick();
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onCallButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
void onShareButtonClick();
|
||||
|
||||
private:
|
||||
void onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
|
||||
typedef std::map< std::string,LLUUID> group_map_t;
|
||||
group_map_t mGroups;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying own first and second life related info.
|
||||
*/
|
||||
class LLPanelMyProfile
|
||||
: public LLPanelAvatarProfile
|
||||
{
|
||||
public:
|
||||
LLPanelMyProfile();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
protected:
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void processProfileProperties(const LLAvatarData* avatar_data);
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
protected:
|
||||
void onStatusMessageChanged();
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's notes and modifying friend's rights.
|
||||
*/
|
||||
class LLPanelAvatarNotes
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
public:
|
||||
LLPanelAvatarNotes();
|
||||
/*virtual*/ ~LLPanelAvatarNotes();
|
||||
|
||||
virtual void setAvatarId(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
|
||||
// button when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
protected:
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
/**
|
||||
* Fills rights data for friends.
|
||||
*/
|
||||
void fillRightsData();
|
||||
|
||||
void rightsConfirmationCallback(const LLSD& notification,
|
||||
const LLSD& response, S32 rights);
|
||||
void confirmModifyRights(bool grant, S32 rights);
|
||||
void onCommitRights();
|
||||
void onCommitNotes();
|
||||
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onCallButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
void onShareButtonClick();
|
||||
void enableCheckboxes(bool enable);
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELAVATAR_H
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ const S32 MAX_PASSWORD = 16;
|
|||
LLPanelLogin *LLPanelLogin::sInstance = NULL;
|
||||
BOOL LLPanelLogin::sCapslockDidNotification = FALSE;
|
||||
|
||||
// Helper for converting a user name into the canonical "Firstname Lastname" form.
|
||||
// For new accounts without a last name "Resident" is added as a last name.
|
||||
static std::string canonicalize_username(const std::string& name);
|
||||
|
||||
class LLLoginRefreshHandler : public LLCommandHandler
|
||||
{
|
||||
|
|
@ -298,7 +301,14 @@ void LLPanelLogin::addFavoritesToStartLocation()
|
|||
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
|
||||
iter != fav_llsd.endMap(); ++iter)
|
||||
{
|
||||
if(iter->first != getChild<LLComboBox>("username_combo")->getSimple()) continue;
|
||||
std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple();
|
||||
|
||||
// The account name in stored_favorites.xml has Resident last name even if user has
|
||||
// a single word account name, so it can be compared case-insensitive with the
|
||||
// user defined "firstname lastname".
|
||||
S32 res = LLStringUtil::compareInsensitive(canonicalize_username(user_defined_name), iter->first);
|
||||
if (res != 0) continue;
|
||||
|
||||
combo->addSeparator();
|
||||
LLSD user_llsd = iter->second;
|
||||
for (LLSD::array_const_iterator iter1 = user_llsd.beginArray();
|
||||
|
|
@ -1156,3 +1166,28 @@ void LLPanelLogin::updateLoginPanelLinks()
|
|||
sInstance->getChildView("create_new_account_text")->setVisible( system_grid);
|
||||
sInstance->getChildView("forgot_password_text")->setVisible( system_grid);
|
||||
}
|
||||
|
||||
std::string canonicalize_username(const std::string& name)
|
||||
{
|
||||
std::string cname = name;
|
||||
LLStringUtil::trim(cname);
|
||||
|
||||
// determine if the username is a first/last form or not.
|
||||
size_t separator_index = cname.find_first_of(" ._");
|
||||
std::string first = cname.substr(0, separator_index);
|
||||
std::string last;
|
||||
if (separator_index != cname.npos)
|
||||
{
|
||||
last = cname.substr(separator_index+1, cname.npos);
|
||||
LLStringUtil::trim(last);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ...on Linden grids, single username users as considered to have
|
||||
// last name "Resident"
|
||||
last = "Resident";
|
||||
}
|
||||
|
||||
// Username in traditional "firstname lastname" form.
|
||||
return first + ' ' + last;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,18 +118,6 @@ LLPanelMainInventory::LLPanelMainInventory()
|
|||
mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
|
||||
mCommitCallbackRegistrar.add("Inventory.Share", boost::bind(&LLAvatarActions::shareWithAvatars));
|
||||
|
||||
// Controls
|
||||
// *TODO: Just use persistant settings for each of these
|
||||
U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER);
|
||||
BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
|
||||
BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
|
||||
BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
|
||||
|
||||
gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
|
||||
gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
|
||||
gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
|
||||
gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
|
||||
|
||||
mSavedFolderState = new LLSaveFolderState();
|
||||
mSavedFolderState->setApply(FALSE);
|
||||
}
|
||||
|
|
@ -325,67 +313,41 @@ void LLPanelMainInventory::resetFilters()
|
|||
|
||||
void LLPanelMainInventory::setSortBy(const LLSD& userdata)
|
||||
{
|
||||
std::string sort_field = userdata.asString();
|
||||
if (sort_field == "name")
|
||||
U32 sort_order_mask = getActivePanel()->getSortOrder();
|
||||
std::string sort_type = userdata.asString();
|
||||
if (sort_type == "name")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
order &= ~LLInventoryFilter::SO_DATE;
|
||||
|
||||
getActivePanel()->setSortOrder( order );
|
||||
|
||||
gSavedSettings.setU32("InventorySortOrder", order);
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
|
||||
gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
|
||||
sort_order_mask &= ~LLInventoryFilter::SO_DATE;
|
||||
}
|
||||
else if (sort_field == "date")
|
||||
else if (sort_type == "date")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
order |= LLInventoryFilter::SO_DATE;
|
||||
|
||||
getActivePanel()->setSortOrder( order );
|
||||
|
||||
gSavedSettings.setU32("InventorySortOrder", order);
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
|
||||
gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
|
||||
sort_order_mask |= LLInventoryFilter::SO_DATE;
|
||||
}
|
||||
else if (sort_field == "foldersalwaysbyname")
|
||||
else if (sort_type == "foldersalwaysbyname")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
|
||||
if ( sort_order_mask & LLInventoryFilter::SO_FOLDERS_BY_NAME )
|
||||
{
|
||||
order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
|
||||
sort_order_mask &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
|
||||
sort_order_mask |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
|
||||
}
|
||||
getActivePanel()->setSortOrder( order );
|
||||
}
|
||||
else if (sort_field == "systemfolderstotop")
|
||||
else if (sort_type == "systemfolderstotop")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
|
||||
if ( sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
|
||||
{
|
||||
order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
|
||||
sort_order_mask &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
}
|
||||
else
|
||||
{
|
||||
order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
|
||||
gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
|
||||
sort_order_mask |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
}
|
||||
getActivePanel()->setSortOrder( order );
|
||||
|
||||
gSavedSettings.setU32("InventorySortOrder", order);
|
||||
}
|
||||
|
||||
getActivePanel()->setSortOrder(sort_order_mask);
|
||||
gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -1013,6 +975,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
|
|||
const LLSD arg = "date";
|
||||
setSortBy(arg);
|
||||
}
|
||||
if (command_name == "sort_folders_by_name")
|
||||
{
|
||||
const LLSD arg = "foldersalwaysbyname";
|
||||
setSortBy(arg);
|
||||
}
|
||||
if (command_name == "sort_system_folders_to_top")
|
||||
{
|
||||
const LLSD arg = "systemfolderstotop";
|
||||
|
|
@ -1193,24 +1160,26 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
|
|||
|
||||
BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)
|
||||
{
|
||||
U32 sort_order_mask = getActivePanel()->getSortOrder();
|
||||
const std::string command_name = userdata.asString();
|
||||
|
||||
if (command_name == "sort_by_name")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
return ~order & LLInventoryFilter::SO_DATE;
|
||||
return ~sort_order_mask & LLInventoryFilter::SO_DATE;
|
||||
}
|
||||
|
||||
if (command_name == "sort_by_recent")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
return order & LLInventoryFilter::SO_DATE;
|
||||
return sort_order_mask & LLInventoryFilter::SO_DATE;
|
||||
}
|
||||
|
||||
if (command_name == "sort_folders_by_name")
|
||||
{
|
||||
return sort_order_mask & LLInventoryFilter::SO_FOLDERS_BY_NAME;
|
||||
}
|
||||
|
||||
if (command_name == "sort_system_folders_to_top")
|
||||
{
|
||||
U32 order = getActivePanel()->getSortOrder();
|
||||
return order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
return sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llgroupactions.h"
|
||||
#include "llgrouplist.h"
|
||||
#include "llinventoryobserver.h"
|
||||
#include "llnetmap.h"
|
||||
#include "llpanelpeoplemenus.h"
|
||||
#include "llsidetray.h"
|
||||
#include "llsidetraypanelcontainer.h"
|
||||
|
|
@ -494,7 +495,8 @@ LLPanelPeople::LLPanelPeople()
|
|||
mNearbyGearButton(NULL),
|
||||
mFriendsGearButton(NULL),
|
||||
mGroupsGearButton(NULL),
|
||||
mRecentGearButton(NULL)
|
||||
mRecentGearButton(NULL),
|
||||
mMiniMap(NULL)
|
||||
{
|
||||
mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this));
|
||||
mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this));
|
||||
|
|
@ -567,6 +569,9 @@ BOOL LLPanelPeople::postBuild()
|
|||
mNearbyList->setNoItemsMsg(getString("no_one_near"));
|
||||
mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near"));
|
||||
mNearbyList->setShowIcons("NearbyListShowIcons");
|
||||
mMiniMap = (LLNetMap*)getChildView("Net Map",true);
|
||||
mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ?
|
||||
getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg"));
|
||||
|
||||
mRecentList = getChild<LLPanel>(RECENT_TAB_NAME)->getChild<LLAvatarList>("avatar_list");
|
||||
mRecentList->setNoItemsCommentText(getString("no_recent_people"));
|
||||
|
|
@ -1088,6 +1093,12 @@ void LLPanelPeople::onAvatarListDoubleClicked(LLUICtrl* ctrl)
|
|||
|
||||
void LLPanelPeople::onAvatarListCommitted(LLAvatarList* list)
|
||||
{
|
||||
if (getActiveTabName() == NEARBY_TAB_NAME)
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
mMiniMap->setSelected(selected_uuids);
|
||||
} else
|
||||
// Make sure only one of the friends lists (online/all) has selection.
|
||||
if (getActiveTabName() == FRIENDS_TAB_NAME)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ private:
|
|||
LLAvatarList* mNearbyList;
|
||||
LLAvatarList* mRecentList;
|
||||
LLGroupList* mGroupList;
|
||||
LLNetMap* mMiniMap;
|
||||
|
||||
LLHandle<LLView> mGroupPlusMenuHandle;
|
||||
LLHandle<LLView> mNearbyViewSortMenuHandle;
|
||||
|
|
|
|||
|
|
@ -1597,7 +1597,7 @@ std::string LLPreviewGesture::getLabel(std::vector<std::string> labels)
|
|||
|
||||
if(v_labels[0]=="Chat")
|
||||
{
|
||||
result=LLTrans::getString("Chat");
|
||||
result=LLTrans::getString("Chat Message");
|
||||
}
|
||||
else if(v_labels[0]=="Sound")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -273,6 +273,8 @@ void LLPreviewTexture::saveAs()
|
|||
mSaveFileName = file_picker.getFirstFile();
|
||||
mLoadingFullImage = TRUE;
|
||||
getWindow()->incBusyCount();
|
||||
|
||||
mImage->forceToSaveRawImage(0) ;//re-fetch the raw image if the old one is removed.
|
||||
mImage->setLoadedCallback( LLPreviewTexture::onFileLoadedForSave,
|
||||
0, TRUE, FALSE, new LLUUID( mItemUUID ), &mCallbackTextureList );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
using namespace LLOldEvents;
|
||||
|
||||
bool LLRecentPeople::add(const LLUUID& id)
|
||||
bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)
|
||||
{
|
||||
if (id == gAgent.getID())
|
||||
return false;
|
||||
|
|
@ -42,10 +42,16 @@ bool LLRecentPeople::add(const LLUUID& id)
|
|||
|
||||
if (is_not_group_id)
|
||||
{
|
||||
LLDate date_added = LLDate::now();
|
||||
// For each avaline call the id of caller is different even if
|
||||
// the phone number is the same.
|
||||
// To avoid duplication of avaline list items in the recent list
|
||||
// of panel People, deleting id's with similar phone number.
|
||||
const LLUUID& caller_id = getIDByPhoneNumber(userdata);
|
||||
if (caller_id.notNull())
|
||||
mPeople.erase(caller_id);
|
||||
|
||||
//[] instead of insert to replace existing id->date with new date value
|
||||
mPeople[id] = date_added;
|
||||
//[] instead of insert to replace existing id->llsd["date"] with new date value
|
||||
mPeople[id] = userdata;
|
||||
mChangedSignal();
|
||||
}
|
||||
|
||||
|
|
@ -64,15 +70,55 @@ void LLRecentPeople::get(uuid_vec_t& result) const
|
|||
result.push_back((*pos).first);
|
||||
}
|
||||
|
||||
const LLDate& LLRecentPeople::getDate(const LLUUID& id) const
|
||||
const LLDate LLRecentPeople::getDate(const LLUUID& id) const
|
||||
{
|
||||
recent_people_t::const_iterator it = mPeople.find(id);
|
||||
if (it!= mPeople.end()) return (*it).second;
|
||||
if (it!= mPeople.end()) return it->second["date"].asDate();
|
||||
|
||||
static LLDate no_date = LLDate();
|
||||
return no_date;
|
||||
}
|
||||
|
||||
const LLSD& LLRecentPeople::getData(const LLUUID& id) const
|
||||
{
|
||||
recent_people_t::const_iterator it = mPeople.find(id);
|
||||
|
||||
if (it != mPeople.end())
|
||||
return it->second;
|
||||
|
||||
static LLSD no_data = LLSD();
|
||||
return no_data;
|
||||
}
|
||||
|
||||
bool LLRecentPeople::isAvalineCaller(const LLUUID& id) const
|
||||
{
|
||||
recent_people_t::const_iterator it = mPeople.find(id);
|
||||
|
||||
if (it != mPeople.end())
|
||||
{
|
||||
const LLSD& user = it->second;
|
||||
return user["avaline_call"].asBoolean();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const LLUUID& LLRecentPeople::getIDByPhoneNumber(const LLSD& userdata)
|
||||
{
|
||||
if (!userdata["avaline_call"].asBoolean())
|
||||
return LLUUID::null;
|
||||
|
||||
for (recent_people_t::const_iterator it = mPeople.begin(); it != mPeople.end(); ++it)
|
||||
{
|
||||
const LLSD& user_info = it->second;
|
||||
|
||||
if (user_info["call_number"].asString() == userdata["call_number"].asString())
|
||||
return it->first;
|
||||
}
|
||||
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// virtual
|
||||
bool LLRecentPeople::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,9 +58,15 @@ public:
|
|||
* Add specified avatar to the list if it's not there already.
|
||||
*
|
||||
* @param id avatar to add.
|
||||
*
|
||||
* @param userdata additional information about last interaction party.
|
||||
* For example when last interaction party is not an avatar
|
||||
* but an avaline caller, additional info (such as phone
|
||||
* number, session id and etc.) should be added.
|
||||
*
|
||||
* @return false if the avatar is in the list already, true otherwise
|
||||
*/
|
||||
bool add(const LLUUID& id);
|
||||
bool add(const LLUUID& id, const LLSD& userdata = LLSD().with("date", LLDate::now()));
|
||||
|
||||
/**
|
||||
* @param id avatar to search.
|
||||
|
|
@ -75,7 +81,25 @@ public:
|
|||
*/
|
||||
void get(uuid_vec_t& result) const;
|
||||
|
||||
const LLDate& getDate(const LLUUID& id) const;
|
||||
/**
|
||||
* Returns last interaction time with specified participant
|
||||
*
|
||||
*/
|
||||
const LLDate getDate(const LLUUID& id) const;
|
||||
|
||||
/**
|
||||
* Returns data about specified participant
|
||||
*
|
||||
* @param id identifier of specific participant
|
||||
*/
|
||||
const LLSD& getData(const LLUUID& id) const;
|
||||
|
||||
/**
|
||||
* Checks whether specific participant is an avaline caller
|
||||
*
|
||||
* @param id identifier of specific participant
|
||||
*/
|
||||
bool isAvalineCaller(const LLUUID& id) const;
|
||||
|
||||
/**
|
||||
* Set callback to be called when the list changed.
|
||||
|
|
@ -92,7 +116,10 @@ public:
|
|||
/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
|
||||
|
||||
private:
|
||||
typedef std::map<LLUUID, LLDate> recent_people_t;
|
||||
|
||||
const LLUUID& getIDByPhoneNumber(const LLSD& userdata);
|
||||
|
||||
typedef std::map<LLUUID, LLSD> recent_people_t;
|
||||
recent_people_t mPeople;
|
||||
signal_t mChangedSignal;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
#include "llinventorymodel.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llmutelist.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llsidepaneltaskinfo.h"
|
||||
#include "llslurl.h"
|
||||
#include "llstatusbar.h"
|
||||
|
|
@ -562,6 +563,103 @@ BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id)
|
|||
return object_found;
|
||||
}
|
||||
|
||||
bool LLSelectMgr::linkObjects()
|
||||
{
|
||||
if (!LLSelectMgr::getInstance()->selectGetAllRootsValid())
|
||||
{
|
||||
LLNotificationsUtil::add("UnableToLinkWhileDownloading");
|
||||
return true;
|
||||
}
|
||||
|
||||
S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
|
||||
if (object_count > MAX_CHILDREN_PER_TASK + 1)
|
||||
{
|
||||
LLSD args;
|
||||
args["COUNT"] = llformat("%d", object_count);
|
||||
int max = MAX_CHILDREN_PER_TASK+1;
|
||||
args["MAX"] = llformat("%d", max);
|
||||
LLNotificationsUtil::add("UnableToLinkObjects", args);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2)
|
||||
{
|
||||
LLNotificationsUtil::add("CannotLinkIncompleteSet");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!LLSelectMgr::getInstance()->selectGetRootsModify())
|
||||
{
|
||||
LLNotificationsUtil::add("CannotLinkModify");
|
||||
return true;
|
||||
}
|
||||
|
||||
LLUUID owner_id;
|
||||
std::string owner_name;
|
||||
if (!LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name))
|
||||
{
|
||||
// we don't actually care if you're the owner, but novices are
|
||||
// the most likely to be stumped by this one, so offer the
|
||||
// easiest and most likely solution.
|
||||
LLNotificationsUtil::add("CannotLinkDifferentOwners");
|
||||
return true;
|
||||
}
|
||||
|
||||
LLSelectMgr::getInstance()->sendLink();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLSelectMgr::unlinkObjects()
|
||||
{
|
||||
LLSelectMgr::getInstance()->sendDelink();
|
||||
return true;
|
||||
}
|
||||
|
||||
// in order to link, all objects must have the same owner, and the
|
||||
// agent must have the ability to modify all of the objects. However,
|
||||
// we're not answering that question with this method. The question
|
||||
// we're answering is: does the user have a reasonable expectation
|
||||
// that a link operation should work? If so, return true, false
|
||||
// otherwise. this allows the handle_link method to more finely check
|
||||
// the selection and give an error message when the uer has a
|
||||
// reasonable expectation for the link to work, but it will fail.
|
||||
bool LLSelectMgr::enableLinkObjects()
|
||||
{
|
||||
bool new_value = false;
|
||||
// check if there are at least 2 objects selected, and that the
|
||||
// user can modify at least one of the selected objects.
|
||||
|
||||
// in component mode, can't link
|
||||
if (!gSavedSettings.getBOOL("EditLinkedParts"))
|
||||
{
|
||||
if(LLSelectMgr::getInstance()->selectGetAllRootsValid() && LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() >= 2)
|
||||
{
|
||||
struct f : public LLSelectedObjectFunctor
|
||||
{
|
||||
virtual bool apply(LLViewerObject* object)
|
||||
{
|
||||
return object->permModify();
|
||||
}
|
||||
} func;
|
||||
const bool firstonly = true;
|
||||
new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
|
||||
}
|
||||
}
|
||||
return new_value;
|
||||
}
|
||||
|
||||
bool LLSelectMgr::enableUnlinkObjects()
|
||||
{
|
||||
LLViewerObject* first_editable_object = LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject();
|
||||
|
||||
bool new_value = LLSelectMgr::getInstance()->selectGetAllRootsValid() &&
|
||||
first_editable_object &&
|
||||
!first_editable_object->isAttachment();
|
||||
|
||||
return new_value;
|
||||
}
|
||||
|
||||
void LLSelectMgr::deselectObjectAndFamily(LLViewerObject* object, BOOL send_to_sim, BOOL include_entire_object)
|
||||
{
|
||||
// bail if nothing selected or if object wasn't selected in the first place
|
||||
|
|
|
|||
|
|
@ -439,6 +439,17 @@ public:
|
|||
|
||||
BOOL removeObjectFromSelections(const LLUUID &id);
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Selection editing
|
||||
////////////////////////////////////////////////////////////////
|
||||
bool linkObjects();
|
||||
|
||||
bool unlinkObjects();
|
||||
|
||||
bool enableLinkObjects();
|
||||
|
||||
bool enableUnlinkObjects();
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Selection accessors
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -141,6 +141,8 @@ public:
|
|||
|
||||
void toggleTabDocked();
|
||||
|
||||
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
|
||||
|
||||
LLPanel *getPanel();
|
||||
private:
|
||||
std::string mTabTitle;
|
||||
|
|
@ -269,6 +271,15 @@ void LLSideTrayTab::toggleTabDocked()
|
|||
LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
|
||||
}
|
||||
|
||||
BOOL LLSideTrayTab::handleScrollWheel(S32 x, S32 y, S32 clicks)
|
||||
{
|
||||
// Let children handle the event
|
||||
LLUICtrl::handleScrollWheel(x, y, clicks);
|
||||
|
||||
// and then eat it to prevent in-world scrolling (STORM-351).
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLSideTrayTab::dock(LLFloater* floater_tab)
|
||||
{
|
||||
LLSideTray* side_tray = getSideTray();
|
||||
|
|
|
|||
|
|
@ -2,31 +2,25 @@
|
|||
* @file llsimplestat.h
|
||||
* @brief Runtime statistics accumulation.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2010, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* 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://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* 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.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -326,6 +326,7 @@ bool LLTextureCacheRemoteWorker::doRead()
|
|||
// First state / stage : find out if the file is local
|
||||
if (mState == INIT)
|
||||
{
|
||||
#if 0
|
||||
std::string filename = mCache->getLocalFileName(mID);
|
||||
// Is it a JPEG2000 file?
|
||||
{
|
||||
|
|
@ -360,6 +361,11 @@ bool LLTextureCacheRemoteWorker::doRead()
|
|||
}
|
||||
// Determine the next stage: if we found a file, then LOCAL else CACHE
|
||||
mState = (local_size > 0 ? LOCAL : CACHE);
|
||||
|
||||
llassert_always(mState == CACHE) ;
|
||||
#else
|
||||
mState = CACHE;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Second state / stage : if the file is local, load it and leave
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue